Shuffle优化

news/2024/11/29 18:47:16/

一、Map阶段

           1.增大缓冲区的大小:默认100M,可以改为200

           2.增大缓冲区的溢写百分比:默认0.8,可以改为0.9

           3.减少溢写文件的merge次数

           4.采用combiner提前预聚合,减少IO。(不影响业务逻辑的前提下,只能加减,不能做乘除等复杂聚合)

二、Reduce阶段

             1.合理设置map和reduce数:两个都不能设置太少,也不能设置太多。

                      太少,会导致task等待、延长处理时间

                      太多,会导致map,reduce任务之间竞争资源,造成处理超时等错误

             2.设置map、reduce共存:调整 slowstart.completedmaps 参数,使map运行到一定程度后,reduce就开始运行,减少reduce的等待时间

             3.规避使用reduce:因为reduce在用于连接数据集的时候会产生大量的网络消耗

             4.增加每个reduce去map找中拿数据的并行度

             5.增大reduce段存数据内存的大小

三、IO传输

采集数据压缩的方式,减少IO时间。

             1.map输入端:主要考虑数据量大小和切片,支持切片的有lzo,Bzip2。Lzo要想支持切片必须创建索引

             2.map输入端:主要考虑速度,如:snappy,lzo

             3.reduce输出端:主要看具体需求,列如:如果有下一个MR阶段,就要考虑切片,永久保存就考虑压缩率比较大的gzip

四、整体

    1.yarn.nodemanager.resouce.memory-mb:nodemanager默认内存8G。需要根据服务器实际配置灵活调整,例如128G内存,配置为100G内存左右

   2.yarn.scheduler.maximum-allocation-mb:单任务默认内存8G。需要根据该任务的数据量灵活调整,例如128m数据,配置1G内存

   3.mapreduce.map.memory.mb默认内存大小为1G控制分配给MapTask内存上限,如果超过会kill掉进程(报:Container is running beyond physical memory limits. Current usage:565MB of512MB physical memory used;Killing Container)。

如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加MapTask内存,最大可以增加到4-5g。

   4.mapreduce.reduce.memory.mb默认内存大小为1G。控制分配给ReduceTask内存上限。如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加ReduceTask内存大小为4-5g。

   5.mapreduce.map.java.opts:控制maptask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)

   6.mapreduce.reduce.java.opts:控制reducetask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)

   7.增加maptask和reducetask的CPU核数

   8.增加每个container的CPU核数和内存

   9.在hdfs-site.xml文件中配置多目录

   10.dfs.namenode.handler.count=20*log2(cluster size): namenode的一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。

            


http://www.ppmy.cn/news/56235.html

相关文章

4_用dockerfile制作镜像

Docker 镜像原理 思考: Docker 镜像本质是什么? Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G? Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB&#xff…

常用 Composition API【VUE3】

二、常用 Composition API 7. 计算属性与监视 7.1 computed函数 与Vue2.x中computed配置功能一致写法 <template><h1>一个人的信息</h1>姓&#xff1a;<input type"text" v-model"person.firstName"><br><br>名&a…

Git学习

目录 初始化一个Git仓库 添加文件到Git仓库&#xff0c;分为两步 小结 查看状态和文件的修改信息 小结 版本回退 git log查看修改和提交的日志信息 版本回退这里可以使用命令 小结 工作区和暂存区 小结 管理修改 小结 撤销修改 小结 删除文件 小结 添加远程库 …

什么是Java的多线程?

Java的多线程是指在同一时间内&#xff0c;一个程序中同时运行多个线程。每个线程都是一个独立的执行路径&#xff0c;可以独立地执行代码。Java中的多线程机制使得程序可以更高效地利用计算机的多核处理器和CPU时间&#xff0c;从而提高程序的性能和响应能力。 创建和使用Jav…

科技云报道:一路狂飙的ChatGPT,是时候被监管了

科技云报道原创。 即使你过去从不关注科技领域&#xff0c;但近期也会被一个由OpenAI&#xff08;美国的一家人工智能公司&#xff09;开发的人工智能聊天机器人“ChatGPT”刷屏。 与上届“全球网红”元宇宙不同&#xff0c;这位新晋的“全能网友”似乎来势更加凶猛。 互联网…

UE5中实现沿样条线创建网格体

本文是对UE官方教程&#xff1a;https://www.bilibili.com/video/BV1eU4y1c7XL的重现&#xff0c;原教程中通过构造函数实现非运行时执行脚本&#xff0c;并通过UE的样条线组件辅助创建路径网格体。该功能最终实现的效果如下&#xff1a; 1.创建基础蓝图 首先创建一个Actor蓝…

富士康终于醒悟了,重新加码中国制造,印度制造信不过

4月25日富士康在郑州揭牌新事业总部&#xff0c;显示出在扰攘了数年之后&#xff0c;富士康再度加强郑州富士康的发展力度&#xff0c;这应该是富士康在印度努力数年之后终于清醒了&#xff0c;印度制造终究不如中国制造可靠。 一、苹果和富士康在印度发展的教训 这两年苹果和富…

新晋项目经理,如何快速胜任?

第一次当项目经理&#xff0c;往往会由于经验不足、项目管理知识的不足以及角色转换等原因&#xff0c;无从着手。 有时候我们会觉得一个项目经理&#xff0c;不像项目经理&#xff0c;那像什么呢&#xff1f;当然是像程序员。也就是说&#xff0c;他的职位虽然变化了&#x…