我的hadoop程序原本是以本地模式启动的,现在我的目的变成了以完全分布式模式启动。为此,有必要从集群的所有计算机提供对在 reducer 和映射器函数中执行读取的文件的访问,因此我在http://answers.mapr.com/questions/4444/syntax-of-option-files-in-hadoop-script上提出了一个问题。 (同样,由于不知道要在哪台计算机上执行映射器功能(从程序逻辑来看,只有一个映射器,并且该程序将仅使用一个映射器启动),因此还需要在所有集群上提供对到达映射器功能输入的文件的访问)。在这方面我有一个问题:是否可以直接使用hdfs-files:即预先从Linux文件系统复制文件到HDFS文件系统中(因此,正如我假设的那样,这些文件在集群的所有计算机上都可用,如果不是这样,请纠正),然后在集群计算机上执行的reducer和mapper函数中使用HDFS Java API来读取这些文件?
如果对这个问题的回答是肯定的,请给出一个从 Linux 文件系统复制到 HDFS 文件系统中的示例,并通过 HDFS Java API 将这些文件以 java 方式读取到程序中,并将其内容记录在 java-string 中。
最佳答案
将所有输入文件复制到master节点(这可以使用scp
完成)。
然后登录到您的 master 节点 (ssh
) 并执行如下操作,将文件从本地文件系统复制到 hdfs:
hadoop fs -put $localfilelocation $destination
现在,在您的 hadoop 作业中,您可以使用输入 hdfs:///$destination
。无需使用任何额外的 API 来从 HDFS 读取。
如果您确实想从 HDFS 读取文件并用作输入文件之外的附加信息,请参阅 this .
关于java - 从集群中的所有计算机访问 HDFS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856535/