【大数据优化】(二)MapReduce 优化方法

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 【大数据优化】(二)MapReduce 优化方法

MapReduce跑的慢的原因(☆☆☆☆☆)


一、Mapreduce 程序效率的瓶颈在于两点:


1) 计算机性能


CPU、内存、磁盘健康、网络


2) I/O 操作优化


(1) 数据倾斜

(2) map 和reduce 数设置不合理

(3) reduce 等待过久

(4) 小文件过多

(5) 大量的不可分块的超大文件

(6) spill 次数过多

(7) merge 次数过多等。


二、MapReduce优化方法(☆☆☆☆☆)


1)数据输入:


(1)合并小文件:在执行mr 任务前将小文件进行合并,大量的小文件会产生大量的map 任务,增

大map 任务装载次数,而任务的装载比较耗时,从而导致mr 运行较慢。

(2)采用ConbinFileInputFormat 来作为输入,解决输入端大量小文件场景。


2)map 阶段


(1)减少spill 次数:通过调整io.sort.mb 及sort.spill.percent 参数值,增大触发spill 的内存上限,

减少spill 次数,从而减少磁盘IO。

(2)减少merge 次数:通过调整io.sort.factor 参数,增大merge 的文件数目,减少merge 的次数,

从而缩短mr 处理时间。

(3)在map 之后先进行combine 处理,减少I/O。


3)reduce 阶段


(1)合理设置map 和reduce 数:两个都不能设置太少,也不能设置太多。太少,会导致task 等

待,延长处理时间;太多,会导致map、reduce 任务间竞争资源,造成处理超时等错误。

(2)设置map、reduce 共存:调整slowstart.completedmaps 参数,使map 运行到一定程度后,reduce

也开始运行,减少reduce 的等待时间。

(3)规避使用reduce,因为Reduce 在用于连接数据集的时候将会产生大量的网络消耗。

(4)合理设置reduc 端的buffer,默认情况下,数据达到一个阈值的时候,buffer 中的数据就会写入磁盘,然后reduce 会从磁盘中获得所有的数据。也就是说,buffer 和educe 是没有直接关联的,中间多个一个写磁盘->读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置,使得buffer 中的一部分数据可以直接输送到reduce,从而减少IO 开销:mapred.job.reduce.input.buffer.percent,默认为0.0。当值大于0 的时候,会保留指定比例的内存读buffer 中的数据直接拿给reduce 使用。这样一来,设置buffer 需要内存,读取数据需要内存,reduce 计算也要内存,所以要根据作业的运行情况进行调整。


4)IO 传输


(1)采用数据压缩的方式,减少网络IO 的的时间。安装Snappy 和LZOP 压缩编码器。

(2)使用SequenceFile 二进制文件


5)数据倾斜问题


(1)数据倾斜现象

数据频率倾斜——某一个区域的数据量要远远大于其他区域。数据大小倾斜——部分记录的大小远远大于平均值。

(2)如何收集倾斜数据

在reduce 方法中加入记录map 输出键的详细情况的功能。

public static final String MAX_VALUES = "skew.maxvalues";
private int maxValueThreshold;
@Override
public void configure(JobConf job) {
maxValueThreshold = job.getInt(MAX_VALUES, 100);
}
@Override
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
  int i = 0;
  while (values.hasNext()) {
  values.next();
  i++;
  }
  if (++i > maxValueThreshold) {
  log.info("Received " + i + " values for key " + key);
  }
}


(3)减少数据倾斜的方法


方法1:抽样和范围分区

      可以通过对原始数据进行抽样得到的结果集来预设分区边界值。


方法2:自定义分区

      另一个抽样和范围分区的替代方案是基于输出键的背景知识进行自定义分区。例如,如果map 输出键的单词来源于一本书。其中大部分必然是省略词(stopword)。那么就可以将自定义分区将这部分省略词发送给固定的一部分reduce 实例。而将其他的都发送给剩余的reduce 实例。


方法3:Combine

      使用Combine 可以大量地减小数据频率倾斜和数据大小倾斜。在可能的情况下,

combine 的目的就是聚合并精简数据。


6) 常用的调优参数


(1) 资源相关参数

      (a) 以下参数是在用户自己的mr 应用程序中配置就可以生效(mapred-default.xml)


20200106194304782.png


      (b)应该在yarn 启动之前就配置在服务器的配置文件中才能生效(yarn-default.xml)


20200106194443323.png


      (c)shuffle 性能优化的关键参数,应在yarn 启动之前就配置好(mapred-default.xml)


20200106194509249.png


(2) 容错相关参数(mapreduce 性能优化)


20200106194540138.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
4月前
|
SQL 分布式计算 运维
如何对付一个耗时6h+的ODPS任务:慢节点优化实践
本文描述了大数据处理任务(特别是涉及大量JOIN操作的任务)中遇到的性能瓶颈问题及其优化过程。
|
2月前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
65 2
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
96 2
|
2月前
|
存储 算法 固态存储
大数据分区优化存储成本
大数据分区优化存储成本
42 4
|
2月前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
量子计算作为革命性的计算范式,凭借量子比特和量子门的独特优势,展现出在大数据处理中的巨大潜力。本文探讨了量子计算的基本原理、在大数据处理中的应用及面临的挑战与前景,展望了其在金融、医疗和物流等领域的广泛应用。
|
2月前
|
存储 大数据 Serverless
大数据增加分区优化资源使用
大数据增加分区优化资源使用
41 1
|
2月前
|
存储 NoSQL 大数据
大数据 数据存储优化
【10月更文挑战第25天】
109 2
|
3月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
43 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
3月前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
【10月更文挑战第31天】量子计算凭借其独特的量子比特和量子门技术,为大数据处理带来了革命性的变革。相比传统计算机,量子计算在计算效率、存储容量及并行处理能力上具有显著优势,能有效应对信息爆炸带来的挑战。本文探讨了量子计算如何通过量子叠加和纠缠等原理,加速数据处理过程,提升计算效率,特别是在金融、医疗和物流等领域中的具体应用案例,同时也指出了量子计算目前面临的挑战及其未来的发展方向。
|
3月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
56 1

热门文章

最新文章