Hadoop节点与第三方软件的接口 我对Hadoop的理解
每当我向Hadoop集群提交代码时:Hadoop节点与第三方软件的接口 我对Hadoop的理解,hadoop,Hadoop,每当我向Hadoop集群提交代码时: 执行hadoopmap函数,并将计算属性分配给数据节点 Mymap函数在本地数据的每个节点上执行 Myreduce函数在每个节点上执行 节点完成任务后,会将结果发送回主节点 执行hadoopreduce函数并聚合结果 问题本身 假设前面描述的步骤是正确的,那么改变步骤2的要求是什么: public void map(Args args) { for(Arg arg : args) someCalculations(arg);
map
函数,并将计算属性分配给数据节点map
函数在本地数据的每个节点上执行reduce
函数在每个节点上执行reduce
函数并聚合结果public void map(Args args) {
for(Arg arg : args)
someCalculations(arg);
}
为此:
public void map(Args args) {
executeOtherSofwareAndFetchResultst(args);
}
例如,其他软件是否需要HDFS兼容性 映射器的行为与普通Java实例类似。您可以在mapper中对普通Java程序执行任何操作。
把它看作另一个java实例,只要你把数据映射到映射器中,就不需要任何软件与HDFs兼容,因为映射器处理它而不是它里面的逻辑。只要我从java读取数据块,我就可以用其他软件读取数据块。映射器读取数据并将其传递给映射器中的映射函数。当映射器本身读取数据时,为什么要从外部读取数据?如果我希望将整个数据块发送到某个软件,我必须将数据写入映射器的新文件中。从外部读取块可以防止这种情况发生。因此,与其从软件中读取,不如将HDFS中的数据作为普通java代码读取,并在软件逻辑中使用它。这可能会帮助您:路径pt=新路径(“hdfs://npvm11.np.wc1.yellowpages.com:9000/user/john/abc.txt"); FileSystem fs=FileSystem.get(新配置());BufferedReader br=新的BufferedReader(新的InputStreamReader(fs.open(pt));弦线;line=br.readLine();而(line!=null){line=br.readLine()