预期必须通过在日志文件中查找错误消息来调试我们的Python代码,所以我创建了一个Hadoop Streaming作业,该作业会引发异常,但是我无法找到错误消息(或堆栈跟踪) 。
类似的问题hadoop streaming: where are application logs?和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)
应该{{1}}行 创建一个x = 1 / random.randint(0,99)
,确实该作业失败,但是对日志文件进行grep操作不会显示错误。我们需要在某个地方设置一个特殊的标志吗?
我们已经遍历了Google Dataproc文档和Hadoop Streaming文档。
答案 0 :(得分:1)
运行Cloud Dataproc作业时,作业驱动程序输出将流式传输到GCP控制台,显示在命令终端窗口中(用于从命令行提交的作业),并存储在Cloud Storage中,请参见accessing job driver output。您还可以在StackDriver中找到名为dataproc.job.driver
的日志。
您还可以在创建集群时启用YARN容器日志,并在StackDriver中查看它们,请参见instructions。
除此之外,StackDriver中的yarn-userlogs
也可能有用。