Hadoop 如何将文件放入特定节点?

Hadoop 如何将文件放入特定节点?,hadoop,hdfs,Hadoop,Hdfs,是否可以告诉HDFS在哪里存储特定文件 用例 我刚刚将一批文件加载到HDFS中,希望对这些数据运行作业/应用程序。但是,我还有批#2,仍要加载。如果我能在第一批上运行作业/应用程序,比如说,在1到10个节点上运行,并将新数据完全并行地加载到11到20个节点上,那就太好了 起初我认为(Hadoop2.x)确实做到了这一点,但看起来联邦只拆分名称空间,而DataNodes仍然为所有连接的名称节点提供块 那么,有没有办法控制HDFS中数据的分布?这有意义吗 从技术上讲,你可以,但我不会 如果您想完全控

是否可以告诉HDFS在哪里存储特定文件

用例

我刚刚将一批文件加载到HDFS中,希望对这些数据运行作业/应用程序。但是,我还有批#2,仍要加载。如果我能在第一批上运行作业/应用程序,比如说,在1到10个节点上运行,并将新数据完全并行地加载到11到20个节点上,那就太好了

起初我认为(Hadoop2.x)确实做到了这一点,但看起来联邦只拆分名称空间,而DataNodes仍然为所有连接的名称节点提供块


那么,有没有办法控制HDFS中数据的分布?这有意义吗

从技术上讲,你可以,但我不会

如果您想完全控制数据的去向,可以扩展
BlockPlacementPolicy
(请参阅)。这不容易做到,我不推荐这样做


您可能可以采取措施,通过一些巧妙的设置,尽可能减少两组节点之间的通信量,以充分利用机架感知

正如@grampage提到的,“如何将文件放入特定节点(在HDFS中)?”问题的答案是创建您自己的BlockPlacementPolicy。然而,即使您想这样做,也很难实现您的用例,因为它似乎特定于在特定时刻运行的作业。你能提供更多关于你为什么要这样做的细节吗?这种调整应该是不必要的,在大多数情况下,最好的方法是让框架负责分配负载和I/O。@cabad:I尝试减少同时访问磁盘的次数。当您将数据上载到节点(写入磁盘)并使用来自同一节点(从磁盘读取)的数据进行某些计算时,这些操作可能会发生冲突并减慢这两个过程。我不知道会慢多少,但我想事先知道可能的解决方案(以及所需的努力)。虽然由于同时I/O可能会慢一些,但我怀疑效果是否会太明显。Hadoop和OS层使用缓冲和缓存(在磁盘页缓存和本地Hadoop缓冲区中),以便I/O操作可以在最方便的时候命中磁盘,而不会产生争用。@cabad:谢谢,你消除了我的疑虑。