运行spark-shell 出现警告处理

本文记录了解决Spark启动时出现的SLF4J多重绑定警告及无法加载本地Hadoop库的问题。通过设置环境变量LD_LIBRARY_PATH引入Hadoop本地库路径,成功消除了启动警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[root@master spark-2.3.3]# bin/spark-shell 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/spark-2.3.3/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2019-07-16 14:12:01 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://master:4040
Spark context available as 'sc' (master = local[*], app id = local-1563257537155).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.3
      /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_211)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

 

 

 

vi ~/.bash_profile

增加

export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH

source  ~/.bash_profile

 

再次

[root@master spark-2.3.3]# bin/spark-shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/software/spark-2.3.3/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/software/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://master:4040
Spark context available as 'sc' (master = local[*], app id = local-1563259822556).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.3
      /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_211)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

 

无警告

<think>好的,我现在需要回答用户关于如何修改Spark默认日志级别的问题。用户提到当前默认是WARN,想改为其他级别。根据提供的引用内容,我需要整理几种方法,并确保引用正确。 首先,用户可能是在不同的环境中使用Spark,比如本地开发、集群提交任务或者在IDE中运行。不同的环境可能需要不同的配置方法。根据引用[1]、[3]、[4]、[5],Spark提供了几种设置日志级别的方式,包括修改配置文件、在代码中配置、使用spark-submit参数或者在IDE中设置。 第一个方法是修改spark-defaults.conf文件,如引用[1]所示。用户需要到配置文件的位置,通常是Spark的conf目录下,添加相关配置项。例如,设置根日志级别和特定包的级别。但要注意,这种方法需要权限修改集群的配置文件,可能在生产环境中不可行。 第二个方法是通过log4j.properties文件配置,如引用[3]和[4]提到的。用户需要创建一个log4j.properties文件,指定日志级别,然后在spark-submit时通过--conf参数指定该文件的位置。这在集群环境下可能更灵活,特别是当用户无法修改集群默认配置时。 第三种方法是在代码中设置日志级别,例如使用SparkContext.setLogLevel方法。但引用[4]提到有时在代码中设置可能不生效,需要检查是否有其他配置覆盖了代码设置。这可能是因为日志系统初始化顺序的问题,或者框架自身的日志配置优先级更高。 第四种方法是在spark-submit命令中直接通过参数设置,如引用[4]和[5]所示。用户可以使用--conf参数传递Java选项,指定日志配置文件或直接设置系统属性。这对于调试或临时更改非常有用,不需要修改配置文件。 此外,引用[5]提到在yarn-client模式下的注意事项,可能需要将配置文件分发到集群,或者在启动应用时指定路径。用户需要根据具体的部署模式调整配置方式。 总结这些方法后,应该分点列出每种方法的步骤,并注明适用场景和注意事项。同时需要提醒用户不同Spark版本可能存在的差异,以及配置的优先级问题,例如代码中的设置可能覆盖配置文件中的设置。最后,可以建议用户根据实际环境选择最适合的方法,并测试验证是否生效。</think>在Spark中修改默认日志级别从WARN调整为其他级别,可通过以下方法实现: --- ### 一、通过配置文件修改(推荐长期使用) 1. **修改`log4j.properties`文件** - 定位Spark的配置文件目录:`$SPARK_HOME/conf/` - 编辑或创建`log4j.properties`,设置根日志级别为`ERROR`或其他目标级别: ```properties log4j.rootCategory=ERROR, console # 关闭特定包的日志(例如Spark核心包) log4j.logger.org.apache.spark=OFF ``` - 重启Spark服务使配置生效[^3][^4]。 2. **修改`spark-defaults.conf`** - 添加以下配置项: ```properties spark.root.log.level=ERROR spark.log.level.org.apache.spark=WARN ``` 此方法适用于全局配置[^1]。 --- ### 二、通过命令行参数临时修改(适用于调试) 在`spark-submit`提交任务时添加参数: ```bash spark-submit \ --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j.properties" \ --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j.properties" \ your_application.py ``` 需提前准备自定义的`log4j.properties`文件[^5]。 --- ### 三、在代码中动态设置(仅限特定场景) 在Spark应用程序初始化时添加: ```python from pyspark import SparkContext sc = SparkContext() sc.setLogLevel("ERROR") # 可选级别:OFF, FATAL, ERROR, WARN, INFO, DEBUG ``` 注意:此方法可能因框架初始化顺序导致部分日志未被覆盖。 --- ### 四、IDE中设置(本地开发) 1. **IDEA/Eclipse配置** -运行配置的VM参数中添加: ``` -Dlog4j.configuration=file:/path/to/log4j.properties ``` - 或直接设置系统属性: ```java System.setProperty("log4j.configuration", "file:/path/to/log4j.properties"); ``` --- ### 注意事项 - **优先级问题**:命令行参数 > 代码设置 > 配置文件[^4]。 - **YARN模式**:在集群模式下需将`log4j.properties`分发到所有节点[^5]。 - **日志级别范围**:从低到高为`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值