• mapReduce和spark的shuffle


    MapReduce的shuffle

    1.input map shuffle reduce output 

    2.shuffle的实现的功能:分区    分组   排序(key字典序)

    3.map端的shuffle    context.write() 写入到环形缓冲区(内存区域),假设缓冲区设置的是100M,当达到缓冲区的80%的时候,就会溢写出一个小文件,溢出到磁盘之前做了二件事,分区   排序    两个reduce

     merge  将小文件进行合并 

     合并之后  分区内有序

     merge之后  maptask结束 ,会通知appmaster我已经结束任务,am通知reduce拉取数据。

    reduce shullfe:
    reduce启动线程通过网络到每台机器上拉取属于自己的数据

     reduce1会拉取属于自己的数据:

     将整体分区的数据进行排序

     

    MapReduce  shuffle 优化

    1.合理设置partition  使用多个reduce处理输出结果

    2.减少reducer从map拉取的数据量

    (1)将map数据进行压缩(snappy 压缩质量不高 但是读取速度快,) 也可以在reduce输出的时候增加gzip 压缩实现  保证压缩率快速输出

     (2)合理使用combiner(减少reducer输入数据量)

    MR的优化:

    1.合理设置HDFS文件块的大小

    2.增加map buff缓冲区的大小

    3.map输出的key的设计均匀   数据倾斜

    4.增加reduce的个数  通过分流加快reduce处理

    5.增加reduce copybuffer缓冲区的大小 增加copy线程的线程数量

    6.减少reduce阶段的数据输入量 在map阶段进行combiner 数据进行压缩

    spark 的shuffle   

    ShuffleManager管理

    HashShuffleManager

    SortShuffleManager

    抛弃了HashShuffleManager

     

  • 相关阅读:
    python中的GIL
    centos7 安装docker
    ORACLE INSERT INTO SELECT
    Java substring几个用例
    Java Date类型转换、操作等(util.Date sql.Date,)
    ORACLE 按字段去除重复数据
    OFFICE技巧汇编
    ORACLE自动类型转换的坑
    ubuntu下,pycharm svn 版本控制,svn服务器在win下
    【草稿】pip重要命令;python 变量命名规则
  • 原文地址:https://www.cnblogs.com/yyfyl/p/12844131.html
Copyright © 2020-2023  润新知