类似于未使用 HDFS 的数据局部性,但特定于 HDFS。
我们有 2 个 hadoop 集群,我们正在向集群 A JobTracker 提交一个猪作业,它从集群 B 读取一个大数据集(100GB)并将其连接到集群 A 的一个小数据集(10 行)。
b_data = load 'hdfs://b-cluster/big.txt' as ( customer_id: chararray);
a_data = load 'hdfs://a-cluster/small.txt' as ( customer_id: chararray);
j_data = join a_data by acct_id left, b_data by customer_id;
dump j_data;
令人惊讶的是,它的工作原理与我们在集群 A 上仅使用本地数据集时所用的时间几乎相同(大约 10 分钟)
技术上发生了什么?任务跟踪器是否仅在 A 节点上运行?他们如何从 B 个数据节点读取数据集?为什么它这么快,因为他们不可能享受数据本地化,不是吗?
谢谢!