спарк 1.6 с аккой в ​​одном приложении - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над одним приложением, которое включает несколько заданий ETL, которые я пытаюсь реализовать с помощью spark 1.6.А также некоторый веб-сервер, который я реализовал с помощью akka http.Обе части работают отлично по отдельности, но когда я перемещаю его в одном приложении - спарк начинает сбой со следующим:

Exception in thread "main" java.lang.NoSuchMethodError: akka.actor.LocalActorRefProvider.log()Lakka/event/LoggingAdapter;
at akka.remote.RemoteActorRefProvider.<init>(RemoteActorRefProvider.scala:128)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$2.apply(ReflectiveDynamicAccess.scala:33)
at scala.util.Try$.apply(Try.scala:192)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:28)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(ReflectiveDynamicAccess.scala:39)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(ReflectiveDynamicAccess.scala:39)
at scala.util.Success.flatMap(Try.scala:231)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:39)
at akka.actor.ActorSystemImpl.liftedTree1$1(ActorSystem.scala:795)
at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:788)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:246)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:289)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:264)
at org.apache.spark.util.AkkaUtils$.org$apache$spark$util$AkkaUtils$$doCreateActorSystem(AkkaUtils.scala:121)
at org.apache.spark.util.AkkaUtils$$anonfun$1.apply(AkkaUtils.scala:53)
at org.apache.spark.util.AkkaUtils$$anonfun$1.apply(AkkaUtils.scala:52)
at org.apache.spark.util.Utils$$anonfun$startServiceOnPort$1.apply$mcVI$sp(Utils.scala:2024)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:160)
at org.apache.spark.util.Utils$.startServiceOnPort(Utils.scala:2015)
at org.apache.spark.util.AkkaUtils$.createActorSystem(AkkaUtils.scala:55)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:266)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:193)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:288)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:457)

Это мои зависимости:

"org.apache.spark" %% "spark-sql" % "1.6.2",
"org.apache.spark" %% "spark-hive" % "1.6.2",
"com.databricks" %% "spark-csv" % "1.5.0",
"com.typesafe.akka" %% "akka-actor" % "2.5.19",
"com.typesafe.akka" %% "akka-stream" % "2.5.19",
"com.typesafe.akka" %% "akka-http" % "10.1.3",
"com.typesafe.akka" %% "akka-http-spray-json" % "10.1.3"

Пример кода:

object AppStarter {  

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[4]")
    val sc = new SparkContext(conf) // FAIL happens here
  }

}

Я пытался поиграть с настройками akka-native версии, но это не помогло, но каждый раз у меня появлялись разные ошибки.Есть ли способ заставить spark игнорировать зависимости akka в той же области?

1 Ответ

0 голосов
/ 20 февраля 2019

похоже, что вы хотите использовать Spark Sql, для этого предпочитайте использовать SparkSession.builder

SparkSession.builder()
  .master("local[4]")
  .appName("Spark recommendation")
  .getOrCreate()

Вы можете посмотреть документацию здесь: https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.SparkSession

При этом вы можете передать больше параметров конфигурации, используя: .config("spark.executor.memory", "4g") например.

...