hadoop—使用不同集群的HDF时的数据位置

a0zr77ik  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(327)

如果不使用hdfs,则类似于数据局部性,但特定于hdfs。
我们有两个hadoop集群,我们正在向集群a jobtracker提交一个pig作业,它从集群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分钟)
技术上发生了什么?TaskTracker是否仅在节点上运行?他们是如何从b datanodes读取数据集的?为什么这么快,因为他们不可能享受数据本地化,是吗?
谢谢!

tzcvj98z

tzcvj98z1#

实际上,从同步的Angular 来看,hdfs集群和mapreduce集群之间没有任何关系。。。他们是完全独立的。碰巧我们经常将它们放在同一个位置以利用数据的局部性。
作业跟踪器更喜欢以数据本地方式分配作业,但如果不能,它只会将作业提交给任何任务跟踪器*。在这一点上,从本地hdfs或远程hdfs读取是相同的机制:通过网络。协议是一样的,所以没问题!
至于你为什么没有注意到减速,我不确定!也许你有一个快速网络(10gige?)!任务跟踪器肯定是通过网络从远程数据节点获取数据。但是,这是并行的。我想你会注意到更大的范围。

  • 我忽略了这一步

相关问题