java - 从集群中的所有计算机访问 HDFS 文件

标签 java linux hadoop mapreduce hdfs

我的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/

相关文章:

hadoop - yarn 调度程序负载模拟器-公平调度程序

java - 如何检测文件是否不是utf-8编码?

java - 自定义适配器不适用于 Parse.com 的 ListView

linux - 如何找到oracle db的系统服务名?

linux - 使用 ubuntu 将本地文件夹同步到 github 存储库

python - 电子前沿基金会的猫笑话

hadoop - 安装hdp-3.0时找不到匹配redhat6的操作系统错误

hadoop - 直接从 HDFS 读取文件

java - 使用递归打印大小为 n 的所有二进制数

java - Android SQLite 中的 WHERE 子句