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