【问题标题】:Streaming Spark Exception in thread "main"线程“main”中的流式 Spark 异常
【发布时间】:2017-08-25 18:42:11
【问题描述】:

我正在尝试使用 spark 和 scala 使用 sbt 流式传输 twitter 数据,一切顺利,但我有一个问题:

这是我的 buld.sbt:

import Assembly._
import AssemblyPlugin._

name := "TwitterSparkStreaming"
version := "0.1"
scalaVersion := "2.12.3"

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "1.5.2",
  "org.apache.spark" % "spark-sql_2.11" % "1.5.2",
  "org.apache.spark" % "spark-streaming_2.11" % "1.5.2",
  "org.apache.spark" % "spark-streaming-twitter_2.11" % "1.6.3",
  "joda-time" %% "joda-time" % "2.9.1",
  "org.twitter4j" % "twitter4j-core" % "3.0.3",
  "org.twitter4j" % "twitter4j-stream" % "3.0.3",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.5.2",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.5.2" classifier "models"
)

resolvers += "Akka Repository" at "http://repo.akka.io./releases/"

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

这是包含 org.apache.spark.Logging 的类:

import org.apache.log4j.{Logger, Level}
import org.apache.spark.Logging

object LogUtils extends Logging{
  def setStreamingLogLevels(): Unit ={
    val log4jInitialized = Logger.getRootLogger.getAllAppenders.hasMoreElements
    if(!log4jInitialized)
    {
      logInfo("Setting log level to [WARN] for streaming example." + " To override add a custom log4j.properties to the classpath.")
      Logger.getRootLogger.setLevel(Level.WARN)
    }
  }
}

这是我一直出现的错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.Logging.$init$(Lorg/apache/spark/Logging;)V
    at LogUtils$.<init>(LogUtils.scala:4)
    at LogUtils$.<clinit>(LogUtils.scala)
    at TwitterStreaming$.main(TwitterStreaming.scala:30)
    at TwitterStreaming.main(TwitterStreaming.scala)

我可以知道如何解决它吗?

注意:我尝试将 org.apache.spark 依赖项从版本 2.2.0 更改为 1.5.2 但问题是一样的

【问题讨论】:

标签: java scala apache-spark streaming


【解决方案1】:

我不确定为什么这段代码会出错。但是在 Spark 中设置日志级别有更好的方法。

请参考链接https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#setLogLevel-java.lang.String-

Spark 有 sparkContext 级别的方法,所以你可以直接调用,

sparkContext.setLogLevel("WARN")

【讨论】:

  • 我只是用 1.5.2 版重新安装了 spark 就可以了,非常感谢
  • @AmaniAlFarasani 没问题,如果有用请点赞。
猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多