質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Cassandra

Cassandraは、key-valueストア型のデータベース管理ソフト及び オープンソースの分散データベース管理システムのことです。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

Q&A

解決済

1回答

2698閲覧

Spark-submitについて

Yusei

総合スコア11

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Cassandra

Cassandraは、key-valueストア型のデータベース管理ソフト及び オープンソースの分散データベース管理システムのことです。

Spark

Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

0グッド

0クリップ

投稿2016/06/06 14:43

###前提・実現したいこと
今、ScalaとSparkとCassandraを組み合わせてAPIを設計しています。
その最中、spark-submitをしようとした際に問題が起こりました。

###発生している問題・エラーメッセージ

sbt assemblyを行って出来たjarファイルを用いて行った結果が以下になります。

% spark-submit --master spark://localhost:7077 target/scala-2.11/Test-assembly-1.0.jar Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.cassandra.CassandraSQLContext$$anon$1.TakeOrdered()Lorg/apache/spark/sql/execution/SparkStrategies$TakeOrdered$; at org.apache.spark.sql.cassandra.CassandraSQLContext$$anon$1.<init>(CassandraSQLContext.scala:90) at org.apache.spark.sql.cassandra.CassandraSQLContext.<init>(CassandraSQLContext.scala:85) at Test$.getData(AnalysisOfBeacon.scala:50) at Test$.main(AnalysisOfBeacon.scala:29) at Test.main(AnalysisOfBeacon.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

このような形になります。一方sbt packageを実行して出来たjarファイルで試すと

% spark-submit --master spark://localhost:7077 target/scala-2.11/test_2.11-1.0.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/cassandra/CassandraSQLContext at AnalysisOfBeacon$.getData(AnalysisOfBeacon.scala:50) at AnalysisOfBeacon$.main(AnalysisOfBeacon.scala:29) at AnalysisOfBeacon.main(AnalysisOfBeacon.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.cassandra.CassandraSQLContext at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 12 more

となります。
###該当のソースコード
build.sbtです

build.sbt

1lazy val root = (project in file(".")). 2 settings( 3 name := "Test", 4 version := "1.0", 5 scalaVersion := "2.11.7" 6 ) 7libraryDependencies ++= Seq( 8 "org.apache.spark" %% "spark-core" % "1.4.1", 9 "org.apache.spark" % "spark-streaming_2.11" % "1.4.1", 10 "com.datastax.spark" %% "spark-cassandra-connector" % "1.4.2", 11 "org.apache.spark" %% "spark-sql" % "1.4.1" 12) 13 14resolvers ++= Seq( 15 "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/", 16 "Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/" 17) 18 19mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 20 { 21 case PathList("netty", "handler", xs @ _*) => MergeStrategy.first 22 case PathList("netty", "buffer", xs @ _*) => MergeStrategy.first 23 case PathList("netty", "common", xs @ _*) => MergeStrategy.first 24 case PathList("netty", "transport", xs @ _*) => MergeStrategy.first 25 case PathList("netty", "codec", xs @ _*) => MergeStrategy.first 26 27 case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.first 28 case PathList(ps @ _*) if ps.last endsWith ".properties" => MergeStrategy.first 29 case PathList(ps @ _*) if ps.last endsWith ".xml" => MergeStrategy.first 30 case PathList(ps @ _*) if ps.last endsWith ".dtd" => MergeStrategy.first 31 case PathList(ps @ _*) if ps.last endsWith ".xsd" => MergeStrategy.first 32 case PathList(ps @ _*) if ps.last endsWith ".types" => MergeStrategy.first 33 case PathList(ps @ _*) if ps.last endsWith ".class" => MergeStrategy.first 34 case x => old(x) 35 } 36}

以下が実行コードになります。実務に関わるものなので、恐らく関わっているであろう部分についてのみ掲載させていただきます。

scala

1import org.apache.spark.{SparkConf,SparkContext} 2import org.apache.spark.streaming.{Time, Durations, Seconds, StreamingContext} 3import com.datastax.spark.connector 4import com.datastax.spark.connector._ 5import com.datastax.spark.connector.cql._ 6import org.apache.spark.sql.Row; 7import org.apache.spark.sql.cassandra.CassandraSQLContext 8object Test { 9 10 def main(args: Array[String]){ 11 12 val sc = new SparkConf().setAppName("Test")//.setMaster("local[*]").set("spark.cassandra.connection.host","127.0.0.1") 13 val sct = new SparkContext(sc); 14 val ssc = new StreamingContext(sct, Seconds(10)) 15 16 } 17}

###試したこと
バージョンによって

...TakeOrdered()...

というようなエラーが出たり(これはSpark 1.4.1まで)

...DataSourceStrategy...

というエラーに変わる事は観測しています。(Spark1.5.0~1.6.1)
1.4.1までのエラーは、Spark1.4.2で解決したと言っているissueを見かけたのですが、存在しないバージョンのようで解決の糸口になりませんでした。
また、このコードはsbt runでは正しく動作します。spark-submitの時にエラーが起きてしまうのです。

###補足情報(言語/FW/ツール等のバージョンなど)
scalaは2.11.7で統一
sbtは0.13.11
sparkやspark-sqlのバージョンなどは色々試しています。(1.3.1~1.6.1)

色々いたらない点があるとは思いますが、
解決のために必要な情報等ありましたら出せる範囲で出しますので宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

#解決方法

現状ですが、build.sbtにおいてScalaのバージョンを2.10系にしてsbt assemblyを行うと
上手く実行する事が出来ました
恐らく、Sparkが現状Scala2.10系を主にサポートしているのが原因かと思われます
もしScala2.11でも出来た方がいらっしゃいましたら是非やり方を教えて下さい

投稿2016/06/27 05:54

Yusei

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問