Apache spark SparkContext.setLogLevel(“调试”)不';t在集群中工作

Apache spark SparkContext.setLogLevel(“调试”)不';t在集群中工作,apache-spark,log4j,pyspark,spark-streaming,rdd,Apache Spark,Log4j,Pyspark,Spark Streaming,Rdd,我正试图控制我的火花日志使用 sc.setLogLevel(“错误”); 看起来它在集群环境中不起作用。有人能帮忙吗 public static JavaSparkContext getSparkContext(String appName, SparkConf conf) { SparkSession spark = getSparkSession(appName, conf); JavaSparkContext sc = new JavaSparkContext(spark.

我正试图控制我的火花日志使用 sc.setLogLevel(“错误”); 看起来它在集群环境中不起作用。有人能帮忙吗

public static JavaSparkContext getSparkContext(String appName, SparkConf conf) {
    SparkSession spark = getSparkSession(appName, conf);
    JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
    sc.setLogLevel("WARN");
    return sc;
}

要配置日志级别,请向spark submit命令添加以下选项:

'--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=custom-log4j.properties"'

'--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=custom-log4j.properties"'

这假设类路径上有一个名为custom-log4j.properties的文件。然后,这个log4j可以控制spark日志的详细程度。

是否有任何解决方案只处理我的逻辑代码部分中的日志?我不想附加配置文件并提交脚本。当您更改驱动程序上的日志级别时,执行器将无法反映这些更改。执行如下操作:
sc.parallelize(Seq(“”).foreachPartition(x=>{import org.apache.log4j.{LogManager,Level}import org.apache.commons.logging.LogFactory LogManager.getRootLogger().setLevel(Level.DEBUG)val log=LogFactory.getLog(“EXECUTOR-log:”)log.DEBUG(“START EXECUTOR DEBUG log Level”))
您可以参考以下详细信息:谢谢,听起来很有趣,我现在可以试试。但在java中,如何在foreachpartition“import org.apache.log4j.Logger;import org.apache.log4j.Level;”中导入这些内容?只需创建Logger对象并在驱动程序级别导入类。执行者为你做这件事。如果你觉得有用,请投票。