spark netty 源码分析,Netty源码分析

在处理Sparkshuffle-write和shuffle-read中的数据偏斜时 , 我们主要想回答两个问题:当指定这个任务操作对于上游RDD的分区 , 也就是map端的分区和writer.write操作为真时,根据RDD的partitioner生成一个新的partitionId,然后写入完成shufflewrite 。当下游洗牌时,只拉相应的PartitionData接下来插一段讲一下nettyblockserver在Spark中的实现:reduce终端读取数据时,shuffleblockfetchiterator::send request调用NettyblockTransservice::fetch blocks调用OneForOneBlockFetcher::start首先调用TransportClient::sendRpcSync发送OpenBlo,Cks发送到上面提到的nettyblockserver,然后发送ChunkFetchRequest获取对应的chunk,也就是其中的chunk 。

1、Sparkshuffle-write和shuffle-read中对数据倾斜情况的处理我主要想回答两个问题:在ShuffleMapTask中 , 当指定这个任务操作对于上游RDD的分区,也就是map端的分区为真时,writer.write , 根据RDD的分区生成一个新的partitionId,然后写入完成shufflewrite,下游shuffleread时,只拉对应的分区数据即可;接下来插一段讲一下nettyblockserver在Spark中的实现:reduce终端读取数据时,shuffleblockfetchiterator::send request调用NettyblockTransservice::fetch blocks调用OneForOneBlockFetcher::start首先调用TransportClient::sendRpcSync发送OpenBlo 。Cks发送到上面提到的nettyblockserver,然后发送ChunkFetchRequest获取对应的chunk , 也就是其中的chunk 。

2、Netty之FileRegion文件传输Netty在传输文件时没有使用ByteBuf将数据写入通道,而是使用了 。先通过例子了解一下用法,再深入源码 分析为什么不用ByteBuf?从示例中可以看出,ChannelPipeline中添加了一个custom() 。看看下面的源码吧,其他的处理程序都包含在Netty里面了,这些处理程序的具体实现原理会在分析后面 。

我们知道,在向NioSocketChannel写入数据时,我们都使用ByteBuf进行写入 。为什么在这里使用默认?默认中有一个非常重要的方法,transferTo()方法 。可以看出,文件是通过方法直接发送到WritableByteChannel的 。通过Nio,可以使用map文件映射直接发送给SocketChannel,这样可以减少两次io的重复 。

3、[ spark]ShuffleRead解析(SortBasedShuffle【spark netty 源码分析,Netty源码分析】ShuffleWrite请参见ShuffleWrite解析 。本文将解释shuffleReduce的部分 。shuffle下游阶段的第一个rdd是ShuffleRDD,通过它的compute方法获得从上游阶段ShuffleWrite溢出到磁盘文件的数据的迭代器:从SparkEnv获得shufflemanager(这里是SortShuffleManager),通过manager获得Reader,通过调用它的read方法获得迭代器 。

    推荐阅读