2013-08-05 27 views
2

Data locality if HDFS not used类似,但是特定于HDFS。使用不同群集的HDFS时的数据局部性

我们有2个hadoop集群,我们向集群提交一份猪作业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; 

出人意料的是,它的工作原理+花费几乎我们使用集群只有一个地方的数据集(约10分钟)

什么技术上发生工作时相同的时间? TaskTracker只在A节点上运行吗?他们如何从B datanodes读取数据集?为什么它如此之快,因为它们不可能享受数据本地化,他们可以吗?

谢谢!

+0

你为什么不提交猪作业集B,把10行到分布式高速缓存,并从那里加入了吗?顺便说一句,我们不知道你的集群A是否运行任务跟踪器。 –

+0

**您从集群B **读取一个大数据集(100GB)是什么意思? – Tariq

回答

1

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

作业追踪器会倾向于以数据本地方式分配作业,但如果不能,则只需将它们提交给任何任务追踪器*。在这一点上,从本地HDFS或远端HDFS读取同样的机制:通过网络。协议是一样的,所以没问题!

至于你为什么不注意减速,我不知道!也许你有一个快速的网络(10GigE?)!任务跟踪器肯定从网络上远处的数据节点获取数据。但是,这是并行的。我想你会注意到更大的规模。

*我忽略了机架当地步