应用程序错误日志在哪里?

Where are application errors logs?

考虑到必须通过在日志文件中查找错误消息来调试我们的 Python 代码,我创建了一个抛出异常但找不到错误消息的 Hadoop Streaming 作业(或堆栈跟踪)。

类似的问题 hadoop streaming: where are application logs? and hadoop streaming: how to see application logs? 使用 Python 的 logging 模块,这在此处是不可取的,因为 Python 已经记录了错误,因此我们不必记录。

这是映射器代码;我们使用 Hadoop 内置的 reducer aggregate.

#!/usr/bin/python
import sys, re
import random

def main(argv):
  line = sys.stdin.readline()
  pattern = re.compile("[a-zA-Z][a-zA-Z0-9]*")
  try:
    while line:
      for word in pattern.findall(line):
        print "LongValueSum:" + word.lower() + "\t" + "1"
        x = 1 / random.randint(0,99)
      line = sys.stdin.readline()
  except "end of file":
    return None
if __name__ == "__main__":
  main(sys.argv)

x = 1 / random.randint(0,99)行是假设创建一个ZeroDivisionError并且确实作业失败但是grep日志文件不显示错误。我们需要在某个地方设置特殊标志吗?

我们已经阅读了 Google Dataproc 文档以及 Hadoop Streaming 文档。

当您 运行 Cloud Dataproc 作业时,作业驱动程序输出流式传输到 GCP 控制台,显示在命令终端 window(对于从命令行提交的作业),并存储在云存储,请参阅 accessing job driver output。您还可以在 StackDriver 中找到名称为 dataproc.job.driver.

的日志

您还可以在创建集群时启用 YARN 容器日志并在 StackDriver 中查看它们,请参阅 instructions

除此之外,StackDriver 中的 yarn-userlogs 可能也很有用。