Hadoop3教程(三十四):(生产调优篇)MapReduce生产经验汇总

文章目录

  • (164)MR跑得慢的原因
  • (165)MR常用调优参数
    • Map阶段
    • Reduce阶段
  • (166)MR数据倾斜问题
  • 参考文献

(164)MR跑得慢的原因

MR程序执行效率的瓶颈,或者说当你觉得你的MR程序跑的比较慢的时候,可以从以下两点来分析:

  • 计算机性能

节点的CPU、内存、磁盘、网络等,这种属于硬件上的检查;

  • IO操作上的检查
    • 是否发生了数据倾斜?即单一reduce处理了绝大部分数据
    • Map运行时间过长,导致Reduce一直在等待;
    • 小文件过多。

(165)MR常用调优参数

Map阶段

Map阶段:

在这里插入图片描述

1)自定义分区,减少数据倾斜。即自定义分区类,继承Partitioner接口,重写getPartition();

2)减少环形缓冲区溢写的次数

  • mapreduce.task.io.sort.mb:shuffle的环形缓冲区大小,默认是100M,可以提高至200M;
  • mapreduce.map.sort.spill.percent:环形缓冲区的溢出阈值,默认是80%,可以提高至90%。即写到90%的时候才溢出。

这样做的目的是,减少环形缓冲区溢写后形成的文件的个数,减少后面步骤里分区合并的压力。

3)增加每次Merge合并次数

  • mapreduce.task.io.sort.factor:分区归并时,每次归并的文件数量。默认是10,可以提高到20(如果你的内存足够支撑的话,否则只能调小了)

4)在不影响业务结果的前提下,可以开启Combiner:

  • job.setCombinerClass(xxxReducer.class);

5)为了减少磁盘IO,对于Map的输出文件,可以采用snappy或者LZO压缩

6)提高MapTask的内存上限

  • mapreduce.map.memory.mb:默认内存上限是1024MB。通常来讲,1G内存用来处理128M数据是绰绰有余的,可以根据128M数据对应1G内存的原则,对应提高内存。

7)调整MapTask的堆内存大小

  • mapreduce.map.java.opts:跟上面的内存参数保持一致就可以。控制java用的内存

8)增加MapTask的CPU核数

  • mapreduce.map.cpu.vcores:默认核数是1,对于计算密集型任务,可以增加CPU核数;

9)异常重试次数

  • mapreduce.map.maxattempts:每个MapTask的最大重试次数,一旦重试次数超过该值,则认为MapTask运行失败,默认值是4。可以根据实际情况做加减。

Reduce阶段

Reduce阶段:

在这里插入图片描述

1)调整每个Reduce一次性从多少个MapTask拉取数据

  • mapreduce.reduce.shuffle.parallelecopies:默认是5,即每个Reduce一次最多拉5个MapTask里的数据,如果内存足够支撑,完全可以调成10;

2)调整所拉取数据,在内存缓冲的占比

  • mapreduce.reduce.shuffle.input.buffer.percent:控制内存buffer大小占ReduceTask可用内存的比例。默认是0.7,可以提高到0.8。毕竟在内存中缓存的数据越多,整体计算速度就越快。

3)控制归并排序时,可以使用的内存比例

  • mapreduce.reduce.shuffle.merge.percent:简单的说,就是归并排序时,可以使用的内存占Reduce总可用内存的比例,超过这个比例,就只能溢出到磁盘了。这个比例默认是0.66,最高可以提高到0.75。

4)调整ReduceTask的可用内存上限

  • mapreduce.reduce.memory.mb:默认可用内存上限为1024MB。同样的,128M数据对应1G内存原则。适当提升内存到4-6G。

5)调整ReduceTask的堆内存

  • mapreduce.reduce.java.opts

6)调整ReduceTask的CPU核数

  • mapreduce.reduce.cpu.vcores:默认核数是1,可以提高到2-4个

7)最大重试次数

  • mapreduce.reduce.maxattempts:ReduceTask的最大重试次数,一旦重试次数超过该值,则认为运行失败。默认是4。

8)当MapTask的完成比例达到多少时,才会为ReduceTask申请资源

  • mapreduce.job.reduce.slowstart.completedmaps:默认是0.05,即有5%的MapTask完成任务后就可以为ReduceTask申请资源。

9)Task的超时时间

  • mapreduce.task.timeout:控制task的超时时间,默认是600000毫秒,即10min。如果一个Task,在10min内,没有数据进入,也没有数据输出,则直接退出该任务。如果你的程序对每条输出数据的处理时间很长,可适当调大这个参数。

10)如果可以不用Reduce,那就尽量不用

(166)MR数据倾斜问题

直观来看,就是在大部分任务都已经完成了的情况下,还有少数任务仍在运行,这时候大概率就是发生了数据倾斜,分给那少数任务的数据太多了,导致它们一直没有处理完。

当发生数据倾斜后,我们可以从哪些角度考虑优化呢?

  • 首先是检查是否是由于空值过多(key)造成的数据倾斜;

生产环境下,可以选择过滤掉空值;如果一定要保留空值的话,可以自定义分区,将空值加随机数打散分布。

  • 能在Map阶段提前处理的,就在Map阶段提前处理。比如说Map阶段的Combiner、MapJoin等;
  • 设置多个reduce个数;

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Model.py 02] 地图按比例放大的实现

要求:实现地图按比例放大 分析:考虑到地图放大过程中需要保留河流道路这些物体的相对位置关系,这里选择将河流和道路这些物体的坐标矩阵合并成terrain_matrix并对这个合并后的矩阵进行缩放处理。放大后的矩阵,根据矩阵中标记的物…

nginx测试rewrite

nginx测试rewrite last :相当于 Apache 里的(L)标记,表示完成rewrite 匹配; break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则。 # 其中last 和 break 用来实现 URL 重写时,浏览器地址栏URL 地址不变 redirect: 返回 302 …

基于nodejs+vue市民健身中心网上平台mysql

市民健身中心网上平台分为用户界面和管理员界面, 用户信息模块:管理员可在后台添加、删除普通用户,查看、编辑普通用户的信息。 课程表管理模块:管理员可对课程表进行修改任课教师、新增某一堂课、删除某一堂课、查找课程、修改…

codeforces (C++ Chemistry)

题目: 翻译: 思路: 1、n组数据,每组输入两个数t,k和一个字符串,删除k个字符,剩下的字符能组成回文,则输出YES,否则输出NO。 2、用map记录字符串中每个字符出现的次数,su…

使用screen实现服务器代码一直运行

1.安装screen sudo apt install screen 2.创建一个screen(创建一个名为chatglm的新的链接,用来一直运行 screen -S chatglm 3.查看进程列表 screen -ls 创建之后,就可以在当前窗口利用cd命令进入要执行的项目中,开始执行&#xf…

Openssl数据安全传输平台007:共享内存及代码的实现 ——待完善项目具体代码和逻辑

文章目录 0. 代码仓库1. 使用流程案例代码: 2. API解析2.1 创建或打开一块共享内存区2.2 将当前进程和共享内存关联到一起2.3 将共享内存和当前进程分离2.4 共享内存操作 -( 删除共享内存 ) 3. 思考问题3. ftok函数4. 共享内存API封装-以本项…

基于SSM的仓库管理系统

基于SSM的仓库管理系统的设计与实现【文末源码】 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 员工管理 货物管理 员工界面 摘要 当考虑构建基于…

[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …

day01_matplotlib_demo

文章目录 折线图plot多个绘图区绘制数学函数图像散点图scatter柱状图bar直方图histogram饼图pie总结 折线图plot import matplotlib.pyplot as pltplt.figure(figsize(15, 6), dpi80) plt.plot([1, 0, 9], [4, 5, 6]) plt.show()### 展现一周天气温度情况 # 创建画布 plt.figu…

留意差距:弥合网络安全基础设施的挑战

您最近一直在关注日益增加的网络威胁吗?如果您发现自己沉浸在 IT 或技术中,那么您可能会永远追求与时俱进。每天都会出现新的漏洞,这对保持消息灵通提出了巨大的挑战。 构建和维护能够应对复杂攻击者的网络安全基础设施所面临的挑战是真实存…

Vue3中getCurrentInstance()方法详解

proxy只是一个变量名,翻译过来是“代理”的意思 当你使用 const { proxy } getCurrentInstance() 这句代码时,它执行了以下步骤: getCurrentInstance() 是 Vue 3 中的一个函数,用于获取当前正在执行的 Vue 组件实例的上下文信息…

最新AI智能写作创作系统源码V2.6.4/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

敢问路在何方

从2022年进入软件行业到现在,二十二年眨眼之间过去了,依然奋斗在编码第一线,挣扎在第一线,借此程序员佳节之际回顾一下这许多年的历程。 由于本人混得实在不好,工作过的地方都用某单位某公司来代替实际的,到…

点云从入门到精通技术详解100篇-基于路侧激光雷达的交通目标感知方法与实现(下)

目录 4.2交通目标类型划分 4.3目标点云关键特征提取 4.3.1点云目标空间结构特征

python解析robot framework的output.xml并生成html

一、用pyh模块解析stat结点数据(output.py) #codingutf-8import xml.dom.minidom import xml.etree.ElementTree#打开xml文档 dom xml.dom.minidom.parse(./ui/output.xml);root2 xml.etree.ElementTree.parse(./ui/output.xml) #得到文档元素对象 ro…

Windows 安装 Java

1. 安装 JDK 从 Oracle 的官网下载的 JDK,例如 JDK 21 双击下载得到的 msi 文件,开始安装 JDK 选择要安装的文件路径(我一般都默认): 等待安装: 安装完成: 2. 验证是否安装成功 2.1. 打开 cmd…

【JavaEE重点知识归纳】第10节:Object类和String类

目录 一:Object类 1.概念 2.获取对象信息 3.对象比较equals方法 4.hashCode方法 二:String类 1.String类的重要性 2.常用方法 3.StringBuilder和StringBuffer 一:Object类 1.概念 (1)Object类是Java默认提供…

Easyx趣味编程7,鼠标消息读取及音频播放

hello大家好,这里是dark flame master,今天给大家带来Easyx图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧&…

ARM开发流程LDS相关解惑

最近在学习ARM CPU软硬件开发,对于软件代码执行的入口地址以及软件代码在SRAM中的位置分布有些疑惑,特将学习过程记录一下。 1. 程序入口地址 对于ARM CPU,异常向量表的地址是固定的,通常位于 0x00000000 或 0xFFFF0000。在这种…