Spark Tungsten-sort Based Shuffle 分析
前言
- 直接在serialized binary data上sort而不是java objects,减少了memory的开销和GC的overhead。
- 提供cache-efficient sorter,使用一个8bytes的指针,把排序转化成了一个指针数组的排序。
- spill的merge过程也无需反序列化即可完成
开启条件
spark.shuffle.manager=tungsten-sort
org.apache.spark.shuffle.unsafe.UnsafeShuffleManager
- Shuffle dependency 不能带有aggregation 或者输出需要排序
- Shuffle 的序列化器需要是 KryoSerializer 或者 Spark SQL's 自定义的一些序列化方式.
- Shuffle 文件的数量不能大于 16777216
- 序列化时,单条记录不能大于 128 MB
这些限制来源于哪里
this.pageSizeBytes = (int) Math.min( PackedRecordPointer.MAXIMUM_PAGE_SIZE_BYTES, shuffleMemoryManager.pageSizeBytes());
[24 bit partition number][13 bit memory page number][27 bit offset in page]
- 一个是partition 的限制,前面的数字 16777216 就是来源于partition number 使用24bit 表示的。
- 第二个是page number
- 第三个是偏移量,最大能表示到2^27=128M。那一个task 能管理到的内存是受限于这个指针的,最多是 2^13 * 128M 也就是1TB左右。
Shuffle Write
org.apache.spark.shuffle.unsafe.UnsafeShuffleWriter
serBuffer = new MyByteArrayOutputStream(1024 * 1024)
ExecutorHeapMemeory * 0.2 * 0.8
spark.shuffle.memoryFraction=0.2 spark.shuffle.safetyFraction=0.8
private long[] pointerArray;
spark.shuffle.file.buffer = 32k
final byte[] writeBuffer = new byte[DISK_WRITE_BUFFER_SIZE=1024 * 1024];
`spark.shuffle.unsafe.fastMergeEnabled=true`
`spark.shuffle.compress=true`
LZFCompressionCodec
Shuffle Read
总结

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hive Tunning(二)优化存储
接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储。 下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要讲一下ORCFile。 Built-in Formats: – ORCFile – RCFile – Avro – Delimited Text – Regular Expression – S3 Logfile – Typed Bytes • 3 rd -Party Addons: – JSON – XML 这种格式非常适合HDFS,它有以下的 优点: •高压缩 – 高压缩比. – 字典编码. •高性能 – 自带索引. – 高效的精确查询. • 灵活的数据模型 – 支持所有的hive类型,包括maps. 从图中可以看出,orc格式的文件存储大小仅为文本的30%左右,比gz格式的都小,采用zlib压缩的话,更小,仅有22%左右。 使用orc格式存储的方式很简单,在建表的时候STORED AS orc即可 CREATE TABLE sale( id int, timestamp timestamp, productsk int, st...
- 下一篇
Hive Tuning(三) 从查询计划看hive.auto.convert.join的好处
今天我们来讲一下如何看懂Hive的查询计划。 hive的执行计划包括三部分: – Abstract syntax tree – 可以直接忽略 – Stage dependencies – 依赖 – Stage plans – hive如何执行任务的信息。 下面还是以一个案例作为说明 设置自动连接为false的话,要走5步。 4 Map Reduces tells you something is not right. Stage: Stage-1 Map Reduce Stage: Stage-2 Map Reduce Stage: Stage-3 Map Reduce Stage: Stage-4 Map Reduce 设置自动连接为true就只有4步 Only 2 Map Reduces Stage: Stage-8 Map Reduce Stage: Stage-4 Map Reduce h...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装