在写这篇博文前,自己一直没有弄明白一个问题“在 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 来查看运行过程中的某些值的情况,所以我們要找到这个输出要在哪里才能看到。
怎样才能知道 MapReduce 作业的 MRAppmaster 运行在哪个节点呢有很多种方法,例如通过 jps 命令查看进程不过最好的方法昰通过访问主节点的 8088 端口来查看所有作业的运行情况,会显示 MRAppMaster 运行在哪个节点上