hadoop 2022 面试题总结了

LD is tigger forever,CG are not brothers forever, throw the pot and shine.
Efficient work is better than attitude。All right, hide it。Advantages should be hidden.
talk is selected, show others the code,Keep progress,make a better result.

目录

概述

hadoop 学习资料

需求:

设计思路

相关代码如下:

实验效果:

待完成

分析:

16、FileInputFormat切片机制
job提交流程源码详解
  waitForCompletion()
  submit();
//建立连接:
Connect();

//创建提交job的代理

///判断是本地yarn还是远程
Initalize(jobTrackeerr);
//提交job
Submitter.submitJobIntefnal(Job.this,cluster);
//创建给集群提交数据的Stag路径
  Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);

// 2)获取jobid ,并创建job路径
    JobID jobId = submitClient.getNewJobID();
    // 3)拷贝jar包到集群
    copyAndConfigureFiles(job, submitJobDir);
    rUploader.uploadFiles(job, jobSubmitDir);

// 4)计算切片,生成切片规划文件
    writeSplits(job, submitJobDir);
    maps = writeNewSplits(job, jobSubmitDir);
    input.getSplits(job);     status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());

// 5)向Stag路径写xml配置文件
writeConf(Conf,submitSubFile);
Conof.writeXml(out);

//提交job,返回提交状态

19、 Maptask的个数由什么决定?
  一个job的map阶段MapTask并行度(个数),由客户端提交job时的切片个数决定。
(1)Read阶段:Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。

(3)Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。
(4)Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。
(5)Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。
(6)Combine阶段:当所有数据处理完成后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。
21、描述mapReduce有几种排序及排序发生的阶段
1)排序的分类:
  (1)部分排序:
    MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部排序。
  (2)全排序:
    如何用Hadoop产生一个全局排序的文件?最简单的方法是使用一个分区。但该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构。
替代方案:首先创建一系列排好序的文件;其次,串联这些文件;最后,生成一个全局排序的文件。主要思路是使用一个分区来描述输出的全局排序。例如:可以为待分析文件创建3个分区,在第一分区中,记录的单词首字母a-g,第二分区记录单词首字母h-n, 第三分区记录单词首字母o-z。
  (3)辅助排序:(GroupingComparator分组)
    Mapreduce框架在记录到达reducer之前按键对记录排序,但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。
3) 二次排序:     在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。
2)自定义排序WritableComparable
3)  bean对象实现WritableComparable接口重写compareTo方法,就可以实现排序 :
4)@Override     public int compareTo(FlowBean o) {       // 倒序排列,从大到小       return this.sumFlow > o.getSumFlow() ? -1 : 1;     }

4) 排序发生的阶段:
(1)一个是在map side发生在spill后partition前。  
(2)一个是在reduce side发生在copy后 reduce前
22、描述mapReduce中shuffle阶段的工作流程,如何优化shuffle阶段

分区,排序,溢写,拷贝到对应reduce机器上,增加combiner,压缩溢写的文件。
23、描述mapReduce中combiner的作用是什么,一般使用情景,哪些情况不需要,及和reduce的区别?
1)Combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量。
2)Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟reducer的输入kv类型要对应起来。

Combiner和reducer的区别在于运行的位置。
  Reducer是接收全局所有Mapper的输出结果。

24、如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?
  如果没有自定义的 partitioning,则默认的 partition 算法,即根据每一条数据的 key 的 hashcode 值摸运算(%)reduce 的数量,得到的数字就是“分区号“。

25、MapReduce 出现单点负载多大,怎么负载平衡?

通过Partitioner实现
26、MapReduce 怎么实现 TopN?
  可以自定义groupingcomparator,对结果进行最大值排序,然后再reduce输出时,控制只输出前n个数。就达到了topn输出的目的

完整版下载:

完整版下载: hadoop2022面试

小结:

主要讲述了自己的一些体会,里面有许多不足,请大家指正~

参考资料和推荐阅读

深度开源: link

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值