2016-07-22 22 views
0

私はSparkディストリビューション(v1.6.2)の例から始めます。私は自分自身の "Hello World"の例を追加しました。サードパーティの依存関係(com.google.cloud:gcloud-java-nio:0.2.5)を使用して何かを追加しようとすると、ここに何が起こるかです:依存関係を追加するときにSpark/Java NoClassDefFoundError

16/07/22 13:05:26 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[Executor task launch worker-7,5,main] java.lang.NoClassDefFoundError: org/spark-project/guava/base/MoreObjects at com.google.cloud.ServiceOptions.activeGoogleCloudConfig(ServiceOptions.java:282) at com.google.cloud.ServiceOptions.googleCloudProjectId(ServiceOptions.java:294) at com.google.cloud.ServiceOptions.defaultProject(ServiceOptions.java:270) at com.google.cloud.ServiceOptions.(ServiceOptions.java:206) at com.google.cloud.HttpServiceOptions.(HttpServiceOptions.java:153) at com.google.cloud.storage.StorageOptions.(StorageOptions.java:69) (...)

次のように私は私のコードを実行:

spark-1.6.2$ mvn -DskipTests clean package 
(lots of time passes...) 
spark-1.6.2$ ./bin/run-example JavaGcsTest 

そして、私はexamples/pom.xmlにこれらの行を追加した依存関係を追加するには:それは根本的な原因のように見えます

<dependency> 
    <groupId>com.google.cloud</groupId> 
    <artifactId>gcloud-java-nio</artifactId> 
<version>0.2.5</version> 
</dependency> 

は、両方のgcloud-javaの-NiO及びスパークはグアバに依存していることで、おそらく彼らは別のバージョンに依存それの。

私は関連する質問を見て、答えは太った瓶を作ることを示唆しています。私はここでこれをどのように適用するのかは分かりませんが、例はすでに脂肪の入った瓶に束ねられています(examples/target/scala-2.10/spark-examples-1.6.2-hadoop2.2.0.jar)。

私は使用していたguavaのバージョンを14から19(最新)に変更しようとしましたが、もちろんコンパイルに失敗しました(SparkEnv.scala:84:MapMakerクラスのメソッドsoftValuesはcom .google.common.collect.MapMaker)。

このサードパーティのライブラリで動作するようにSparkを取得する方法についてのアドバイスをお寄せください。

答えて

0

この問題を回避するには、サードパーティライブラリの影付きバージョンをコンパイルし、そのjarを依存関係として使用します。

gcloud-java-nioの場合、プロジェクトにはすでに影付きのjarターゲットが含まれていますので、mvn packageを実行した後はtarget/gcloud-java-nio-0.2.7-SNAPSHOT-shaded.jarになります。

関連する問題