使用不同群集的HDFS时的数据位置

时间:2013-08-05 10:10:37

标签: hadoop hdfs

Data locality if HDFS not used类似,但特定于HDFS。

我们有2个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分钟)时,我们习惯了几乎相同的时间

技术上发生了什么? tasktrackers只在A节点上运行吗?他们如何从B数据节点读取数据集?为什么它这么快,因为它们不可能享受数据局部性,是吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

实际上,HDFS集群和MapReduce集群从同步的角度来看彼此无关......它们是完全独立的。恰好是我们经常将它们共同定位以利用数据局部性。

作业跟踪器更喜欢以数据本地方式分配作业,但如果它不能将它们提交给任何跟踪器*。此时,从本地HDFS或远程HDFS读取的机制与网络相同。协议是一样的,所以没问题!

至于为什么你没有注意到减速,我不确定!也许你有一个快速的网络(10GigE?)!任务跟踪器肯定是通过网络从远程数据节点获取数据。但是,它正在并行执行此操作。我想你会更大规模地注意到。

*我忽略了机架位置步骤