zoukankan      html  css  js  c++  java
  • Hadoop 之日志管理—应用在 YARN 中运行时的日志

    背景:

    在写这篇博文前,自己一直没有弄明白一个问题,“在 Map 函数和 Reduce 函数中使用 System.out.print 打印日志时,输出内容在哪里显示?”。试了好多回,在 log/* 目录下找了很久都没有找到,并且尝试了很多次去找,都没有成功。这让我想通过此方法调试 Map/Reduce 函数以失败告终。

    最后,一次偶然的机会让我发现了关于日志的玄机。通过自己的观察和阅读参考书籍,终于弄明白了。


    客户端向 YARN 提交 MapReduce 作业运行时,会建立 Container 运行日志,并保存在本地磁盘(不是 HDFS 中),默认情况下,日志目录为 logs/userlogs/ 。此目录下的内容为各个作业运行时在本节点上所建立的 log 目录结构,此层由 “application ” 加 “id” 组成文件夹名,进入此文件夹后,在此层看到的是由 “conainer” 加 “id” 组成的文件夹,进入此文件夹后,在此层有三个文件:stderr(异常输出),stdout(标准输出),syslog(运行日志)。

    有时,我们希望使用 System.out.println 来查看运行过程中的某些值的情况,所以,我们要找到这个输出要在哪里才能看到。

    下面来考究一下这个问题~ 
    Hadoop 在 MapReduce 中使用 System.out.println 打印内容时,内容输出地址为 MRAppMaster 运行的节点上,目录为 logs/userlogs/application_1453984687920_0004/container_1453984687920_0004_01_000002

    注: 
    application_1453984687920_0004 
    ——为对应的 application_id,Hadoop 集群中所有配合 MRAppMaster 运行过该作业的的节点都会产生这个目录存放相应的日志。

    container_1453984687920_0004_01_000002 
    ——在作业准备运行阶段,已经向 ResourceManager 申请过运行作业需要的 container ,作业运行时包含的所有 container 点都会在 application_id 目录下再创建一个 自己对应的 container_id 的目录。

    然后在 container_id 这个目录下存放着三个不同的文件输出:stderr(异常输出),stdout(标准输出),syslog(运行日志)。 
    注意,在 MapReduce 程序里书写 System.out.print 时,会输出到stdout 中,并且只在 MRAppMaster 运行的节点上的 container_id 目录下的 stdout 文件中才会有 。

    怎样才能知道 MapReduce 作业的 MRAppMaster 运行在哪个节点呢?有很多种方法,例如通过 jps 命令查看进程。不过最好的方法是通过访问主节点的 8088 端口来查看所有作业的运行情况,会显示 MRAppMaster 运行在哪个节点上。

  • 相关阅读:
    mysql 中文字段排序( 按拼音首字母排序) 的查询语句
    纯css3样式属性制作各种图形图标
    10个超有用的网页设计工具和资源
    手风琴导航效果实现
    css3动画导航实现
    java实现将资源文件转化成sql语句导入数据库
    select实现输入模糊匹配与选择双重功能
    js一些问题总结
    java实现excel与mysql的导入导出
    《C++程序设计》朝花夕拾
  • 原文地址:https://www.cnblogs.com/itboys/p/9398958.html
Copyright © 2011-2022 走看看