2016-08-25 21 views
1

datastax cassandraコネクタで動作するようにspark 2.0シェルを構成しました。

spark-shell --packages datastax:spark-cassandra-connector:2.0.0-M1-35-s_2.11 

このエラー java.lang.NoClassDefFoundErrorの取得このライン

println(table.count) 

でシェル

sc.stop 
import org.apache.spark 
import org.apache.spark._ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.sql.cassandra 
import org.apache.spark.sql.cassandra._ 
import com.datastax.spark 
import com.datastax.spark._ 
import com.datastax.spark.connector 
import com.datastax.spark.connector._ 
import com.datastax.spark.connector.cql 
import com.datastax.spark.connector.cql._ 
import com.datastax.spark.connector.cql.CassandraConnector 
import com.datastax.spark.connector.cql.CassandraConnector._ 

val conf = new SparkConf(true).set("spark.cassandra.connection.host", "dbserver") 
conf.set("spark.cores.max", "1") 

val sc = new SparkContext("spark://localhost:7077", "test", conf) 
val table = sc.cassandraTable("blackwell", "users") 
println(table.count) 

にこのスニペットを実行している場合:Scalaの/コレクション/ GenTraversableOnceの$クラス

[Stage 0:>               (0 + 2)/6] 
16/08/25 11:59:38 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 0.0.0.0): 
java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class 
at com.datastax.spark.connector.util.CountingIterator.<init>(CountingIterator.scala:4) 
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.compute(CassandraTableScanRDD.scala:336) 
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 
at org.apache.spark.scheduler.Task.run(Task.scala:85) 
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: scala.collection.GenTraversableOnce$class 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

誰もこの問題を見ていますか?

+0

あなたはScalaの2.10または2.11でスパークを実行しますか? –

+0

私はScala 2.10.4をサーバーにインストールしましたが、ここではシェルに表示されています。 Scalaバージョン2.11.8の使用(OpenJDK 64ビットサーバーVM、Java 1.8.0_91)。 sparkで使用されているバージョンを変更するにはどうすればよいですか? – user896993

+0

1.5.1は、このスカラ不一致エラーを超えても、spark 2.0と互換性がありません。 – RussS

答えて

1

私はついにこれを手に入れました。 私は参考のために要点を追加しました。ここで

https://gist.github.com/ghafran/19d0067d88dc074413422d4cae4cc344

スクリプト全体です:

# install java 
sudo apt-get update -y 
sudo apt-get install software-properties-common -y 
sudo add-apt-repository -y ppa:openjdk-r/ppa 
sudo apt-get install wget -y 
sudo apt-get install openjdk-8-jdk -y 
sudo apt-get update -y 

# make serve directory 
sudo mkdir -p /srv 
cd /srv 

# install scala 2.11 
sudo wget http://downloads.lightbend.com/scala/2.11.7/scala-2.11.7.deb 
sudo dpkg -i scala-2.11.7.deb 

# get spark 2.0 
sudo wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.0-bin-hadoop2.7.tgz 
sudo tar -zxf spark-2.0.0-bin-hadoop2.7.tgz 
sudo mv spark-2.0.0-bin-hadoop2.7 spark 

# build spark cassandra connector 
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list 
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823 
sudo apt-get install apt-transport-https -y 
sudo apt-get update -y 
sudo apt-get install sbt -y 
git clone https://github.com/datastax/spark-cassandra-connector.git 
cd spark-cassandra-connector 
git checkout v2.0.0-M2 
sudo sbt assembly -Dscala-2.11=true 

# move spark cassandra connector to spark jar directory 
find . -iname "*.jar" -type f -exec /bin/cp {} /srv/spark/jars/ \; 

# start master 
/srv/spark/sbin/start-master.sh --host 0.0.0.0 

# start slave 
/srv/spark/sbin/start-slave.sh --host 0.0.0.0 spark://localhost:7077 

# start shell 
/srv/spark/sbin/spark-shell --driver-class-path $(echo /srv/spark/jars/*.jar |sed 's/ /:/g') 

# test 
sc.stop 
import org.apache.spark 
import org.apache.spark._ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.sql.cassandra 
import org.apache.spark.sql.cassandra._ 
import com.datastax.spark 
import com.datastax.spark._ 
import com.datastax.spark.connector 
import com.datastax.spark.connector._ 
import com.datastax.spark.connector.cql 
import com.datastax.spark.connector.cql._ 
import com.datastax.spark.connector.cql.CassandraConnector 
import com.datastax.spark.connector.cql.CassandraConnector._ 

val conf = new SparkConf(true).set("spark.cassandra.connection.host", "cassandraserver") 
val sc = new SparkContext("spark://localhost:7077", "test", conf) 
val table = sc.cassandraTable("keyspace", "users") 
println(table.count) 
+0

Thanks @ user896993このような詳細なソリューションを提供しています。 – Sun

0

Spark 2.0はScala 2.11を使用しています。

私はコメントを入れることができない

ので、この答えは、追加の質問に回答した後に編集されます:)

私はあなたのコンピュータに位置火花シェルを実行していることを前提としています。あなたは、コマンド(スパーク、システムのシェルではなく)シェルで実行してくださいすることができます

scala -version 

また、「スパーク:// localhostを:7077」あなたが立ち上げたスパークスタンドアロンを持っているように、URLには見えます。そのSparkディストリビューションがScala 2.11でビルドされているか確認してください。

私の意見では、spark-shellの--masterパラメータを使う方が良いでしょう。

+0

スカラーコードランナーバージョン2.10.4 - Copyright 2002-2013、LAMP/EPFL – user896993

+0

それだけです!だからあなたはScala 2.10を持っています。 Pathシステム変数でScala 2.11へのパスを追加したかどうか確認してください。古いバージョンへのパスがあると思われるので、 –

関連する問題