威❤ itspcool 一起交流学习
大数据训练营Download:https://www.ukoou.com/resource/1114 【复制打开】
jk大数据训练营学习心得
相对于算法岗来说,大数据开发岗位对于从业者的学历要求并不算高,很多本科生也都在从事大数据开发岗,但是这些本科生往往都具有比较丰富的开发经验,对于刚毕业的本科生来说,如果想从事大数据开发岗通常还需要一段时间的积累。
大数据开发通常有两种方式,一种是大数据平台的研发,这一类岗位属于研发岗,对于从业者的要求非常高,目前很多研究生毕业后往往会从事平台研发岗位,但是通常也需要一段时间的技术积累。实际上当前有很多程序员想从事平台研发岗位,但是受限于自身的知识结构,所以往往也会选择通过读研来促进自身的岗位升级。
大数据训练营 - 面试题
Hadoop Yarn的工作流程:
(1)首先,客户端向整个集群提交MapReduce作业,并向ResouceManager申请一个作业id;
(2)然后,ResouceManager给客户端返回该作业资源的提交路径和作业id;
(3)这时候,客户端根据ResouceManager返回来作业提交路径,将jar包、切片信息和配置文件信息提交到指定路径下;
(4)当客户端提交完资源后,开始向ResouceManager申请运行MRAppMaster;
(5)ResouceManager收到客户端的请求之后,会将客户端提交的job初始化成一个个task,并且放入到容量调度器中;
(6)当某一个空闲的NodeManager领取到该作业之后,该NodeManager就开始创建Container容器,启动MRAppMaster进程,并且下载客户端提交的资源到本地;
(7)接着,MRAppMaster进程向ResouceManager申请运行多个MapTask任务资源;
(8)ResouceManager将运行的MapTask任务分配给空闲的NodeManager,NodeManager分别领取到任务后,开始创建容器,并且启动运行MapTask任务;
(9)当所有的MapTask任务运行完成之后,MRAppMaster进程向ResouceManager申请运行多个ReduceTask任务资源;
(10)当所有的ReduceTask任务运行完毕之后,MapReduce程序会向ResouceManager申请注销自己,并释放资源;
如何能够让Map执行效率最高
1、调大环形缓冲区的大小,将100MB调更大。
2、调大环形缓冲区阈值(80%)的大小。
3、对Map输出的数据进行压缩。
尽量减少环形缓冲区溢写的次数,减少IO的使用。
MapReduce如何优化?
(1)小文件优化
Hadoop适合大文件的处理和存储,但是不适合小文件?为什么?
存储方面:
hadoop的存储每个文件都会在NameNode上记录元数据,如果小文件过多,造成NameNode的压力。
读取方面:
同样大小的文件分为很多小文件的话,会增加磁盘寻址次数,降低性能。
计算方面:
一个map默认处理一个分片或者一个小文件,如果map的启动时间都比数据处理的时间还要长,那么就会造成性能低,而且在map端溢写磁盘的时候每一个map最终会产生reduce数量个数的中间结果,如果map数量特别多,就会造成临时文件很多,而且在reduce拉取数据的时候增加磁盘的IO。
解决方法:
1、从源头干掉,也就是在hdfs上我们不存储小文件,在数据上传hdfs的时候我们就合并小文件,对小文件进行归档(Har)、自定义Inputformat将小文件存储成SequenceFile 文件;
2、在FileInputFormat读取入数据的时候我们使用实现类CombineFileInputFormat读取数据,在读取数据的时候进行合并,解决输入端大量小文件场景;
3、对于大量小文件Job,可以开启JVM重用;
(2)数据倾斜问题优化
1、既然默认的是hash算法进行分区,那我们自定义分区,修改分区实现逻辑,结合业务特点,使得每个分区数据基本平衡
2、既然有默认的分区算法,那么我们可以修改分区的键,让其符合hash分区,并且使得最后的分区平衡,比如在key前加随机数。
3、既然reduce处理慢,我们可以增加reduce的内存和核数,这样可以提高一点性能,虽然没从根本上解决问题,但是还有效果。
4、既然一个reduce处理慢,那我们可以增加reduce的个数来分摊一些压力呀,虽然也不能从根本上解决问题,还是有一定的效果。