预期必须通过在日志文件中查找错误消息来调试我们的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)
x = 1 / random.randint(0,99)
行是应该 至创建一个ZeroDivisionError
,确实作业失败,但是对日志文件进行grep操作不会显示错误。我们需要在某个地方设置一个特殊的标志吗?
我们浏览了Google Dataproc文档和Hadoop Streaming文档。
dataproc.job.driver
的日志。您还可以在创建集群时启用YARN容器日志,并在StackDriver中查看它们,请参阅instructions。
除此之外,StackDriver中的yarn-userlogs
也可能有用。