标签(空格分隔): Spark的部分
如何判断RDD之间是窄依赖还是宽依赖:
父RDD的每个分区数据 给 子RDD的每个分区数据
在MapReduce框架中shuffle是连接Map和Reduce之间的桥梁,Map的輸出要用到Reduce中必须经过shuffle这个环节shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现自然也实现了shuffle的逻辑。
Shuffle是MapReduce框架Φ的一个特定的phase介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时输出结果需要按key哈希,并且分发到每一个Reducer上去这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输因此shuffle性能的高低直接影响到了整个程序的运行效率。
1. 具有重新调整分区操作
概念上shuffle就是一个沟通数据连接的橋梁,那么实际上shuffle(partition)这一部分是如何实现的的呢下面我们就以Spark为例讲一下shuffle在Spark中的实现。
2.其次Mapper产生的结果会根据设置的partition算法填充到每个bucketΦ去这里的partition算法是可以自定义的,当然默认的算法是根据key哈希到不同的bucket中去 这里的bucket是一个抽象概念,在实现中每个bucket可以对应一个文件可以对应文件的一部分或是其他等。 3. Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似一些概念可直接套用,例如Shuffle 过程中,提供数据的一端被称作 Map 端,Map 端每个生成数据的任务称为 Mapper对应的,接收数据的一端被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 ReducerShuffle 过程本质上都是将 Map 端获得的数据使用汾区器进行划分,并将数据发送给对应的 Reducer 的过程