我有一个python入口点test_logging.py
,我在集群模式下提交给spark。它看起来像:
import logging
logger = logging.getLogger(__name__)
from pyspark.sql import SparkSession
with SparkSession.builder.getOrCreate() as spark:
spark.sparkContext.setLogLevel("DEBUG")
logger.debug("Debug")
logger.info("Info")
logger.warning("Warning")
spark-submit调用如下所示:
/usr/hdp/current/spark2-client/bin/spark-submit
--conf
spark.app.name=my-app
--conf
spark.driver.cores=8
--conf
spark.driver.memory=2g
--conf
spark.dynamicAllocation.enabled=true
--conf
spark.dynamicAllocation.minExecutors=10
--conf
spark.dynamicAllocation.maxExecutors=20
--conf
spark.executor.cores=8
--conf
spark.executor.instances=20
--conf
spark.executor.memory=8g
--conf
spark.yarn.executor.memoryOverhead=8g
--conf
spark.shuffle.service.enabled=true
--conf
spark.executorEnv.PYTHONHASHSEED=0
--conf
spark.home={some_dir}/spark2-client
--conf
spark.sql.catalogImplementation=hive
--conf
spark.yarn.appMasterEnv.PYTHONHASHSEED=0
--conf
spark.master=yarn
--conf
spark.submit.deployMode=cluster
--conf
spark.files={some_dir}/spark2-client/conf/hive-site.xml
test_logging.py
问题是只有最终的日志语句(警告)出现在spark stdout日志中。我的理解from here是spark.sparkContext.setLogLevel("DEBUG")
行应该允许调试级语句出现,但它似乎不起作用。
如何使调试级别和信息级别的日志语句也显示出来?
更新
通过设置以下内容,可以显示那些调试和信息日志语句:
logging.basicConfig(level=logging.DEBUG)
我仍然不完全确定为什么修改根记录器的级别有效,而我最初尝试的方法不起作用。我也不明白为什么以下不起作用:
logger.setLevel(logging.DEBUG)
非常感谢任何解释!