spark(15)-Spark Shuffle(corse24)
来源:互联网 发布:黑客帝国3矩阵革命 mp4 编辑:程序博客网 时间:2024/06/05 11:38
- Shuffle
- 1 概念
- 2 Shuffle可能面临的问题
- Hash Shuffle
- 1 HashShuffle的两大缺陷
- Shuffle
1. Shuffle
1.1 概念
Shuffle是洗牌的意思。需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节点上进行计算。
1.2 Shuffle可能面临的问题
运行Task的时候才会产生Shuffle(Shuffle已经融化在Spark的算子中了)
1) 数据量非常大 2) 数据如何分类,即如何Partition,Hash、Sort、钨丝计划 3) 负载均衡(数据倾斜) 4) 网络传输效率;需要在压缩和解压缩之间做出权衡,序列化和反序列化也是要考虑到问题
说明:具体的Task进行计算的时候尽一切最大可能使得数据具备Process Locality的特性;
退而求其次是增加数据分片,减少每个Task处理的数据量
2. Hash Shuffle
- Key不能是Array
- Hash Shuffle不需要排序,此时理论上讲就节省了Hadoop MapReduce中进行Shuufle需要排序时候的时间浪费,因为实际产生环境有大量的不需要排序的Shuffle类型
思考:不需要排序的Hash Shuffle是否一定比需要排序的Sorted Shuffle速度更快?
不一定,如果数据规模比较小的情况下,Hash Shuffle会比Sorted Shuffle速度快(很多)!
但是如果数据量大,此时Sorted Shuffle一般都会比Hash Shuffle快(很多)
每个ShuffleMapTask会根据key的哈希值计算出当前的key需要写入的Partition,然后把决定后的结果写入到单独的文件,此时会导致每个Task产生R(指下一个Stage的并行度)个文件,如果当前的stage中有M个ShuffleMapTask,则会产生M*R个文件!
注意:Shuffle操作绝大多数情况下都要通过网络,如果Mapper和Reducer在同一台机器上,此时只需要读取本地磁盘即可。
2.1 HashShuffle的两大缺陷
1、Shuffle前会产生海量的小文件于磁盘之上,此时会产生大量耗时低效的IO操作;
2、内存不够用!由于内存中需要保存海量的文件操作句柄和临时缓存信息。如果数据处理规模比较庞大的话,内存不可承受,出现OOM等问题。(1个writeHandler大致需要几十k到几百k级别的内存)
为了改善上述的问题(同时打开过多文件导致Writer Handler内存使用过大以及产生过多文件导致大量的随机读写带来的效率极为低下的磁盘IO操作),Spark后来推出了Consalidate机制,来把小文件合并。此时Shuffle时文件产生的数量为cores*R,对于ShuffleMapTask的数量明显多于同时可用的并行Cores的数量的情况下,Shuffle产生的文件会大幅度减少,会极大降低OOM的可能。
为此,Spark推出了Shuffle Pluggable开放框架,方便系统升级的时候定制Shuffle功能模块,也方便第三方系统改造人员根据实际的业务场景来开发具体最佳的Shuffle模块;核心接口ShuffleManager,具体默认实现有HashshuffleManager、SortShuffleManager等。
Hash适合数据规模比较小,且不需要排序的地方
Hadoop使用排序是因为Hadoop的mapreduce进行排序的话规模更大
sortbasedshuffle,ShuffleMapTask不会为每个Reducer生成一个单独的文件,会将所有的结果写到一个文件里,同时会生成一个索引,每个Reducer可以根据索引取得它所需要的数据。这就节省了句柄、内存。同时磁盘文件也变小了,同时减少GC的频率。减少同时写多个文件给系统带来的压力。
ShuffleMapTask按照Key进行Sort,对于不需要Sort的应用来说没什么用处,如果此时内存不够用把内容写入外部磁盘,结束的时候进行归并排序。此时基本不受内存的限制。File分为不同的segment,并记录不同partition信息写在index文件里,block manager也会有不同的实现。一般可以拿10-100个文件进行归并排序。最后的时候要生成索引文件。
- spark(15)-Spark Shuffle(corse24)
- Spark Shuffle 详解(1)
- “戏”说spark---spark Shuffle详解(一)
- “戏”说spark---spark Shuffle详解(二)
- Spark技术内幕: Shuffle详解(一)
- Spark技术内幕: Shuffle详解(二)
- Spark技术内幕: Shuffle详解(三)
- spark shuffle
- Spark-shuffle
- spark Shuffle
- spark shuffle
- spark shuffle
- spark shuffle mapreduce shuffle
- Spark Shuffle过程的一些小结(译 Shuffle Performance in Apache Spark)
- 【Spark】Spark的Shuffle机制
- 【spark】spark之shuffle调优
- Spark Shuffle之Hash Shuffle
- Spark Shuffle之Sort Shuffle
- 每天一道LeetCode-----从有序数组中删除重复元素
- Python open参数
- LoRa/Sigfox/NB-IoT各领风骚 LPWAN满足IoT省电需求
- Python_自学程序2_模拟通讯录_待完善
- DataFrame使用Series的boolean值做下标过滤数据
- spark(15)-Spark Shuffle(corse24)
- PDO封装
- Leetcode020 Valid Parentheses
- 求一个整数有几 位; 第一行输入一个整数(int)N(如2563) 第二行输出该整数N是个几位数(4).
- c++多态性 运算符重载
- Utility Capacity on Demand(服务器按需扩容技术)
- Kubernes 部署 flannel + etcd
- #angular 国际化
- 文章标题