Hadoop节点与第三方软件的接口 我对Hadoop的理解

Hadoop节点与第三方软件的接口 我对Hadoop的理解,hadoop,Hadoop,每当我向Hadoop集群提交代码时: 执行hadoopmap函数,并将计算属性分配给数据节点 Mymap函数在本地数据的每个节点上执行 Myreduce函数在每个节点上执行 节点完成任务后,会将结果发送回主节点 执行hadoopreduce函数并聚合结果 问题本身 假设前面描述的步骤是正确的,那么改变步骤2的要求是什么: public void map(Args args) { for(Arg arg : args) someCalculations(arg);

每当我向Hadoop集群提交代码时:

  • 执行hadoop
    map
    函数,并将计算属性分配给数据节点
  • My
    map
    函数在本地数据的每个节点上执行
  • My
    reduce
    函数在每个节点上执行
  • 节点完成任务后,会将结果发送回主节点
  • 执行hadoop
    reduce
    函数并聚合结果
  • 问题本身 假设前面描述的步骤是正确的,那么改变步骤2的要求是什么:

    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()