我的hadoop程序最初是在本地模式下启动的,现在我的目的是在完全分布式模式下启动。为此,有必要提供对在reducer和mapper函数中执行读取的文件的访问,所以我问了一个关于http://answers.mapr.com/questions/4444/syntax-of-option-files-in-hadoop-script (也因为不知道在哪台计算机上执行Map器功能(从程序逻辑上看,Map器只有一个,程序只能用一个Map器启动),还需要在所有集群上提供对Map器函数(mapper function)输入的文件的访问。在这方面,我有一个问题:是否可以直接使用hdfs文件:即预先从linux的文件系统中复制文件到hdfs的文件系统中(因此,我假设这些文件在集群的所有计算机上都可用,如果不是这样,请更正),然后使用hdfs java api来读取这些文件,在集群的计算机上执行的reducer和mapper函数中?
如果对这个问题的回答是肯定的,请给出一个在hdfs文件系统中从linux文件系统复制的例子,并通过hdfs-javaapi将这些java文件读取到程序中,并将其内容记录在java字符串中。
1条答案
按热度按时间blpfk2vs1#
将所有输入文件复制到主节点(可以使用
scp
). 然后登录到主节点(ssh
)并执行以下操作将文件从本地文件系统复制到hdfs:hadoop fs -put $localfilelocation $destination
现在在hadoop作业中,可以使用输入hdfs:///$destination
. 不需要使用任何额外的api来读取hdfs。如果您真的想从hdfs中读取文件并将其用作输入文件以外的附加信息,那么请参阅以下内容。