我的问题与Hadoop中的Map side join有关。 前几天我正在阅读ProHadoop我不理解下面的句子
“地图侧连接提供了一个框架,用于对多个已排序的操作执行操作 数据集。 虽然联接中的各个地图任务失去了数据位置的大部分优势, 由于可能消除减少阶段和/或减少阶段,总体工作增加 大幅减少了减少所需的数据量。“
如果排序数据集存储在HDFS上,它怎么会失去数据局部性的优势?Hadoop中的作业跟踪器是否会在数据集块本地化的同一个地运行任务跟踪器?
请纠正我的理解。
答案 0 :(得分:1)
声明是正确的。您不会丢失所有数据位置,而是丢失其中的一部分。
让我们看看它是如何工作的:
我们通常区分连接的较小和较大部分。
连接的较小分区被分发到存储相应较大分区的位置。
因此,我们丢失了其中一个连接数据集的数据位置。
答案 1 :(得分:0)
我不知道大卫的意思是什么,但对我来说,这是因为你只有地图阶段,然后你就去那里完成你的工作,把不同的表放在一起,没有任何关于HDFS的收获?
答案 2 :(得分:0)
Map-side join 的流程是这样的:
假设我们有两个数据集 R 和 S,假设它们都适合主内存。 R大,S小。
较小的数据集被迭代加载到主内存中,以匹配 R 对。
在这种情况下,我们实现了 R 而不是 S 的数据局部性。