大数据 Shuffle 原理与实践(下篇)|青训营笔记

125 阅读2分钟

大数据 Shuffle 原理与实践(下篇)|青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第2天 前几天已经对流式计算、批式计算、spark等等有了一些了解。今天继续来学习上次没学完的课。 1.reducer之前的操作都为shuffle 2.rdd弹性分布式数据集

3.7 Writer实现 - BypassMergeShuffleWrite

           - UnsafeShuffleWriter(对外)
           - SortShuffleWrite(对内)
           

3.8 Reader实现

— 网络时序图

1.使用基于netty的网络通信框架 2.位置信息记录在MapOutputTracker中 3.主要会发送两种类型的请求(openBlocks请求,Chunk请求或Stream请求)

— ShuffleBlockFetchIterator(随即放)

1.区分local和remote节省网络消耗 2.防止OOM

— External Shuffle Service

ESS作为一个存在于每一个节点上的agent为所有Shuffle Reader提供服务,从而优化了Spark作业的资源利用率, Map Task在运行结束后可以正常退出

3.9 Shuffle 优化使用的技术

— Zero Copy

DMA:直接存储器存取,是指外部不通过CPU而直接与系统内存交换数据接口技术。

440828DE35DFDBD47A3F7ECDD3C40015.jpg

—Netty Zero Copy

1.可堆外内存,避免JVM堆内存到堆外内存的数据拷贝 2.CompositeByteBuf、Unpooled.wrappedBuffer. ByteBuf.slice , 可以合并、包装、切分数组,避免发生内存拷贝

3.Netty使用FileRegion实现文件传输,FileRegion底层封装了FileChannel#transferTo() 方法,可以将文件缓冲区的数据直接传输到目标Channel,避免内核缓冲区和用户态缓冲区之间的数据拷贝

3.10 常见问题

1.数据存储在本地磁盘,没有备份 2.IO并发:大量RPC请求(M*R) 3.IO吞吐:随机读、写大放(3X) 4.GC频繁,影响NodeManager

3.11 Shuffle 优化

1.避免shuffle(使用broadcast替代join)

B3F70871E622B460127A2168C1F4A00A.jpg 2.使用可以map-side预聚合的算子

3.12shuffle参数优化

21D25A6FD066027E474E83941A352A24.jpg

3.13 Shuffle倾斜处理办法

1.提高并行度 2.AQE Skew Join 3.14 案例 — 参数优化

370DAB750AC54B13029BB2122D82CB71.jpg

4.push Shuffle

BFEQ(HA@N@SU(V{1_E9C7`T.jpg