大数据面试汇总-Hadoop汇总

转载自

1.hdfs写流程

2.hdfs读流程

3.hdfs的体系结构

前三个题目见hadoop面试整理一

4.一个datanode 宕机,怎么一个流程恢复

Datanode宕机了后,
1)如果是短暂的宕机,可以实现写好脚本监控重新启动起来
2)如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,那这台datanode就变为一台新的datanode了,删除他的所有数据文件和状态文件重新启动

5.hadoop 的 namenode 宕机,怎么解决

分析宕机后的损失,宕机后直接导致client无法访问内存中的元数据丢失,但是硬盘中的元数据应该还存在
1)如果只是节点挂了重启即可,
2)如果是机器挂了,重启机器后看节点是否能重启不能重启就要找到原因修复了。
但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA

6.namenode对元数据的管理

namenode对数据的管理采用了三种存储形式
内存元数据(NameSystem)
磁盘元数据镜像文件(fsimage镜像)
数据操作日志文件(可通过日志运算出元数据)(edit日志文件)

7.元数据的checkpoint

每隔一段时间,会由secondary namenode将namenode上积累所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint
在这里插入图片描述namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

8.yarn资源调度流程

在这里插入图片描述

9.hadoop中combiner和partition的作用

1)combiner是发生在map的最后一个阶段父类就是Reducer,意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量缓解网络传输瓶颈提高reducer的执行效率
2)partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

10.用mapreduce怎么处理数据倾斜问题?

数据倾斜:map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称之为数据倾斜。
(1)局部聚合加全局聚合。
第一次在 map 阶段对那些导致了数据倾斜的 key 加上 1 到 n 的随机前缀,这样本来相同的 key 也会被分到多个 Reducer 中进行局部聚合,数量就会大大降低。
第二次 mapreduce去掉 key 的随机前缀,进行全局聚合
思想:二次 mr,
第一次将 key 随机散列到不同 reducer 进行处理
达到负载均衡
目的。
第二次再根据去掉 key 的随机前缀按原 key 进行 reduce 处理
这个方法进行两次 mapreduce,性能稍差。
(2)增加 Reducer,提升并行度
JobConf.setNumReduceTasks(int)
(3)实现自定义分区
根据数据分布情况,自定义散列函数,将 key 均匀分配到不同 Reducer

11.shuffle 阶段,你怎么理解的

在这里插入图片描述
shuffle: 洗牌、发牌——(核心机制:缓存,数据分区,排序,Merge进行局部value的合并);
具体来说:就是将maptask输出的处理结果加粗样式数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序
1)Map 方法之后 Reduce 方法之前这段处理过程叫 Shuffle
2)Map 方法之后数据首先进入到分区方法,把数据标记好分区,然后把数据发送到 环形缓冲区;环形缓冲区默认大小 100m,环形缓冲区达到 80%时,进行溢写
溢写前对数 据进行排序,排序按照对 key 的索引进行字典顺序排序,排序的手段快排
溢写产生大量溢 写文件,需要对溢写文件进行归并排序
溢写的文件也可以进行 Combiner 操作,前提是汇总操作求平均值不行
最后将文件按照分区存储到磁盘等待 Reduce 端拉取
3)每个 Reduce 拉取 Map 端对应分区的数据
拉取数据后先存储到内存中内存不够 了,再存储到磁盘
拉取完所有数据后,采用归并排序内存和磁盘中的数据都进行排序。
进入 Reduce 方法前可以对数据进行分组操作。

12.Mapreduce 的 map 数量 和 reduce 数量是由什么决定的 ,怎么配置

map的数量由输入切片的数量决定,128M切分一个切片,只要是文件也分为一个切片,有多少个切片就有多少个map Task。
reduce数量自己配置
hive控制mapre方法

13.MapReduce优化经验

  1. 设置合理的map和reduce的个数。合理设置blocksize
  2. 避免出现数据倾斜
  3. combine函数
  4. 对数据进行压缩
  5. 小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)
  6. 参数优化

14.分别举例什么情况要使用 combiner,什么情况不使用?

平均数的时候就不需要用combiner,因为不会减少reduce执行数量
在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率

15.MR运行流程解析

在这里插入图片描述

  1. 一个mr程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程
  2. maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:
    利用客户指定的inputformat获取RecordReader读取数据,形成输入KV对
    输入KV对传递给客户定义的map()方法,做逻辑运算,并将map()方法输出的KV对收集到缓存
    将缓存中的KV对按照K分区排序后不断溢写到磁盘文件
  3. MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据范围(数据分区)
  4. Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干台maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算,并收集运算输出的结果KV,然后调用客户指定的outputformat将结果数据输出到外部存储

16.简单描述一下HDFS的系统架构,怎么保证数据安全?

在这里插入图片描述HDFS数据安全性如何保证?

  1. 存储在HDFS系统上的文件,会分割成128M大小的block存储在不同的节点上,block的副本数默认3份,也可配置成更多份;
  2. 第一个副本一般放置在与client(客户端)所在的同一节点上(若客户端无datanode,则随机放),第二个副本放置到与第一个副本同一机架的不同节点,第三个副本放到不同机架的datanode节点,当取用时遵循就近原则
  3. datanode以block为单位,每3s报告心跳状态,做10min内不报告心跳状态则namenode认为block已死掉,namonode会把其上面的数据备份到其他一个datanode节点上保证数据的副本数量
  4. datanode会默认每小时把自己节点上的所有块状态信息报告给namenode
  5. 用safemode模式:datanode会周期性的报告block信息。Namenode会计算block的损坏率,当阀值<0.999f时系统会进入安全模式,HDFS只读不写HDFS元数据采用secondaryname备份或者HA备份

17.在通过客户端向hdfs中写数据的时候,如果某一台机器宕机了,会怎么处理

写入的时候不会重新重新分配datanode
如果写入时,一个datanode挂掉,会将已经写入的数据放置到queue的顶部,并将挂掉的datanode移出pipline,将数据写入到剩余的datanode
写入结束后, namenode会收集datanode的信息,发现此文件的replication没有达到配置的要求(default=3),然后寻找一个datanode保存副本。

18.Hadoop优化有哪些方面

0)HDFS 小文件影响
(1)影响 NameNode 的寿命,因为文件元数据存储在 NameNode 的内存
(2)影响计算引擎的任务数量,比如每个小的文件都会生成一个 Map 任务
1)数据输入小文件处理:
(1)合并小文件:对小文件进行归档(Har)自定义 Inputformat 将小文件存储成SequenceFile 文件
(2)采用 ConbinFileInputFormat 来作为输入,解决输入端大量小文件场景。
(3)对于大量小文件 Job,可以开启 JVM 重用
2)Map 阶段
(1)增大环形缓冲区大小。由 100m 扩大到 200m
(2)增大环形缓冲区溢写的比例。由 80%扩大到 90%
(3)减少对溢写文件的 merge 次数。(10 个文件,一次 20 个 merge)
(4)不影响实际业务的前提下,采用 Combiner 提前合并,减少 I/O。
3)Reduce 阶段
(1)合理设置 Map 和 Reduce 数:两个都不能设置太少,也不能设置太多。太少,会导致 Task 等待,延长处理时间;太多,会导致 Map、Reduce 任务间竞争资源,造成处理超时等错误。
(2)设置 Map、Reduce 共存:调整 slowstart.completedmaps 参数,使 Map 运行到一定程度后Reduce 也开始运行减少 Reduce 的等待时间
(3)规避使用 Reduce,因为 Reduce 在用于连接数据集的时候将会产生大量的网络消耗
(4)增加每个 Reduce 去 Map 中拿数据的并行数
(5)集群性能可以的前提下,增大 Reduce 端存储数据内存的大小
4)IO 传输
(1)采用数据压缩的方式,减少网络 IO 的的时间。安装 Snappy 和 LZOP 压缩编码器。
(2)使用 SequenceFile 二进制文件
5)整体
(1**)MapTask 默认内存大小为 1G,可以增加 MapTask 内存大小为 4-5g
(2)ReduceTask 默认内存大小为 1G,可以增加 ReduceTask 内存大小为 4-5g
(3)可以
增加 MapTask 的 cpu 核数**,增加 ReduceTask 的 CPU 核数
(4)增加每个 Container 的 CPU 核数和内存大小
(5)调整每个 Map Task 和 Reduce Task 最大重试次数

19.大量数据求topN(写出mapreduce的实现思路)

20.列出正常工作的hadoop集群中hadoop都分别启动哪些进程以及他们的作用

1.NameNode它是hadoop中的主服务器,管理文件系统名称空间对集群中存储的文件的访问,保存有metadate
2.SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
4.ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
5.NodeManager(TaskTracker)执行任务
6.DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
7.JournalNode 高可用情况下存放namenode的editlog文件.

21.Hadoop总job和Tasks之间的区别是什么?

Job是我们对一个完整的mapreduce程序的抽象封装
Taskjob运行时,每一个处理阶段的具体实例,如map task,reduce task,maptask和reduce task都会有多个并发运行的实例

22.Hadoop高可用HA模式

HDFS高可用原理:
1)Hadoop HA(High Available)通过同时配置两个处于Active/Passive模式的Namenode来解决上述问题,状态分别是Active和Standby(支持). Standby Namenode作为热备份,从而允许在机器发生故障时能够快速进行故障转移,同时在日常维护的时候使用优雅的方式进行Namenode切换。Namenode只能配置一主一备,不能多于两个Namenode。
2)主Namenode处理所有的操作请求(读写),而Standby只是作为slave维护尽可能同步的状态,使得故障时能够快速切换到Standby为了使Standby Namenode与Active Namenode数据保持同步,两个Namenode都与一组Journal Node进行通信。当主Namenode进行任务的namespace操作时,都会确保持久会修改日志到Journal Node节点中Standby Namenode持续监控这些edit,当监测到变化时,将这些修改同步到自己的namespace
3)当进行故障转移时,Standby在成为Active Namenode之前,会确保自己已经读取了Journal Node中的所有edit日志,从而保持数据状态与故障发生前一致
4)为了确保故障转移能够快速完成,Standby Namenode需要维护最新的Block位置信息即每个Block副本存放在集群中的哪些节点上。为了达到这一点,Datanode同时配置主备两个Namenode,并同时发送Block报告和心跳到两台Namenode
5)确保任何时刻只有一个Namenode处于Active状态非常重要,否则可能出现数据丢失或者数据损坏。当两台Namenode都认为自己的Active Namenode时,会同时尝试写入数据(不会再去检测和同步数据)。为了防止这种脑裂现象,Journal Nodes只允许一个Namenode写入数据,内部通过维护epoch数来控制,从而安全地进行故障转移。

23.简要描述安装配置一个hadoop集群的步骤

  1. 使用root账户登录。
  2. 修改IP。
  3. 修改Host主机名。
  4. 配置SSH免密码登录。
  5. 关闭防火墙。
  6. 安装JDK。
  7. 上传解压Hadoop安装包。
  8. 配置Hadoop的核心配置文件hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml,yarn-site.xml
  9. 配置hadoop环境变量
  10. 格式化hdfs # bin/hadoop namenode -format
  11. 启动节点start-all.sh

24.fsimage和edit的区别

fsimage:filesystem image 的简写,文件镜像。
客户端修改文件时候,先更新内存中的metadata信息,只有当对文件操作成功的时候才会写到editlog
fsimage是文件meta信息的持久化的检查点。secondary namenode会定期的将fsimage和editlog合并dump成新的fsimage

25.yarn的三大调度策略

1)FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
2)Capacity(容量)调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
3)在Fair(公平)调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
需要注意的是,在下图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。

26.hadoop的shell命令用的多吗?,说出一些常用的

Hadoop是一个用于处理大规模数据的开源框架,它不仅是大数据技术的核心重点,也是面试中经常会问到的问题之一。Hadoop包含了Hadoop框架本身以及Hadoop生态系统中的其他辅助框架,如zookeeper、Flume、Hbase、Hive、Sqoop等。在一个正常工作的Hadoop集群中,需要启动多个进程来完成不同的任务。这些进程包括: 1. NameNode:负责管理HDFS(Hadoop分布式文件系统)的元数据,如文件的目录结构和文件块的位置信息。 2. DataNode:负责存储实际的数据块,并向NameNode报告块的状态。 3. ResourceManager:负责管理集群上的资源分配和任务调度,协调不同应用程序之间的资源竞争。 4. NodeManager:负责管理每个节点上的资源,接收来自ResourceManager的指令,启动和监控容器,执行具体的任务。 5. SecondaryNameNode:定期从NameNode中复制元数据,用于恢复NameNode的故障。 6. JobTracker:负责任务调度和资源管理,监控任务的执行并重新调度失败的任务。 7. TaskTracker:在每个节点上运行,负责执行特定的任务,如Map任务或Reduce任务。 这些进程协同工作,以实现Hadoop集群的分布式计算和数据存储。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [大数据开发面试题详解:Hadoop的运行原理](https://blog.csdn.net/xx666zz/article/details/85708344)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [2021最全大数据面试汇总---hadoop篇,附答案!](https://blog.csdn.net/weixin_45574790/article/details/119241157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值