我设置了两个HDFS集群,C1和C2。显然,两者都存储了大量数据,但对于这个特定的工作,其中一个拥有大部分必要的数据(假设C1拥有90%),其余的数据在C2上。我想写一个M/R作业,它可以在C1上运行,但仍然可以访问C2上其他10%的数据。Hadoop内置了这种功能吗?以前有人遇到过这种情况吗?
我有几个想法,我知道会奏效:
1) 我可以显式地提取必要的数据,只在C1上运行,但我希望有一个更干净、更灵活的解决方案。
2) 我看过一些关于HDFSProxy的内容,它似乎可以解决这个问题。你知道我能期待多大的表演成功吗?
无论哪种方式,我预计都必须付出代价,将所需数据从C2拉到C1,以便C1中的计算节点能够处理数据。
我是Hadoop的新手,所以任何指针都将不胜感激。谢谢
我会继续回答我自己的问题,以防将来有人好奇。
事实证明Hadoop已经足够好了,可以实现这个问题的解决方案。如果输入被列为来自多个名称节点(即。,hdfs://namenode1:12345/file1和hdfs://namenode2:12345/files2)Hadoop会自动将文件从第二个集群复制到第一个集群并执行。无论这些命令在哪里运行,都将决定作业将在哪个集群上执行。
显然,这并不理想,因为保证有一小部分工作将数据带到计算中,而不是将计算带到数据中,但它会起作用。