【发布时间】:2017-07-25 18:08:35
【问题描述】:
我正在 AWS EMR 上运行一个非常简单的 Spark 作业,但似乎无法从我的脚本中获取任何日志输出。
我尝试过打印到标准错误:
from pyspark import SparkContext
import sys
if __name__ == '__main__':
sc = SparkContext(appName="HelloWorld")
print('Hello, world!', file=sys.stderr)
sc.stop()
并使用如图所示的火花记录器here:
from pyspark import SparkContext
if __name__ == '__main__':
sc = SparkContext(appName="HelloWorld")
log4jLogger = sc._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger(__name__)
logger.error('Hello, world!')
sc.stop()
作业运行后,EMR 给了我两个日志文件:controller 和 stderr。两个日志都不包含"Hello, world!" 字符串。据我了解,stdout 在 spark 中被重定向到 stderr。 stderr 日志显示作业已被接受、运行并成功完成。
所以我的问题是,在哪里可以查看脚本的日志输出?或者我应该在我的脚本中更改什么才能正确记录?
编辑:我使用此命令提交步骤:
aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE
【问题讨论】:
-
您使用什么参数将作业提交给 EMR?
-
我发现特定步骤的日志记录几乎永远不会在 EMR 控制台拉到步骤旁边的控制器或标准错误日志中结束。通常我会在作业的容器日志中找到我想要的内容(通常在标准输出中)。它们通常位于
s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application_XXXXXXXXX/container_XXXXXXX/...之类的路径上 -
@GregReda 我在那里找到了日志。谢谢!如果您将其发布为答案,我会接受。
-
太棒了!很高兴我一直在调试 EMR + PySpark 并没有白费 :)
标签: python apache-spark emr