2017-08-20 16 views
4

Apache Zeppelin(0.7.2、Macでローカルに実行されているネットインストール)を使用してs3バケットから読み込まれたデータを探索しようとしています。データはコマンドとして、うまくロードするように思える:私はオブジェクトpのメソッドを呼び出すしようとすると、私はエラーを取得し、しかしApache Zeppelinはデータセットを逆シリアル化できません: "NoSuchMethodError"

p: org.apache.spark.sql.Dataset[String] = [value: string] 

val p = spark.read.textFile("s3a://sparkcookbook/person") 

は結果を与えます。中

p.take(1) 

結果:たとえば

java.lang.NoClassDefFoundError: Could not initialize class org.apache.spark.rdd.RDDOperationScope$ 
    at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:132) 
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113) 
    at org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:225) 
    at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:308) 
    at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38) 
    at org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1.apply(Dataset.scala:2371) 
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57) 
    at org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2765) 
    at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$execute$1(Dataset.scala:2370) 
    at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collect(Dataset.scala:2377) 
    at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2113) 
    at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2112) 
    at org.apache.spark.sql.Dataset.withTypedCallback(Dataset.scala:2795) 
    at org.apache.spark.sql.Dataset.head(Dataset.scala:2112) 
    at org.apache.spark.sql.Dataset.take(Dataset.scala:2327) 

conf/zeppelin-env.shは、私はアマゾンのアクセスキーとそこに定義された秘密鍵の環境変数を持っていることを除いて、デフォルトと同じです。

org.apache.hadoop:hadoop-aws:2.7.3 
com.amazonaws:aws-java-sdk:1.7.9  
com.fasterxml.jackson.core:jackson-core:2.9.0 
com.fasterxml.jackson.core:jackson-databind:2.9.0 
com.fasterxml.jackson.core:jackson-annotations:2.9.0 

(私は最初の2つだけが必要だと思う):ツェッペリンのノートブックでスパークインタプリタでは、私は以下の成果物が追加されました。上の2つのコマンドは、Zeppelinノートブックではなく、Sparkシェルでうまく動作します(設定方法についてはHow to use s3 with Apache spark 2.2 in the Spark shellを参照してください)。

したがって、Jacksonのライブラリのいずれかに問題があるようです。多分、私はツェッペリン通訳のために上記の間違った人工物を使用していますか?私のアーティファクトがあるので、

jackson-annotations-2.6.0.jar 
jackson-core-2.6.7.jar 
jackson-databind-2.6.7.jar 

そして、これらに成果物を置き換える:

UPDATE:以下の提案の回答でアドバイスに続いて、私はツェッペリン付属jackson jarファイルを削除し、次のようにそれらを置き換えます現在:

org.apache.hadoop:hadoop-aws:2.7.3 
com.amazonaws:aws-java-sdk:1.7.9  
com.fasterxml.jackson.core:jackson-core:2.6.7 
com.fasterxml.jackson.core:jackson-databind:2.6.7 
com.fasterxml.jackson.core:jackson-annotations:2.6.0 

ただし、上記のコマンドを実行するとエラーが発生します。

UDPATE2:jacksonライブラリをアーティファクトの一覧から削除しました。これはすでにjars/フォルダにあります。唯一追加されたアーティファクトは、上記のawsアーティファクトです。

val p = spark.read.textFile("s3a://sparkcookbook/person") 
p.take(1) 

p: org.apache.spark.sql.Dataset[String] = [value: string] 
java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class; 
    at com.fasterxml.jackson.module.scala.deser.NumberDeserializers$.<init>(ScalaNumberDeserializersModule.scala:49) 
    at com.fasterxml.jackson.module.scala.deser.NumberDeserializers$.<clinit>(ScalaNumberDeserializersModule.scala) 
    at com.fasterxml.jackson.module.scala.deser.ScalaNumberDeserializersModule$class.$init$(ScalaNumberDeserializersModule.scala:61) 
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.<init>(DefaultScalaModule.scala:20) 
    at com.fasterxml.jackson.module.scala.DefaultScalaModule$.<init>(DefaultScalaModule.scala:37) 
    at com.fasterxml.jackson.module.scala.DefaultScalaModule$.<clinit>(DefaultScalaModule.scala) 
    at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82) 
    at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala) 
    at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:132) 
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113) 
    at org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:225) 
    at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:308) 
    at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38) 
    at org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1.apply(Dataset.scala:2371) 
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57) 
    at org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2765) 

Update3と:私は今、別のエラーが出る

%spark.dep 
z.reset() 

:へのコメントで提案を1としての私は、ノートブック(instructionsごとなど)に次のように入力してクラスパスをきれいに

rm -rf local-repo/* 

私はその後、ツェッペリンサーバーを再起動:以下の提案の答えは、私は地元のレポ内のすべてのファイルを削除してクラスパスを掃除しました。クラスパスを確認するには、私は、ノートブックに次のように実行:

val cl = ClassLoader.getSystemClassLoader 
cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println) 

これは、次の出力(私はここで、出力からのみジャクソンライブラリが含まれ、それ以外の場合は出力が貼り付けるには長すぎる)を得た:

... 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-annotations-2.1.1.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-annotations-2.2.3.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-core-2.1.1.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-core-2.2.3.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-core-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-databind-2.1.1.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-databind-2.2.3.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-jaxrs-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-mapper-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/local-repo/2CT9CPAA9/jackson-xc-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/lib/jackson-annotations-2.6.0.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/lib/jackson-core-2.6.7.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/lib/jackson-databind-2.6.7.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/jackson-annotations-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/jackson-core-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/jackson-core-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/jackson-databind-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/zeppelin-0.7.2-bin-netinst/jackson-mapper-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-annotations-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-core-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-core-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-databind-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-jaxrs-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-mapper-asl-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-module-paranamer-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-module-scala_2.11-2.6.5.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/jackson-xc-1.9.13.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/json4s-jackson_2.11-3.2.11.jar 
file:/Users/shafiquejamal/allfiles/scala/spark/spark-2.1.0-bin-hadoop2.7/jars/parquet-jackson-1.8.1.jar 
... 

複数のバージョンがレポからフェッチされているようです。私は古いバージョンを除外すべきですか?もしそうなら、どうしたらいいですか?

+1

ツェッペリンの背後にリウィウスServerがどのようなスパークバージョンを使用していますか? –

+0

@ cricket_007:コマンド 'spark.version'は' res6:String = 2.1.0'を返します –

答えて

1

このjarバージョンを使用してください。このスクリプトのよう

AWS-javaの-SDK-1.7.4.jar

Hadoopの-AWS-2.6.0.jar

https://github.com/2dmitrypavlov/sparkDocker/blob/master/zeppelin.sh はパッケージを使用しますが、jarファイルをダウンロードし、それらを入れないでくださいパスの中で、 "/ root/jars /"と言って、あなたのzeppelin-env.shを編集してみましょう。 このコマンドをzeppelin/conf dirから実行します。

echo 'export SPARK_SUBMIT_OPTIONS = " - jars /root/jars/mysql-connector-java-5.1.39.jar,/root/jars/aws-java-sdk-1.7.4.jar,/root/ jars/hadoop-aws-2.6.0.jar "" >> zeppelin-env.sh

その後再起動するゼプリンは、

上記のリンクにあるコードは(念のリンクが古くなった)の下に貼り付けられます:

#!/bin/bash 
# Download jars 
cd /root/jars 
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar 

cd /usr/share/ 
wget http://archive.apache.org/dist/zeppelin/zeppelin-0.7.1/zeppelin-0.7.1-bin-all.tgz 
tar -zxvf zeppelin-0.7.1-bin-all.tgz 
cd zeppelin-0.7.1-bin-all/conf 
cp zeppelin-env.sh.template zeppelin-env.sh 
echo 'export MASTER=spark://'$MASTERZ':7077'>>zeppelin-env.sh 
echo 'export SPARK_SUBMIT_OPTIONS="--jars /root/jars/mysql-connector-java-5.1.39.jar,/root/jars/aws-java-sdk-1.7.4.jar,/root/jars/hadoop-aws-2.6.0.jar"'>>zeppelin-env.sh 
echo 'export ZEPPELIN_NOTEBOOK_STORAGE="org.apache.zeppelin.notebook.repo.VFSNotebookRepo, org.apache.zeppelin.notebook.repo.zeppelinhub.ZeppelinHubRepo"'>>zeppelin-env.sh 
echo 'export ZEPPELINHUB_API_ADDRESS="https://www.zeppelinhub.com"'>>zeppelin-env.sh 
echo 'export ZEPPELIN_PORT=9999'>>zeppelin-env.sh 
echo 'export SPARK_HOME=/usr/share/spark'>>zeppelin-env.sh 

cd ../bin/ 
./zeppelin.sh 
+0

これは多くのありがとう - それは動作します。注目すべき重要な点は、私が 'bin/zeppelin-daemon start'でZeppelinを起動する前に、あなたがリンクしているgithubスクリプトで、' bin/zeppelin.sh'でZeppelinを起動したことに気付きました。それは私の間違いだったかもしれません(ドキュメントはデーモンの使用を指示していますが)。 –

+0

はい、あなたはデーモンのスタートを使うことができます。 – Dima

+0

が問題になります。デーモンを使うとエラーが出ますが、 'zeppelin.sh'を使うとエラーになりません。 –

0

あなたはおそらく最近のジャクソン版を使用しています。火花2.3でさえ、まだ2.6.7です。ダウングレードして、すべてのジャックソンJARが一貫していることを確認してください。

+0

応答ありがとうございます。私はあなたが提案したものを試し、結果に私の質問を更新しました(エラーには違いはありませんでした)。私は正しくダウングレードしましたか? –

+1

Zeppelinのクラスパスをクリーンアップして、上位バージョンがなくなったことを確認する必要があるかもしれません。それはそれ自体で起こるはずですが、あなたは確かに検証したいかもしれません。また、これらの依存関係が既にSparkによって提供されているクラスパスに含まれているため、これらの依存関係の追加を完全に避けたいとします。これらのバージョンを明示的に指定しても意味がありません。これは将来の競合につながります。 –

+0

@Rick Moritz:ありがとう、私はあなたの提案を試みました(質問への更新を参照してください - クラスパスをきれいにしましたか?私は今、別のエラーを表示しています(上記参照)。 –

関連する問題