0


hadoop生态圈面试精华之Hadoop基础

Hadoop基础

介绍下Hadoop
回答技巧:说下Hadoop核心组件,讲下HDFS原理、MapReduce过程等,也可以在介绍完组件部分后, 看看面试官会不会继续往下问(比如让你说下HDFS读写流程、MapReduce工作原理等),给面试官留点 空间,这样回答下去,面试官能发掘你的技能点,你也能面的轻松些。如果没问了,就算了。当然你一 下全说完,面试官有兴趣也可以。

参考答案:
1、先说下Hadoop是什么
Hadoop是一个分布式系统基础架构,主要是为了解决海量数据的存储和海量数据的分析计算问题。

2、说下Hadoop核心组件
Hadoop自诞生以来,主要有Hadoop 1.x、2.x、3.x三个系列多个版本;
Hadoop 1.x组成:HDFS(具有高可靠性、高吞吐量的分布式文件系统,用于数据存储), MapReduce(同时处理业务逻辑运算和资源的调度),Common(辅助工具,为其它Hadoop模块提供基 础设施);
Hadoop 2.x和Hadoop 3.x组成上无变化,和Hadoop 1.x相比,增加了YARN,分担了MapReduce的工作, 组件包括:HDFS(具有高可靠性、高吞吐量的分布式文件系统,用于数据存储),MapReduce(处理业 务逻辑运算),YARN(负责作业调度与集群资源管理),Common(辅助工具,为其它Hadoop模块提 供基础设施)。
这里也可以先说各个系列的Hadoop组成,然后再说下HDFS、MapReduce、YARN和Common的作用(见
“Hadoop主要分哪几个部分?他们有什么作用?”)。

Hadoop的特点
问过的一些公司:字节参 考 答 案 : 1)高可靠性
Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障时,也不会大致数据的丢失

1 高扩展性
在集群间分配任务数据,可方便的扩展数以千计的节点

2 高效性
在MapReduce的思想下,Hadoop是并行工作,加快任务处理速度

3 高容错性
能够自动将失败的任务重新分配

说下Hadoop生态圈组件及其作用
回答技巧:说一些就可以了,不用全部说完,如果问还有吗,知道就说,不知道就说不知道,别画蛇添 足
可回答:对Hadoop生态的理解
1.Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护, 命名服务。
2.Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
3.Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。
4.Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表,并提供简单 的sql 查询功能,可以将sql语句转换为MapReduce任务进行运行。
5.Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Hadoop主要分哪几个部分?他们有什么作用?
可回答:1)Hadoop的组件有哪些;2)Hadoop原理
参考答案:
在这里插入图片描述
Hadoop主要组件如上图,主要是HDFS、MapReduce、YARN、Common

HDFS
HDFS是一个文件系统,用于存储文件,通过目录树来定位文件。
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

MapReduce
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序, 并发运行在一个Hadoop集群上。
MapReduce将计算过程分为两个阶段:Map和Reduce
Map阶段并行处理输入数据Reduce阶段对Map结果进行汇总

YARN
先来看两个问题,在Hadoop中如何管理集群资源?
如何给任务合理分配资源?
YARN在Hadoop中的作用,就是上面两个问题的答案。Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系 统之上的应用程序。

Common
Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。

Hadoop 1.x,2.x,3.x的区别
在这里插入图片描述
参考答案:
Hadoop 1.x阶段,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大;
Hadoop 2.x阶段,增加了Yarn。Yarn只负责资源的调度,MapReduce只负责运算;
Hadoop 3.x相比于Hadoop 2.x阶段在组成上没有变化。
4 NameNode
就是Master,Hadoop的主管、管理者
1管理HDFS的名称空间;
2配置副本策略;
3管理数据块(Block)映射信息;
4处理客户端读写请求。

5 DataNode
就是Slave。NameNode下达命令,DataNode执行实际的操作。
1存储实际的数据块;
2执行数据块的读/写操作。

6 Secondary NameNode
Secondary NameNode并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode
并提供服务。而是提供周期检查点和清理任务,帮助NN合并editslog,减少NN启动时间。
1辅助NameNode,分担其工作量,如定期合并Fsimage和Edits,并推送给NameNode
2在紧急情况下,可辅助恢复NameNode

7 ResourceManager(JobTracker)
整个集群资源(内存、CPU等)的老大。负责集群中所有资源的统一管理和分配,它接受来自各个节点
(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(即
ApplicationMaster)。
1与客户端交互,处理来自客户端的请求。
2启动和管理ApplicatinMaster,并在它运行失败时重新启动它。
3管理NodeManager,接受来自NodeManager的资源管理汇报信息,并向NodeManager下达管理命令
(比如杀死Contanier)等。
1资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源(核心)。

8 NodeManager(TaskTracker)
NodeManager是YARN中单个节点的代理(单个节点服务器资源老大),它需要与应用程序的ApplicationMaster和集群管理者ResourceManager交互;它从ApplicationMaster上接收有关Container的命 令并执行(比如启动、停止Contaner);向ResourceManager汇报各个Container运行状态和节点健康状 况,并领取有关Container的命令(比如清理Container)。
NodeManager管理的是Container而不是任务,一个Container中可能运行着各种任务,但是对NodeManager而言是透明的,它只负责Container相关操作,比如管理Container的生命周期,即启动Container、监控Container和清理Container等。
1管理单个节点上的资源
2处理来自ResourceManager的命令
3处理来自ApplicationMaster的命令

9 DFSZKFailoverController
高可用时它负责监控NameNode的状态,并及时的把状态信息写入Zookeeper。它通过一个独立线程周期 性的调用NameNode上的一个特定接口来获取NameNode的健康状态。ZKFC也有选择谁作为Active NameNode的权利,因为最多只有两个节点,选择策略比较简单(先到先得,轮换)。

10 JournalNode
高可用情况下存放NameNode的editlog文件。

在集群计算的时候,什么是集群的主要瓶颈
磁盘IO(正解),CPU,内存,网络带宽

搭建Hadoop集群的xml文件有哪些?
core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
fs.defaultFS hdfs://hadoop102:8020
hadoop.tmp.dir /opt/module/hadoop-3.1.3/data
hadoop.http.staticuser.user atguigu

hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

1
2dfs.namenode.http-address
3hadoop102:9870
4
5

6
7dfs.namenode.secondary.http-address
8hadoop104:9868
9
10

yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
yarn.nodemanager.aux-services mapreduce_shuffle
yarn.resourcemanager.hostname hadoop103
yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME P

mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
mapreduce.framework.name yarn

Hadoop的checkpoint流程
参考答案:
在这里插入图片描述
在hdfs-site.xml文件指定Secondary NameNode部署在哪个机器上。
当记录条数超过100w条,或者时间超过3600s(1小时),Secondary NameNode提醒NameNode做Checkpoint。
步骤如下:
1)Secondary NameNode提醒NameNode开始做Checkpoint; 2)NameNode上的edit_inprogress文件滚动生成edit_sum文件;
1edit_inprogress滚动生成edit文件,将滚动前的编辑日志edit和镜像文件fsimage拷贝到Secondary NameNode;
2Secondary NameNode 加载编辑日志和镜像文件到内存并合并;
3生成新的镜像文件fsimage.chkpoint,拷贝fsimage.chkpoint到NameNode,NameNode将fsimage.chkpoint重新命名成fsimage。

详细版本
在这里插入图片描述
FsImage :
元数据序列化后在磁盘存储的地方。包含HDFS文件系统的所有目录跟文件inode序列化信息。

Memory:
元数据在内存中存储的地方。

Edit文件:
1Edit 记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。
2一旦元数据有更新跟添加,元数据修改追加到Edits中然后修改内存中的元数据,这样一旦NameNode
节点断电,通过 FsImage 跟 Edits 的合并生成元数据。
1Edits文件不要过大,系统会定期的由 Secondary Namenode 完成 FsImage 和 Edits 的合并。

Hadoop的默认块大小是多少?为什么要设置这么大?
可回答:1)Hadoop的block大小调大了会造成什么影响?调大好还是调小好一点?为什么?2)对于MapReduce程序,block调大好还是调小好?为什么?3)为什么块的大小不能设置的太小,也不能设置 的太大?4)HDFS的默认数据块大小是多少?(128M)为什么是128M?
回答技巧:从寻址和磁盘两个方面回答
参考答案:
默认块大小:
Hadoop 2.7.2版本及之前默认64MB,Hadoop 2.7.3版本及之后默认128M
块大小:
HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置,而且NameNode需要大量内存来存 储元数据,不可取。
如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处 理这块数据时,会非常慢。
如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小 设置约为100MB。默认的块大小128MB。
块的大小: 10ms100100M/s = 100M ,如图
在这里插入图片描述

HDFS块的大小设置主要取决于磁盘传输速率。

Block划分的原因
可回答:Hadoop为什么要分块存储参考答案:
目的:减少磁盘寻道的时间。
不设置block:因为数据是分散的存放磁盘上的,读取数据时需要不停的进行磁盘寻道,开销比较大。
使用block:一次可以读取一个block中的数据,减少磁盘寻道的次数和时间。

Hadoop常见的压缩算法?
答案:
Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才 可以支持。
数据压缩的位置如下所示。
在这里插入图片描述
MapReduce数据压缩解析1)输入端采用压缩
在有大量数据并计划重复处理的情况下,应该考虑对输入进行压缩。然而,你无须显示指定使用的编解 码方式。Hadoop自动检查文件扩展名,如果扩展名能够匹配,就会用恰当的编解码方式对文件进行压 缩和解压。否则,Hadoop就不会使用任何编解码器。

11 mapper输出端采用压缩
当map任务输出的中间数据量很大时,应考虑在此阶段采用压缩技术。这能显著改善内部数据Shuffle过 程,而Shuffle过程在Hadoop处理过程中是资源消耗最多的环节。如果发现数据量大造成网络传输缓慢, 应该考虑使用压缩技术。可用于压缩mapper输出的快速编解码器包括LZO或者Snappy。

12 reducer输出采用压缩
在此阶段启用压缩技术能够减少要存储的数据量,因此降低所需的磁盘空间。当mapreduce作业形成作 业链条时,因为第二个作业的输入也已压缩,所以启用压缩同样有效。

压缩方式对比
1Gzip压缩
优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件 就和直接处理文本一样;大部分linux系统都自带gzip命令,使用方便。

缺点:不支持split。
应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。例如说 一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需 要做任何修改。

13 Bzip2压缩
优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux 系统下自带bzip2命令,使用方便。
缺点:压缩/解压速度慢;不支持native。
应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式; 或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情 况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序
(即应用程序不需要修改)的情况 。

14 Lzo压缩
优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;可以在
linux系统下安装lzop命令,使用方便。
缺点:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些 特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。
应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点 越越明显。

15 Snappy压缩
优点:高速压缩速度和合理的压缩率。
缺点:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;
应用场景:当Mapreduce作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格 式;或者作为一个Mapreduce作业的输出和另外一个Mapreduce作业的输入。

Hadoop作业提交到YARN的流程?
问过的一些公司:字节参考答案:

作业提交全过程详解
在这里插入图片描述
1)作业提交
第 1 步:Client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业。第 2 步:Client 向 RM 申请一个作业 id。
第 3 步:RM 给 Client 返回该 job 资源的提交路径和作业 id。
第 4 步:Client 提交 jar 包、切片信息和配置文件到指定的资源提交路径。第 5 步:Client 提交完资源后,向 RM 申请运行 MrAppMaster。2)作业初始化
第 6 步:当 RM 收到 Client 的请求后,将该 job 添加到容量调度器中。第 7 步:某一个空闲的 NM 领取到该 Job。
第 8 步:该 NM 创建 Container,并产生 MRAppmaster。第 9 步:下载Client 提交的资源到本地。

16 任务分配
第 10 步:MrAppMaster 向 RM 申请运行多个 MapTask 任务资源。
第 11 步:RM 将运行 MapTask 任务分配给另外两个NodeManager,另两个 NodeManager分别领取任务并创建容器。

17 任务运行
第 12 步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动
MapTask,MapTask 对数据分区排序。
第13 步:MrAppMaster 等待所有MapTask 运行完毕后,向RM 申请容器,运行ReduceTask。第 14 步:ReduceTask 向 MapTask 获取相应分区的数据。
第 15 步:程序运行完毕后,MR 会向 RM 申请注销自己。

18 进度和状态更新
YARN 中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过
mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

19 作业完成
除了向应用管理器请求作业进度外, 客户端每 5 秒都会通过调用 waitForCompletion()来检查作业是否完成。时间间隔可以通过 mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和Container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

Hadoop的Combiner的作用
问过的一些公司:冠群驰骋参考答案:

作用
对每一个MapTask的输出进行局部汇总,以减小网络传输量

Combiner理解
Combiner是MapReduce程序中Mapper和Reducer之外的一种组件,它属于优化方案,由于带宽限制,应 该尽量限制map和reduce之间的数据传输数量。它在Map端把同一个key的键值对合并在一起并计算,计 算规则与reduce一致,所以Combiner也可以看作特殊的Reducer。

Combiner和Reducer的区别在于运行的位置:
Combiner是在每一个MapTask所在的节点运行; Reducer是接收全局所有Mapper的输出结果。

在哪里使用Combiner
map输出数据根据分区排序完成后,在写入文件之前会执行一次combine操作(前提是作业中设置了这 个操作);
如果map输出比较大,溢出文件个数大于3(此值可以通过属性min.num.spills.for.combine配置)时,在
merge的过程(多个spill文件合并为一个大文件)中前还会执行Combiner操作。

注意事项
不是每种作业都可以做combiner操作的,只有满足以下条件才可以:
Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,因为Combine本 质上就是reduce操作。
计算逻辑上,Combine操作后不会影响计算结果,像求和,最大值就不会影响,求平均值就影响 了。

Hadoop序列化和反序列化
问过的一些公司:字节参考答案:

1、序列化和反序列化
序列化
把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。
反序列化
将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象

2、为什么要序列化
一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用, 不能被发送到网络上的另外一台计算机。然而序列化可以存储“活的” 对象,可以将“活的”对象发送到远程计算机。

3、为什么不用 Java 的序列化
Java 的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息
(各种校验信息,Header,继承体系等),不便于在网络中高效传输。所以, Hadoop 自己开发了一套序列化机制(Writable)。

4、Hadoop 序列化特点
紧凑:高效使用存储空间。
快速:读写数据的额外开销小。互操作:支持多语言的交互
Hadoop的运行模式
问过的一些公司:央视网参考答案:
20 单机模式
安装简单,在一台机器上运行服务,几乎不用做任何配置,但仅限于调试用途。没有分布式文件系统, 直接读写本地操作系统的文件系统。
21 伪分布式模式
在单节点上同时启动namenode、datanode、jobtracker、tasktracker、secondary namenode等进程,模拟分布式运行的各个节点。配置已经很接近完全分布式。
22 完全分布式模式
正常的Hadoop集群,由多个各司其职的节点构成。

Hadoop小文件处理问题
可回到:Hadoop小文件优化
问过的一些公司:小米,端点数据(2021.07),快手(2021.09),百度(2021.10),腾讯云(2021.10) 参考答案:
小文件指的是那些size比HDFS的block size小的多的文件。Hadoop适合处理少量的大文件,而不是大量的小文件。
1、小文件导致的问题
首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如 果有1000 0000个小文件,每个文件占用一个block,则namenode大约需要2G空间。如果存储1亿个文件,则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。其次,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问 大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而
task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

2、Hadoop自带的解决方案
对于小文件问题,Hadoop本身也提供了几个解决方案,分别为: Hadoop Archive ,Sequencefile 和 CombineFileInputFormat 。

Hadoop Archive
Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。
对某个目录/foo/bar下的所有小文件存档成/outputdir/ zoo.har:
1 hadoop archive -archiveName zoo.har -p /foo/bar /outputdir
当然,也可以指定HAR的大小(使用-Dhar.block.size)。
HAR是在Hadoop file system之上的一个文件系统,因此所有fs shell命令对HAR文件均可用,只不过是文件路径格式不一样,HAR的访问路径可以是以下两种格式:

  1. har://scheme-hostname:port/archivepath/fileinarchive
  2. har:///archivepath/fileinarchive(本节点) 可以这样查看HAR文件存档中的文件: 1 hadoop dfs -ls har:///user/zoo/foo.har 输出:
  3. har:///user/zoo/foo.har/hadoop/dir1
  4. har:///user/zoo/foo.har/hadoop/dir2 使用HAR时需要两点 第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命 令。此外,HAR还有一些缺陷: 第一,一旦创建,Archives便不可改变。要增加或移除里面的文件,必须重新创建归档文件。 第二,要归档的文件名中不能有空格,否则会抛出异常,可以将空格用其他符号替换(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement参数)。 第三,存档文件不支持压缩。一个归档后的文件,其存储结构如下图:

在这里插入图片描述
Sequence file
Sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。
Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操 作。
在这里插入图片描述
Hadoop为什么要从2.x升级到3.x?
可回答:Hadoop 3.x 版本相对于 Hadoop 2.x的新特性问过的一些公司:字节(2021.07)
参考答案:
Apache Hadoop 3.x在以前的主要发行版本(hadoop-2.x)上进行了许多重大改进。
1、最低要求的Java版本从Java 7增加到Java 8
现在,已针对Java 8的运行时版本编译了所有Hadoop JAR。仍在使用Java 7或更低版本的用户必须升级到Java 8。
2、支持HDFS中的纠删码
纠删码是一种持久存储数据的方法,可节省大量空间。与标准HDFS副本机制的3倍开销相比,像Reed-Solomon(10,4) 这样的标准编码的空间开销是1.4倍。由于纠删码在重建期间会带来额外的开销,并且大多数情况下会执行远程读取,因此传统上已将其用于 存储较冷,访问频率较低的数据。
在部署此功能时应考虑纠删码机制的网络和CPU开销。
关于HDFS中纠删码更详细的介绍,可查看我之前写的这篇文章: 深入剖析 HDFS 3.x 新特性-纠删码
3、Shell脚本重写
Hadoop Shell脚本已被重写,以修复许多长期存在的错误并包括一些新功能。Hadoop的开发人员尽管一直在寻求兼容性,但是某些更改可能会破坏现有的安装。
4、MapReduce 任务本地优化
MapReduce 增加了对 map 输出收集器的本地执行的支持,对于 shuffle 密集型工作,这可以使性能提高
30%或更多。
5、支持两个以上的 NameNode
在之前的版本中,HDFS的高可用最多支持两个NameNode。在HDFS 3.x 版本中,通过将编辑复制到法定数量的三个JournalNode,该体系结构能够容忍系统中任何一个节点的故障。但是,某些部署需要更高的容错度。这个新特性启用了这一点,该功能允许用户运行多个备用NameNode。例如,通过配置三个NameNode和五个JournalNode,群集可以忍受两个节点的故障,而不 仅仅是一个节点的故障。
6、多个服务的默认端口已更改
以前,多个Hadoop服务的默认端口在Linux临时端口范围内(32768-61000)。这意味着在启动时,服务 有时会由于与另一个应用程序的冲突而无法绑定到端口。这些冲突的端口已移出临时范围,具体的端口更改如下:
NameNode 的端口:50070 --> 9870, 8020 --> 9820, 50470 --> 9871;
Secondary NameNode 的端口:50091 --> 9869, 50090 --> 9868;
DataNode 的端口:50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864;
Hadoop KMS 的端口:16000 --> 9600(HBase的HMaster端口号与Hadoop KMS端口号冲突。两者都使用16000,因此Hadoop KMS 更改为9600)。
7、支持Microsoh Azure数据湖和阿里云对象存储系统文件系统连接器
Hadoop现在支持与Microsoh Azure数据湖和Aliyun对象存储系统集成,作为与Hadoop兼容的替代文件系统。
8、数据内节点平衡器
单个DataNode可管理多个磁盘。在正常的写操作过程中,磁盘将被均匀填充。但是,添加或替换磁盘可 能会导致DataNode内部出现严重偏差。原有的HDFS平衡器无法处理这种情况。新版本的HDFS中有平衡 功能处理,该功能通过hdfs diskbalancer CLI调用。
9、基于HDFS路由器的联合

基于HDFS路由器的联合添加了一个RPC路由层,该层提供了多个HDFS名称空间的联合视图。这简化了现 有HDFS客户端对联合群集的访问。
10、YARN资源类型
YARN资源模型已被通用化,以支持用户定义的CPU和内存以外的可计数资源类型。例如,集群管理员可 以定义资源,例如GPU,软件许可证或本地连接的存储。然后可以根据这些资源的可用性来调度YARN任 务。

Hadoop的优缺点
问过的一些公司:小红书(2021.11) 参考答案:
优点:
23 高可靠性
Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障时,也不会大致数据的丢失
24 高扩展性
在集群间分配任务数据,可方便的扩展数以千计的节点
25 高效性
在MapReduce的思想下,Hadoop是并行工作,加快任务处理速度
26 高容错性
能够自动将失败的任务重新分配
缺点:

  1. Hadoop不适用于低延迟数据访问
  2. Hadoop不能高效存储大量小文件
  3. Hadoop不支持多用户写入并任意修改文件
标签: hadoop 面试 大数据

本文转载自: https://blog.csdn.net/m0_46914845/article/details/126395313
版权归原作者 大数据小理 所有, 如有侵权,请联系我们删除。

“hadoop生态圈面试精华之Hadoop基础”的评论:

还没有评论