我的问题与 Hadoop 中的 Map 端加入有关。前几天我在看 ProHadoop 我没看懂下面这句话
“map-side join 提供了一个对多个排序数据集执行操作的框架。虽然 join 中的各个 map 任务失去了数据局部性的大部分优势,但由于消除了 reduce 阶段和/或减少所需的数据量大大减少。”
如果将排序的数据集存储在 HDFS 上,它怎么会失去数据局部性的优势?Hadoop 中的作业跟踪器不会在数据集块本地化的同一位置上运行任务跟踪器吗?
请纠正我的理解。
我的问题与 Hadoop 中的 Map 端加入有关。前几天我在看 ProHadoop 我没看懂下面这句话
“map-side join 提供了一个对多个排序数据集执行操作的框架。虽然 join 中的各个 map 任务失去了数据局部性的大部分优势,但由于消除了 reduce 阶段和/或减少所需的数据量大大减少。”
如果将排序的数据集存储在 HDFS 上,它怎么会失去数据局部性的优势?Hadoop 中的作业跟踪器不会在数据集块本地化的同一位置上运行任务跟踪器吗?
请纠正我的理解。
陈述是正确的。您不会丢失所有数据局部性,而是丢失其中的一部分。
让我们看看它是如何工作的:我们通常区分连接的较小和较大部分。连接的较小分区分布到存储相应较大分区的位置。
结果,我们丢失了其中一个连接数据集的数据局部性。
我不知道 David 是什么意思,但对我来说,这是因为你只有 map 阶段,然后你只是去那里通过将不同的表放在一起完成你的工作,而对 HDFS 没有任何收获?
这是 Map-side join 中遵循的过程:
假设我们有两个数据集 R 和 S,假设它们都适合主内存。R 大,S 小。
较小的数据集被迭代地加载到主内存中,以匹配与 R 的对。
在这种情况下,我们实现了 R 而不是 S 的数据局部性。