Hadoop企业优化


1、MapReduce跑的慢的原因

MapReduce程序效率的瓶颈主要在于两点:

1、机器性能不足(CPU、内存、磁盘健康、网络)

2、IO操作优化

  1. 数据倾斜
  2. Map和Reduce数设置不合理
  3. Map运行时间太长,导致Reduce等待的时间太久
  4. 小文件
  5. 大量不可切分的超大文件
  6. spill溢写次数过多
  7. merge次数过多

2、优化方法

我们可以从六个方面考虑优化问题

  1. 数据输入
  2. Map阶段
  3. Reduce阶段
  4. IO传输
  5. 数据倾斜问题
  6. 常用参数调优

2.1 数据输入

  1. 合并小文件:在执行MR任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大Map任务装载次数,而任务的装载比较耗时,从而导致MR运行较慢。
  2. 采用CombineTextInputFormat来作为输入,解决输入端大量小文件场景。

2.2 Map阶段

  1. 减少溢写次数:通过调整io.sort..mb及sort.spill.percent参数值,增大触发spill的内存上限,减少spill此书,从而减少磁盘IO。
  2. 减少合并次数:通过调账io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短了MR处理时间。
  3. 在Map之后,不影响业务逻辑前提下,先进行Combine处理,减少I/O。

2.3 Reduce阶段

  1. 合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太多会导致Task等待,延长处理时间;太多,会导致Map、Reduce任务间竞争资源,造成处理超时等错误。
  2. 设置Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。
  3. 规避使用Reduce:因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。
  4. 合理是设置Reduce端的Buffer:默认情况下,数据情况下,数据达到一个阈值的时候,Buffer中的数据就会写入磁盘,然后Reduce会从磁盘中获取所有的数据。也就是说,Buffer和Reduce是没有直接关联的,中间多次写磁盘->读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置,使得Buffer中的一部分数据可以直接输送到Reduce,从而减少IO开销:mapreduce.reduce.input.buffer.percent,默认为0.0.当值大于0的时候,会保留指定比例的内存读Buffer中的数据直接拿给Reduce使用,这样一来,设置Buffer需要的内存,设置Buffer需要内存,读取数据需要内存,Reduce计算也要内存,所有要根据作业的运行情况进行调整。

2.4 I/O传输

  1. 采用数据压缩的方式,减少网络IO的时间,安装snappy和LZO压缩编码器。
  2. 使用SequenceFile二进制文件。

2.5 数据倾斜问题

  1. 数据倾斜现象

    1. 数据频率倾斜——某一个区域的数据量要远远大于其他区域。
    2. 数据大小影斜——部分记录的大小远远大于平均值。
  2. 减少数据倾斜的方法


Hadoop企业优化

原文地址:https://www.cnblogs.com/ssshhh/p/12164392.html

时间: 2024-08-26 01:30:26

Hadoop企业优化的相关文章

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客共同粉丝案例+常见错误及解决方案

第6章 Hadoop企业优化(重中之重)6.1 MapReduce 跑的慢的原因6.2 MapReduce优化方法6.2.1 数据输入6.2.2 Map阶段6.2.3 Reduce阶段6.2.4 I/O传输6.2.5 数据倾斜问题6.2.6 常用的调优参数6.3 HDFS小文件优化方法6.3.1 HDFS小文件弊端6.3.2 HDFS小文件解决方案第7章 MapReduce扩展案例7.1 倒排索引案例(多job串联)7.2 TopN案例7.3 找博客共同粉丝案例第8章 常见错误及解决方案 第6章

Hadoop性能优化点小结

最近一段时间看了许多Hadoop性能优化相关的资料,于是花了点时间整理了一下,希望给正在苦于Hadoop集群性能问题的博友们一点建议吧. 1.Hadoop在存储有输入数据的节点上运行map任务,可以获得最佳性能,称为"数据本地化优化",所以一般会设置最大分片的大小应该与块大小相同,如果分片跨越2个块的大小,必然要经过网络传输到不同的节点上读取数据. 2.适当的时候使用Combine函数.Combine的阶段是在map阶段到reduce阶段之间进行的,在某些Job中,设置Combine可

hadoop的企业优化

前言: Mapreduce程序的效率的瓶颈在于两点: 计算机性能: CPU.内存.磁盘健康.网络 I/O操作: 数据倾斜 map和reduce数量设置不合理 map的运行时间太长,导致reduc的等待过久 小文件过多 大量的补课分块的超大文件 spill(溢写)次数过多 merge(合并)次数过多 MapReduce优化方法 数据输入: (1)合并小文件:在执行任务前将小文件进行合并 (2)采用CombineTextInputformat来作为输入,解决输入端大量小文件的场景.将多个小文件从逻辑

Hadoop平台优化

一:概述 随着企业要处理的数据量越来越大,MapReduce思想越来越受到重视.Hadoop是MapReduce的一个开源实现,由于其良好的扩展性和容错性,已经得到越来越广泛的应用. 二:存在问题: Hadoop作为一个基础数据处理平台,虽然其应用价值已经得到大家认可,但仍然存在问题,以下是主要几个: 1:Namenode/jobtracker单点故障 Hadoop采用的是master/slaves架构,该架构管理起来比较简单,但存在致命的单点故障和空间容量不足等缺点,这已经严重影响了Hadoo

Hadoop任务优化建议 - 【Dr.Elephant系列文章-6】

使用Dr.Elephant来分析我们的任务,可以知道有哪些地方可以进行优化. 加速你的任务流程 对于特定的任务,最好有特定的参数配置.对于很多的应用场景来说,默认的任务配置并不能保证每个任务都有最好的性能.尽管对这些任务进行调优会花费一些时间,但是这些调优带来的性能提升是非常可观的. 有几个任务参数需要特别注意:mapper数量,reducer数量,io.*的配置,内存使用设置以及生成的文件数量.对这几个参数进行配置,让参数更适合当前的任务,可以极大的提升任务的执行性能. Apache的官网中H

Hadoop参数优化

dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接的影响Job Tracker的调度和内存的占用(更影响内存的使用), mapred.map.tasks.speculative.execution=true  mapred.reduce.tasks.speculative.execution=true 这是两个推测式执行的配置项,默认是true 所谓的推测执行,就是当所有task都开始运行之后,Job Tracker会统计所有任务的平均进度,如果某个task

itemcf的hadoop实现优化(Python)

原始数据如下: u1 a,d,b,c u2 a,a,c u3 b,d u4 a,d,c u5 a,b,c 计算公式使用:sim = U(i)∩U(j) / (U(i)∪U(j)) 其中: (U(i)∪U(j)) = U(i) + U(j) -  U(i)∩U(j) 原始的Hadoop实现需要5轮MR,优化后只需要两轮就可以完成. 之前的轮数过多,主要在于计算(U(i)∪U(j)) 的时候,需要多次更改key,并非计算量大.只需要修改一下传递的key,就可以两轮实现. mapper_1.py #!

弹性云服务器如何帮助企业优化成本

企业上云正成为中小企业的重要财务救星,它们希望花更少的资金和精力享受更高的计算速度和效率.因此,越来越多的企业将他们的业务迁移到到云,以提高可访问性.可用性和可伸缩性.那么,云服务器是如何帮助企业实现成本优化的呢?主要通过以下五个方面帮助企业缓解IT管理压力,降低业务运维成本.更灵活的资源管理由于云服务器资源具备弹性调度.伸缩的能力,因此您可以通过长期采购与根据短期需求变化调整资源配额的方式,实现资源的合理搭配,降低资源闲置造成浪费的风险.另外,云服务器支持灵活的资源挂载和再分配,您可以单独订购

hadoop mr优化

1,比较器尽量不要让mr产生序列化和反序列化的转换,参考WritableComparable类 2,reducer严重的数据倾斜,可以考虑自定义分区器 但是之前可以尝试使用combiner来压缩数据看是否能解决问题 3,Map阶段不使用正则表达式 4,split使用StringUtils,据测试性能远高于(String,Scanner,StringTokenizer),writableutils等工具类可以尝试去用一种 5,hadoop产生的数据要压缩,减少数据传输和I/O开销 6,使用结果或中