资讯动态

Hadoop-MapReduceYARN面试总结

发布时间:2026/10/16 3:10:42 来源:尧图企业网站定制
MapReduce计算流程先看Map端文件上传HDFS会切成Block默认128M然后有一个逻辑切片叫Split它不改动存储只是用来控制参与计算的节点数一个切片就对应一个MapTaskMap任务从自己的切片里读数据每次读一行拼成KVKey是偏移量Value是一行内容。然后数据不是直接写磁盘而是先写进内存里的环形缓冲区默认100M写到80%就触发溢写写进去之前会先分区默认是Key的哈希对Reduce数取模。缓冲区里的数据在溢写之前还会排个序先按分区排再按Key排所以溢写出去的小文件内部是有序的。溢写会产生很多小文件后面再归并成一个大文件这个合并过程还能顺便用Combiner做一次局部汇总。然后进入Shuffle这是Map和Reduce之间最关键的环节。Reduce端通过HTTP去各个Map拉取属于自己的那份数据。相同的Key拉到同一个Reduce然后把拉回来的数据进行一次全局排序排好之后按Key分组每一组调一次reduce方法。最后每个Reduce把结果写到HDFS上一个作业就走完了YARN集群工作流程首先客户端先向 ResourceManager 发一个 getNewApplication 请求ResourceManager返回给客户端一个JobID和一个存资源的临时目录然后客户端把作业的jar包配置算好的分片都传到HDFS再用submitApplication把作业提交给ResourceManagerResourceManager里的应用管理器收到之后交给调度器调度器选一台NodeManager开一个Container在里面把ApplicaitonMaster起起来。ApplicationMaster起来后的第一件事是向ResourceManager注册然后收集分片情况向ResourceManager申请资源它用轮询的方式通过RPC拿资源拿到之后再找对应的NodeManager让它启动Container然后把任务起起来任务跑的过程中通过RPC向ApplicationMaster汇报状态和进度ApplicationMaster一旦发现哪个任务失败就重新申请资源把它重启。最后所有任务跑完ApplicationMaster 向 ResourceManager申请注销然后把自己关掉资源全部释放yarn的工作就完成了最后计算框架更新计算进度和状态。为什么会产生yarn在Hadoop1的时候MapReduce是把资源调度和计算揉在一起的集群里就一个JobTracker它既管资源分配又管作业调度下面的TaskTracker干活然后向它汇报。问题有两个。第一JobTracker一个人扛所有事因为是单点的集群一大就不行了第二这种系统是专用的只能跑MapReduce这一类计算想跑别的计算模型就得再搭一套资源和框架都对不上。所以Hadoop2就把MapReduce拆成了两块一块是yarn专门负责资源调度管理另一块是MapReduce本身专门负责计算这样一抽出来资源调度就变成了一个通用的平台以后其他计算框架比如spark只要照着yarn的接口来就能共享同一个集群的资源不同再重新搭一套。MapReduce数据倾斜第一将默认的哈希分区改成自定义分区结合业务让每个分区数据量基本平衡第二可以改Key在Key前面加随机数让哈希之后能均匀一点。第三Reduce慢那就给它加内存加虚拟核第四如果是只有一个Reduce拖慢的那就加Reduce数量分摊压力前面这一层做完再来一个作业做最终聚合。Hadoop压缩算法按位置选择第一次读进来选可切分的也就是BZip2 或者 LZO不然只有一个Map中间Map到Reduce这一段要选压缩解压都快的比如Snappy、LZO、LZ4、Zstd最后Reduce输出看下游如果还要接着算就选可切分的BZip2如果是归档存起来就选压缩比高的Gzip或者BZip2。MR优化先说小文件上传到HDFS之前就把小文件合并掉第二合并之后如果文件太大换存储格式或者压缩但要注意能不能切片第三如果小文件已经在HDFS里了那就用CombineFileInputFormat这类读取类在读的时候合并。然后就是数据倾斜自定义分区加盐改Key给Reduce加资源或者加Reduce数量做二次聚合然后是推测执行做法是给慢任务起一个备份任务两份同时跑同一份数据谁先跑完用谁另一个杀掉本质就是利用资源换时间所以集群资源紧张的时候不能开他。最后从执行流程上优化分Map和Reduce两段Map这边环形缓冲区默认100M到80%溢写内存够就调大能少溢写几次合并因子默认一次合10个调大能少合几轮再加上Combiner做局部汇总、压缩中间数据、调响应线程数。Reduce这边并行拉取默认5可以调大然后就是读缓存默认数据是要写磁盘再读回来的把那个参数从0调大一点让一部分数据直接进Reduce能省一次落盘回读。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑