使用Spark分析Twitter数据流出错,求Scala过滤热门标签解决方法
解决Scala+Spark处理Twitter数据流时的日志与SLF4J绑定问题
嗨,咱们来一步步解决你用Scala+Spark处理Twitter话题标签数据流时遇到的这两个问题:
1. 处理Spark默认日志提示并调整日志级别
你看到的Spark日志配置提示是正常的初始化信息,只是告诉你当前用的是默认日志配置,你可以按需调整:
- 临时代码内调整:在初始化SparkContext之后,直接调用
sc.setLogLevel()设置你需要的级别。比如想只看ERROR级别的日志,代码示例如下:
import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.streaming.twitter.TwitterUtils import org.apache.spark.streaming.{Seconds, StreamingContext} object TwitterHashtagProcessor { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("HotHashtagFilter").setMaster("local[*]") val sc = new SparkContext(conf) // 设置日志级别为ERROR,过滤掉无关的WARN/INFO日志 sc.setLogLevel("ERROR") val ssc = new StreamingContext(sc, Seconds(10)) // 你的Twitter流初始化、话题标签过滤逻辑... ssc.start() ssc.awaitTermination() } }
- 永久配置日志:如果不想每次在代码里设置,可以在项目的
src/main/resources目录下创建log4j.properties文件,自定义日志规则。比如简单的控制台输出配置:
log4j.rootLogger=ERROR, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Spark启动时会优先加载这个自定义配置,覆盖默认的log4j-defaults.properties。
2. 解决SLF4J多绑定冲突
你遇到的SLF4J: Found binding in [jar:file:/C:/Users/begna/Desktop/Desktop/jar_files%20...]是类路径冲突问题——你的项目依赖/本地JAR包里同时存在多个SLF4J的实现绑定(比如slf4j-log4j12.jar、slf4j-simple.jar这类),SLF4J不知道该用哪一个,所以抛出警告。解决方法分两种场景:
- 如果用SBT管理依赖:检查你的
build.sbt,找到传递依赖中引入的多余SLF4J绑定,用exclude排除。比如Spark Streaming Twitter依赖可能会引入重复的绑定,修改依赖如下(替换成你实际使用的Spark版本):
libraryDependencies += "org.apache.spark" %% "spark-streaming-twitter" % "1.6.3" exclude("org.slf4j", "slf4j-log4j12")
- 如果是本地手动添加JAR包:打开
C:/Users/begna/Desktop/Desktop/jar_files目录,找出所有带slf4j字样的JAR文件,只保留一个绑定实现即可。推荐保留和Spark默认一致的slf4j-log4j12系列JAR,删掉其他的(比如slf4j-simple.jar)。
修改完成后重新运行程序,SLF4J的多绑定警告就会消失啦。
内容的提问来源于stack exchange,提问作者begna Dejene
相关产品推荐
相关产品推荐

