美文网首页
Hadoop MapReduce Job提交后的交互日志

Hadoop MapReduce Job提交后的交互日志

作者: Blieveinmyself | 来源:发表于2017-10-09 13:56 被阅读0次

    通过混合 NamdeNode, DataNode, ResourceManager,NodeManager的日志输出, 和 提交MapReduce Job的console输出日志,形成时间序列上的日志输出。

    这样可以方便查看从client端提交job,整个hadoop的内部交互的大致过程。

    MapReduce Job的console输出来自执行简单编写的例子: bin/hadoop jar hellohadoop-1.0-SNAPSHOT.jar WordCount demo out 后的输出。

    HDFS文件中保存job的位置在 /tmp/hadoop-yarn/staging/bruce/.staging/job_1449210909990_0001下。

    可以看到文件:

    appTokens

    job.jar

    job.split

    job.splitmetainfo

    job.xml
    job.split和job.splitmetainfo两个文件存储了有关InputSplit的信息。我们知道,Hadoop MapReduce将所有的输入文件划分成一个一个的InputSplit(划分规则由InputFormat的实现类定义),且为每一个InputSplit,JobTracker将分配一个task交给TaskTracker去执行map。那么,在启动Job之前,首先需要完成文件划分,这个实际上是由Client端来执行。Client完成文件划分后,将划分信息写入job.split和job.splitmetainfo,然后写这两个文件到staging dir。

    接下来的问题是,为什么需要有两个文件,它们分别存储了什么样的信息?如下图所示,job.split存储了所有划分出来的InputSplit,而每个InputSplit记录如下信息:

    该Split的类型(ClassName, mostly org.apache.hadoop.mapreduce.lib.input.FileSplit)
    该Split所属文件的路径(FilePath)
    该Split在所属文件中的起始位置(FileOffset)
    该Split的字节长度(Length)

    job.splitmetainfo存储了有关InputSplit的元数据:
    该Split在哪些Node上是local data(Location)
    该Split对应的InputSplit在job.split文件中的位置(SplitFileOffset)
    该Split的字节长度(Length, the same as that in job.split)


    job.splitmetainfo提供给JobTracker读取。比如,根据# Split,JobTracker能知道该分配多少个Task;根据Location,JobTracker能决定将该Split对应的Task分配给哪个Node去执行(优先分配到拥有该Split local data的Node)
    job.split提供给TaskTracker读取。根据FilePath, FileOffset, Length,TaskTracker知道从哪个文件的哪个位置开始读取要处理的Split data。

    相关文章

      网友评论

          本文标题:Hadoop MapReduce Job提交后的交互日志

          本文链接:https://www.haomeiwen.com/subject/rrxpyxtx.html