代码之家  ›  专栏  ›  技术社区  ›  Eduardo Reis

PySpark的log4j.properties放在哪里?[副本]

  •  0
  • Eduardo Reis  · 技术社区  · 7 年前

    我使用AWS EC2指南安装了Spark,我可以使用 bin/pyspark 脚本可以到达spark提示符,也可以成功地完成快速启动。

    然而,我一辈子都想不出如何停止所有的冗长 INFO 在每个命令之后记录。

    我已经在下面的代码中尝试了几乎所有可能的场景(注释,设置为OFF) log4j.properties 文件在 conf 文件夹,在该文件夹中,我从每个节点以及在每个节点上启动应用程序,但没有执行任何操作。我还有日志 信息 执行每个语句后打印语句。

    我很不明白这是怎么回事。

    #Set everything to be logged to the console log4j.rootCategory=INFO, console                                                                        
    log4j.appender.console=org.apache.log4j.ConsoleAppender 
    log4j.appender.console.target=System.err     
    log4j.appender.console.layout=org.apache.log4j.PatternLayout 
    log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
    
    # Settings to quiet third party logs that are too verbose
    log4j.logger.org.eclipse.jetty=WARN
    log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
    log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
    

    这是我使用 SPARK_PRINT_LAUNCH_COMMAND :

    火花指令: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/Java -/cp/root/spark-1.0.1-bin-hadoop2/conf/root/spark-1.0.1-bin-hadoop2/lib/spark-assembl1.0.1-hadoop2.2.0.0.jar/root/spark-1.0.1-bin-hadoop2/lib/datanucleus-api-jdo-3.2.1.1.jar/root/spark-1.0.1-bin-hadoop2.0.1.0.1-bin-hadoop2.0.1.0.0.1.1-bin-hadoop2.1.0.0.1.0.1.0.1.1-bin-hadoop2/lib/hado-bin-hadoop2/lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m-Djava.library.path=-Xms512m-xmx51m org.apache.spark.deploy.SparkSubmit spark shell——类 org.apache.spark.repl.Main网站

    内容 spark-env.sh :

    #!/usr/bin/env bash
    
    # This file is sourced when running various Spark programs.
    # Copy it as spark-env.sh and edit that to configure Spark for your site.
    
    # Options read when launching programs locally with 
    # ./bin/run-example or ./bin/spark-submit
    # - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
    # - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
    # - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
    # - SPARK_CLASSPATH=/root/spark-1.0.1-bin-hadoop2/conf/
    
    # Options read by executors and drivers running inside the cluster
    # - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
    # - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
    # - SPARK_CLASSPATH, default classpath entries to append
    # - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
    # - MESOS_NATIVE_LIBRARY, to point to your libmesos.so if you use Mesos
    
    # Options read in YARN client mode
    # - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
    # - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
    # - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
    # - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
    # - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
    # - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
    # - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
    # - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
    # - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.
    
    # Options for the daemons used in the standalone deploy mode:
    # - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
    # - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
    # - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
    # - SPARK_WORKER_CORES, to set the number of cores to use on this machine
    # - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
    # - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
    # - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
    # - SPARK_WORKER_DIR, to set the working directory of worker processes
    # - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
    # - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
    # - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
    # - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers
    
    export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
    
    0 回复  |  直到 7 年前
        1
  •  150
  •   gsamaras a Data Head    9 年前

    只需在spark目录中执行以下命令:

    cp conf/log4j.properties.template conf/log4j.properties
    

    编辑log4j.properties:

    # Set everything to be logged to the console
    log4j.rootCategory=INFO, console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.target=System.err
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
    
    # Settings to quiet third party logs that are too verbose
    log4j.logger.org.eclipse.jetty=WARN
    log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
    log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
    log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
    

    在第一行替换:

    log4j.rootCategory=INFO, console
    

    签署人:

    log4j.rootCategory=WARN, console
    

    保存并重新启动shell。它适用于我在OSX上的Spark1.1.0和Spark1.5.1。

        2
  •  50
  •   sam    6 年前

    受pyspark/tests.py的启发

    def quiet_logs(sc):
        logger = sc._jvm.org.apache.log4j
        logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
        logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )
    

    在创建SparkContext之后调用它,将我的测试记录的stderr行从2647减少到163。但是,创建SparkContext本身会记录163,最多

    15/08/25 10:14:16 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0
    

    我也不清楚如何通过编程来调整这些。

        3
  •  34
  •   AkhlD    11 年前

    编辑conf/log4j.properties文件并更改以下行:

       log4j.rootCategory=INFO, console
    

        log4j.rootCategory=ERROR, console
    

    另一种方法是:

    点燃火花外壳并键入以下内容:

    import org.apache.log4j.Logger
    import org.apache.log4j.Level
    
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("akka").setLevel(Level.OFF)
    

    之后你就看不到任何日志了。

        4
  •  32
  •   wannik    10 年前
    >>> log4j = sc._jvm.org.apache.log4j
    >>> log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)
    
        5
  •  26
  •   mdh    9 年前

    在Spark 2.0中,您还可以使用 setLogLevel :

        from pyspark.sql import SparkSession
        spark = SparkSession.builder.\
            master('local').\
            appName('foo').\
            getOrCreate()
        spark.sparkContext.setLogLevel('WARN')
    

    皮斯帕克 控制台,默认设置 spark 会话已可用。

        6
  •  26
  •   Galen Long    7 年前

    对于PySpark,还可以使用 sc.setLogLevel("FATAL") . 从 docs :

    控制我们的日志级别。这将覆盖任何用户定义的日志设置。有效的日志级别包括:ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE、WARN

        7
  •  13
  •   Josh Rosen    11 年前

    这可能是由于Spark是如何计算类路径的。我的预感是Hadoop的 log4j.properties 文件出现在类路径上Spark的前面,阻止更改生效。

    如果你跑

    SPARK_PRINT_LAUNCH_COMMAND=1 bin/spark-shell
    

    然后Spark将打印用于启动shell的完整类路径;在我的例子中,我看到

    Spark Command: /usr/lib/jvm/java/bin/java -cp :::/root/ephemeral-hdfs/conf:/root/spark/conf:/root/spark/lib/spark-assembly-1.0.0-hadoop1.0.4.jar:/root/spark/lib/datanucleus-api-jdo-3.2.1.jar:/root/spark/lib/datanucleus-core-3.2.2.jar:/root/spark/lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m -Djava.library.path=:/root/ephemeral-hdfs/lib/native/ -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark.repl.Main
    

    哪里 /root/ephemeral-hdfs/conf 在类路径的开头。

    我打开了 an issue [SPARK-2913] 在下一个版本中修复这个问题(我应该很快就有补丁了)。

    同时,这里有几个解决方法:

    • 添加 export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf" spark-env.sh .
    • 删除(或重命名) /root/ephemeral-hdfs/conf/log4j.properties .
        8
  •  12
  •   USB user3361145    7 年前

    你可以使用setLogLevel

    val spark = SparkSession
          .builder()
          .config("spark.master", "local[1]")
          .appName("TestLog")
          .getOrCreate()
    
    spark.sparkContext.setLogLevel("WARN")
    
        9
  •  8
  •   Ani Menon    8 年前

    火花1.6.2:

    log4j = sc._jvm.org.apache.log4j
    log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)
    

    火花2.x:

    spark.sparkContext.setLogLevel('WARN')
    

    (火花就是火花)

    或者旧方法,

    重命名 conf/log4j.properties.template conf/log4j.properties 在星火方向。

    log4j.properties ,更改 log4j.rootCategory=INFO, console log4j.rootCategory=WARN, console

    可用的不同日志级别:

    • 关闭(最具体,无日志记录)
    • 致命的(最具体的,很少的数据)
    • 错误-仅在出现错误时记录
    • 警告-仅在出现警告或错误时记录
    • 信息(默认)
    • 调试-日志详细信息步骤(以及上述所有日志)
    • 跟踪(最不具体,大量数据)
    • 全部(最不具体的,所有数据)
        10
  •  5
  •   oleksii    11 年前

    我在Amazon EC2中使用了这个,其中有1个主服务器和2个从服务器,还有Spark 1.2.1。

    # Step 1. Change config file on the master node
    nano /root/ephemeral-hdfs/conf/log4j.properties
    
    # Before
    hadoop.root.logger=INFO,console
    # After
    hadoop.root.logger=WARN,console
    
    # Step 2. Replicate this change to slaves
    ~/spark-ec2/copy-dir /root/ephemeral-hdfs/conf/
    
        11
  •  4
  •   Gaurav Adurkar    8 年前

    只需在spark submit命令中添加以下参数

    --conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"
    

    这将临时覆盖该作业的系统值。从log4j.properties文件中检查确切的属性名(这里是log4jspark.root.logger)。

    希望这有帮助,干杯!

        12
  •  2
  •   Ram Ghadiyaram    7 年前

    下面是scala用户的代码片段:

    选项1:

    下面是您可以在文件级别添加的代码段

    import org.apache.log4j.{Level, Logger}
    Logger.getLogger("org").setLevel(Level.WARN)
    

    选择2:

    注:适用于所有正在使用的应用程序 火花会议。

    import org.apache.spark.sql.SparkSession
    
      private[this] implicit val spark = SparkSession.builder().master("local[*]").getOrCreate()
    
    spark.sparkContext.setLogLevel("WARN")
    

    选择3:

    注意:此配置应添加到log4j.properties。。(可能类似于/etc/spark/conf/log4j.properties(安装了spark的地方)或项目文件夹级别的log4j.properties) 因为你是在模块级改变。这将适用于所有的申请。

    log4j.rootCategory=ERROR, console
    

    嗯,选项1是明智的方法,因为它可以在文件级关闭。

        13
  •  1
  •   user3827333    10 年前

    我的做法是:

    在我运行的位置 spark-submit 脚本do

    $ cp /etc/spark/conf/log4j.properties .
    $ nano log4j.properties
    

    改变 INFO 到你想要的日志级别,然后运行 spark提交

        14
  •  1
  •   loneStar    7 年前

    程序化方式

    spark.sparkContext.setLogLevel("WARN")
    

    可用选项

    ERROR
    WARN 
    INFO 
    
        15
  •  0
  •   santifinland    10 年前

    如果您想继续使用日志记录(Python的日志记录工具),可以尝试分割应用程序和Spark的配置:

    LoggerManager()
    logger = logging.getLogger(__name__)
    loggerSpark = logging.getLogger('py4j')
    loggerSpark.setLevel('WARNING')
    
    推荐文章