• 大数据数据压缩和企业优化


    MR数据压缩

    MR支持的压缩编码

    压缩格式是否可切片特点
    DEFLATE
    Gzip比较好用,存储方面比较优秀
    Bzip2压缩的最小,速度最慢
    LZO需要安装和建立索引
    Snappy最好用,速度最快

    数据压缩的位置

    • 输入端采用压缩:

      1. 数据量小于块大小,重点考虑压缩速度最快的snappy
      2. 数据量非常大,考虑是否可以支持切片,比如LZO
    • Mapper输出采用压缩:考虑压缩和解压缩的速度,比如snappy

    • Reducer输出采用压缩

      • 热数据一般不压缩或者选择压缩解压速度很块的
      • 冷数据考虑压缩比较高的,比如Bzip2和Gzip

    使用压缩

    • hadoop checknative: 查看hadoop支持的压缩算法
    • 在Driver类中开启在Mapper输出进行压缩
    • 设置压缩算法的全类名为Bzip2, 这个压缩算法速度很慢,而且会占用CPU和内存
    • Driver类中在reducer输出端也可以开启压缩算法,也可以设置相应的压缩算法

    企业开发优化

    Map优化

    1. 输入时采用CombineTextInputFormat切片规则,合并小文件
    2. 自定义分区,实现Partitioner接口,重写getPartition方法,减少数据倾斜
    3. 减少溢写的次数
      • 提高环形缓冲区的大小,跟MapTask的内存空间保持1:10的关系
      • 提高环形缓冲区的阈值,提高到90%
    4. 增加每次Merge合并次数,默认是10,提高到20
    5. 在不影响业务结果的前提下,可以提前采用Combiner
      • 加法、乘法运算一般不影响
    6. 为了减少磁盘IO,可以采用snappy压缩
    7. 提高MapTask内存的 上限,默认是1G
    8. MapTask任务重试次数可以修改,但一般不修改,默认4次

    Reducer优化

    1. Reducer拉取数据的并行度,默认是每次拉取5个,可以适当提高一点
    2. Buffer大小占Reduce可用内存的比例,默认是0.7,当内存增加时可以适当提高
    3. Buffer中数据达到多少比例开始写入磁盘,默认是0.66,比上一个参数小,可以提高一点
    4. 提高ReduceTask的内存上限,默认是1G,根据128M数据对应1G内存的原则,适当提高。
    5. MapTask完成的比例达到该值后才会为ReduceTask申请资源,默认是0.05.
    6. 设置Task卡死后的等待时间,默认是10分钟,可以调小一点,最小不能小于3分钟。

    数据倾斜问题

    1. 数据倾斜现象: 某一个区域的数据量要远远大于其他区域
    2. 如何查看是否出现数据倾斜:
      • 进行抽样检查
      • 将数据进行wordcount
    3. 解决方案
      • 自定义分区,将倾斜数据分化,建议直接随机函数分区
      • 使用Combiner预聚合
      • 采用Map Join,尽量避免Reduce Join

    大量小文件问题优化

    小文件较多时,会产生很多的元数据文件,导致寻址索引速度变慢。
    解决方案:

    1. 存储方面:Hadoop Archive文件归档
    2. 计算方面:使用CombinerText输入数据到Map

    Hadoop扩展新特性

    集群迁移

    • 老集群的NameNode位置为hadoop102
    • 新集群的NameNode位置为hadoop105
    • distcp hdfs://hadoop102:8020/* hdfs://hadoop105:8020/*

    存档和压缩

    存档只是将文件拼接在一起,没有压缩文件的大小。存档后需要生成对应的文件索引,可能比原文件还会大一点。

    • hadoop archive -archiveName input.har -p 原文件路径 归档后路径
    • hadoop fs -ls /small/small.har: 查看三个文件
    • hadoop fs -ls har:///small/small.har: 查看原文件目录
    • hadoop fs -cp har:///small/small.har /input : 拷贝后就会变回成归档前的文件

    回收站

    开启回收站功能,防止误删除,linux和HDFS默认是关闭的。
    fs.trash.interval = 0, 表示文件的存活时间
    fs.trash.checkpoint.interval=0, 检查回收站的间隔时间。必须小于文件的存活时间,否则文件的存活时间没有意义。

    1. 启用回收站,在core-site.xml文件中添加
    <property>
        <name>fs.trash.intervalname>
    	<value>1value>
    property>
    
    • 1
    • 2
    • 3
    • 4
    1. 注意,回收站权限仅限命令行使用,网页界面删除不会经过回收站。
  • 相关阅读:
    vue3相比vue2的优点
    详解JS中 call 方法的实现
    Mysql索引、事务、存储引擎
    《网络编程从入门到入魔》(建议收藏)
    阿里云服务器4核8G配置多少钱?新购和续费价格分别是多少?
    [信息安全] 加密算法:md5摘要算法 / sha256摘要算法
    【荣耀内推】2023届荣耀校招开启啦
    android apk 加固后重新签名
    php 二维数组去重
    vivo鲁班RocketMQ平台的消息灰度方案
  • 原文地址:https://blog.csdn.net/qq_44273739/article/details/132823613