• Hadoop优化


    MapReduce程序瓶颈

    计算机性能

    CPU、内存、磁盘、网络

    I/O操作优化
    • 数据倾斜
    • Map和Reduce数设置不合理
    • Map运行时间太长,导致Reduce等待过久
    • 小文件过多
    • 大量的不可分块的超大文件
    • spill次数过多
    • merge次数过多

    MapReduce优化方法

    主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数

    数据输入
    1. 合并小文件:在执行任务前,将小文件合并,大量的小文件会产生大量的Map任务
    2. 采用CombineTextInputFormat作为输入,解决输入端大量小文件场景
    Map阶段
    1. 减少溢写spill次数:通过调整io.sort.mb以及sort.spill.percent参数值,增大出发spill的内存上限,减少spill次数,减少IO开销
    2. 减少合并merge次数:通过调整io.sort.factor参数,增大merge的文件数目,减少merge次数,缩短Map处理时间
    3. 不影响业务逻辑情况下,采用combiner,减少网络开销
    Reduce阶段
    1. 合理设置Map和Reduce数:两个不能设置太少或太多。太少,会导致Task等待,延长处理时间;太多,会导致Map、Reduce任务竞争资源,造成处理超时
    2. 设置Map、Reduce共存:调整slowstart.completemaps参数,使map运行到一定程度后,Reduce也能运行,减少Reduce的等待时间
    3. 规避使用Reduce:Reduce使用数据集时,会产生大量网络开销
    IO传输
    1. 采取数据压缩,减少IO传输时间
    2. 使用SequenceFile二进制文件
    数据倾斜

    数据频率倾斜现象:某一个区域的数据量远远大于其他区域

    数据大小倾斜现象:部分记录的大小远远大于平均值

    1. 抽样和范围分区:通过对原始数据抽样得到的结果来预设分区边界值
    2. 自定义分区:编程解决分区造成的数据倾斜
    3. Combine可以大量减小数据倾斜
    4. 尽量使用map join,避免使用reduce join

    HDFS小文件优化方法

    HDFS上每个文件都要在NameNode建立一个索引,如果小文件过多,就会产生很多索引文件,一方面大量占用NameNode的内存空间,另一个方面造成索引速度变慢

    解决方法
    1. 在数据采集时,将小文件合并为大文件,再上传给HDFS
    2. 业务处理之前,使用MapReduce把小文件合并起来
    3. 使用CombineTextInputFormat提高效率
  • 相关阅读:
    NetworkInterface网速监测
    动态编译
    JSON C# Class Generator
    Cookie中的HttpOnly
    webapi session
    没有为扩展名“.html”注册的生成提供程序
    转 C# 使用openssl
    openssl jia adress
    扩展JS
    bootstrap 模态
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12490722.html
Copyright © 2020-2023  润新知