我有一个场景,我使用Hadoop处理1000个小文件。然后,Hadoop作业的输出将用作非Hadoop算法的输入。在当前的工作流程中,数据被读取,转换为序列文件,处理并生成的小文件以序列文件的形式输出到HDFS。但是,非Hadoop算法无法理解序列文件。因此,我编写了另一个简单的Hadoop作业,从序列文件中读取结果文件的数据,并创建可供非Hadoop算法使用的最终小文件。
这里的问题是,对于最后的工作,我必须从HDFS读取序列文件,并写入每个节点的本地文件系统,以便由非Hadoop算法处理。我尝试将输出路径设置为file:///<local-fs-path>
并使用 HadoopLocalFileSystem
类。但是,这样做只会将最终结果输出到 namenode 的本地文件系统。
为了完成图片,我有10个节点Hadoop设置和Yarn。在Hadoop Yarn模式下,有没有办法从HDFS读取数据并将结果写入每个处理节点的本地文件系统?
谢谢
不是真的。 虽然您可以写入LocalFileSystem
,但您不能要求 YARN 在所有节点上运行您的应用程序。 此外,根据集群的配置方式,YARN 的节点管理器可能不会在系统的所有节点上运行。
一种可能的解决方法是将转换后的文件保存在HDFS中,然后让非Hadoop进程首先调用hdfs dfs -copyToLocal
。