Hadoop面试大全【持续更新❤-个人收集用】

HDFS

常用端口号

hadoop2.xhadoop3.x
访问 HDFS 端口500709870
访问 MR 执行情况端口80808080
历史服务器1988819888
客户端访问集群端口90008020

常用配置

3.x:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
workers

HDFS三个核心组件是什么,分别有什么作用

HDFS的三个核心组件是:

  1. NameNode:NameNode是HDFS的主节点,负责存储HDFS的元数据,包括文件系统的命名空间、文件和目录的属性等。它记录了文件在集群中的位置以及数据块的复制情况。NameNode还负责协调客户端的读写请求,并管理数据块的复制和恢复。

  2. DataNode:DataNode是HDFS的数据节点,负责存储HDFS中的数据块。它接收来自客户端或其他DataNode的读写请求,并执行相应的操作。DataNode还负责数据块的复制和恢复,以保证数据的可靠性和高可用性。

  3. SecondaryNameNode:SecondaryNameNode并不是NameNode的备份,它主要负责定期合并和处理NameNode的编辑日志,生成新的检查点。检查点是NameNode元数据的一个镜像,当NameNode发生故障时,可以使用最近的检查点来加快恢复速度。SecondaryNameNode可以减少NameNode故障恢复的时间。

这三个组件共同协作,实现了HDFS的分布式存储和高可用性特性,确保数据的安全和可靠性。

HDFS 的存储机制

无论是 HDFS 文件的读还是写,都是主要涉及到三个部件:客户端(Client)、NmaeNode、DataNode;
写过程
![[Pasted image 20231109084144.png]]
1. 客户端向namenode请求上传文件,namenode检查目标文件是否存在
2. NameNode返回是否可以上传
3. 客户端请求第一个block上传到那几个datanode上
4. namenode返回3个datanode节点列表,三个datanode分别为dn1、dn2、dn3
5. 客户端请求dn1上传数据,并依次与dn1、dn2、dn3建立管道
6. 客户端开始往dn1上传第一个block,以packet为单位,dn1收到会转发给2,2转发给3,dn1每传一个packet会放到一个等待队列等待应答
7. 当一个block完成后,客户端再次请求NameNode请求上传第二个block,直到整个文件写入完全

读过程
![[Pasted image 20231109090504.png]]

  1. 客户端向NameNode请求读取文件,NameNode通过查询元数据没找到文件块所在的DataNode地址
  2. 更具就近原则和安全原则挑选DataNode服务器,请求读取数据
  3. DataNode开始传输数据给客户端
  4. 客户端以Packer为单位接收,先放本地缓存,然后写入目标文件

HDFS中大量小文件带来的问题以及解决方案

小文件的危害

存储:
1、会造成存储效率低,HDFS将文件分成块进行存储,每个块大小通常为128MB和256MB。如果有大量小文件,每个小文件都会占用一个块的存储空间,会造成存储空间的浪费
2、元数据开销大,HDFS的元数据存储在NameNode中,每个文件和目录都会有相应的元数据记录,当有大量小文件时,元数据的数量会急剧增加,导致NameNode的内存消耗变大
计算:
3、数据处理效率低,Hadoop中的数据处理任务是以块为单位处理的,有大量小文件,当然会导致任务启动和处理开销增加,降低整体数据处理的效率

小文件怎么解决

解决方案可以采取以下措施:

2、调整块大小:根据实际情况去调整HDFS的块大小,可以更具小文件的平均大小来选择适合的块大小,从而减少存储空间的良妃。

  1. 应用SequenceFile:HDFS提供了SequenceFile这种特殊的文件格式,它可以将多个小文件合并到一个文件中,并且保持文件的原始格式。这样可以减少存储空间的浪费,同时也减少了元数据的数量。
    har归档
  2. 使用Har文件:Hadoop Archive(Har)是Hadoop提供的一种归档文件格式,它可以将多个小文件打包成一个文件,并且可以在不解压的情况下进行读取。这样可以减少存储空间的浪费,提高数据的读取效率。
    JVM重用
    CombneTextInputformat
    1、可以通过MapReduce任务来实现,将多个小文件合并成一个或多个大文件,这样能减少文件数量(写个MapReduce任务去读取某个目录下的文件,重写为大文件)
    副本数

块大小

1.x: 64
2.x、3.x: 128
本地:32
企业:128、256、512(按照自己的读写速度)

数据倾斜

HDFS的数据合并(fsimag、editlogs是做什么用的)

1、NameNode初始化会产生一个 edits 文件和一个fimage 文件。
2、随着edit 文件不断增大,到达一个设定的阈值,SecondaryNameNode 把edit 和 fimage 文件复制到本地,同时 NameNode 会生成一个新的 edits 文件和一个fimage 文件替换掉旧的,保证数据不会出现冗余
3、Secondary NameNode拿到这两个文件后,会在内存中进行合并成一个fsImage.ckpt的文件(这个过程称为checkpoint),合并完成后,再将fsImage.ckpt文件复制到NameNode下。
4、NameNode文件拿到fsImage.ckpt文件后,会将旧的fsimage文件(元数据镜像)替换掉

NameNode的工作机制、DataNode的工作机制

分为两个阶段:
第一阶段:NameNode启动
1、第一次启动NameNode时,如果是第一次启动,则会创建Edits和Fsimage文件,

Hadoop需要那些配置文件,其作用是什么

  1. core-site.xml:该文件用于配置Hadoop的核心属性,如文件系统的默认URI、I/O缓存大小、日志目录等。

  2. hdfs-site.xml:该文件用于配置Hadoop分布式文件系统(HDFS)的属性,如副本数量、块大小、数据节点的心跳间隔等。

  3. mapred-site.xml:该文件用于配置Hadoop MapReduce的属性,如任务跟踪器和任务调度器的地址、任务最大尝试次数等。

  4. yarn-site.xml:该文件用于配置Hadoop的资源管理器(YARN)的属性,如节点管理器的地址、资源分配策略、容器最大内存等。

这些配置文件的作用是为Hadoop的各个组件提供必要的配置信息,以便它们能够正确地运行和相互协作。通过修改这些配置文件,可以调整Hadoop系统的行为和性能。

列举出正常工作的Hadoop集群中hadoop都需要启动哪些进程?

1、NameNode:是HDFS的主节点,主要作用是存储元数据,包括文件系统的命名空间、文件和目录的属性等;
2、DataNode:是HDFS的从节点也是数据节点,主要负责存储HDFS的数据块,提供数据读写、赋值的功能
3、SecondaryNameNode:负责定期合并和处理NameNode的编辑日志,生成新的存档,减少NameNode故障恢复时间
4、 ResourceManager:负责管理集群的资源,接收客户端的作业提交请求,并将作业分配给可用的NodeManager执行。
5、NodeManager:负责管理单个节点上的资源,接收来自ResourceManager的任务分配,并启动和监控任务的执行。
6、 JobHistoryServer:负责收集和展示作业的执行历史信息,包括作业的状态、进度和日志等。

为什么 Linux块大小是4kb,而HDFS上是128MB

块是存储在文件系统最小的单元,如果采用4kb的块大小去存储到HDFS上,就需要大量的块,大大增加寻找块的时间,降低读写效率,并且map喝reduce都是一个块为处理单位,如果块很小会造成MapRduce任务书很多,任务之间开小变大,降低效率。

NameNode与SecondaryNameNode的区别和联系

NameNode挂了怎么办

NameNode HA

NameNode宕机了怎么办

NameNode 的城邦机制


MapReduce

shuffl 及其优化

map方法之后,reduce方法之前混洗的过程,叫做shuffl

MR的执行步骤

我们整个MR的执行可以分为五个阶段:写入-》Map-》Shuffe-》Reduce-》写出
写入阶段
输入 Map 阶段的数据源,必须经过分片和格式化操作。

  • 分片操作:指的是将我们源文件划分为大小相等的小数据快(Hadoop 2.X 为 128MB),也就是分片。Hadoop会为每一个分片构建一个 Map 任务。并由该任务去运行自定义的map()那么急。从而处理分片里的每一条记录
  • 格式化操作:将划分好的分片格式化为键值对形式的数据,key代表偏移量,value代表每一行内容

执行 Map Task
每个 Map 任务都有一个内存缓冲区(缓冲区大小 100MB ),输入的分片( split )数据经过 Map 任务处理后的中间结果会写入内存缓冲区中。
如果写人的数据达到内存缓冲的阈值( 80MB ),会启动一个线程将内存中的溢出数据写入磁盘,同时不影响 Map 中间结果继续写入缓冲区。
在溢写过程中, MapReduce 框架会对 key 进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部溢写入磁盘形成一个溢写文件,如果是多个溢写文件,则最后合并所有的溢写文件为一个文件。

执行 Shuffle 过程
MapReduce 工作过程中, Map 阶段处理的数据如何传递给 Reduce 阶段,这是 MapReduce 框架中关键的一个过程,这个过程叫作 Shuffle 。
Shuffle 会将 MapTask 输出的处理结果数据分发给 ReduceTask ,并在分发的过程中,对数据按 key 进行分区和排序。

执行 Reduce Task
输入 ReduceTask 的数据流是<key, {value list}>形式,用户可以自定义 reduce()方法进行逻辑处理,最终以<key, value>的形式输出。

写入文件
MapReduce 框架会自动把 ReduceTask 生成的<key, value>传入 OutputFormat 的 write 方法,实现文件的写入操作

请简述MapReduce中combiner、Partition的作用

Yarn

yarn的基本组成

Yarn结构呢是由一个ResourceManage与多个NodeManager组成主从架构。
ResourceManage负责对NodeManager所有的资源进行统一的管理和调度,当我们处理一个作业时,ResourceManager会在NM节点上创建一个监控作业运行的程序ApplicationMaster。
ResouceManager(简称RM):
我们的RM是负责整个集群资源的调度,该部件由俩部件组成:Scheduler(调度器)和 ApplicationsMaster(简称ASM)。
调度器会根据特定的实现调度算法,结合作业所在的队列,按照资源调度算法分配给每个任务。分配的资源我们以容器(container)的形式提供,容器是一个相对封闭独立的环境,已经将我们cpu、内存以及任务所需环境全部封装到一起。目前我们生产环境较多的有两种:能力调度器和公平调度器

ApplicationMaster(简称AM):
每个提交到集权的任务(job)都会有一个对应的AM来管理。她负责对数据进行切分,并为当前应用程序去向RM去申请资源,当申请到资源会与NM通信,启动容器并运行相对应的任务。此外,AM还负责监控任务(task)的状态和执行的进度

NodeManage(简称NM):
NM负责管理集群中单个节点的资源和任务,每一个节点对应一个NM,NM负责接收AM的请求启动容器,监控容器运行状态,并定时汇报给RM。

yarn的工作机制

![[Pasted image 20231122100749.png]]
1、客户端会像yarn提交一个作业(Application)
2、作业提交后,RM会从NodeManager 收集资源信息,在有足够资源的节点分配一个容器,并与对应的NM进行通信,要求他在该容器启动APPMaster。
3、AppMaster成功创建后,会像RM的ASM去注册自己,表示自己可以去管理一个作业。
4、注册成功后AppMaster会对作业需要处理的数据进行切分,然后向RM申请资源,RM会根据调度算法提供资源给AM
5、AM申请成功后,会像NM通信,要求他启动任务。
6、NM接收到请求后,会根据作业信息去启动对应任务
7、启动后每个任务会定时向AM提供自己的状态信息和执行的进度
8、作业完成后AM会像ASM去注销和关闭自己

常用yarn命令:

yarn application -kill application_xxxx_xxx      杀掉Hive或Spark任务

yarn logs -applicationId application_xxxx_xxx   查看任务日志

yarn的调度器

有几种?

FIFO 、 容量、 公平
FIFO:

单队列先进先出
优点:简单易懂;
缺点:不支持多队列,生产环境很少使用;
Capacity Scheduler:

1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。

2、容量保证:管理员可为每个队列设置资源最低保证和资源使用上限

3、灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用 程序提交,则其他队列借调的资源会归还给该队列。

4、多租户: 支持多用户共享集群和多应用程序同时运行。 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

默认是哪个调度器

apche:容量(Capacity Scheduler)
CDH:公平(Fair Scheduler)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值