2016-05-09 3 views
3

だから、インデックスレコードをエラスティックにするコードがある。このコードはsparkとhadoopで動作しています。 Elasticsearchを2.3.1にアップグレードしました。 私はローカルマシン上で自分のコードを実行しているときにうまくいきます。 私は仕事を提出火花でそれを実行しようとしているときに、私のpom.xmlに私はちょうどスパークジョブでElasticSearchを使用しているときにguava jarの競合が発生する

を置くので、私はグーグルを検索した後

java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

を取得しています、私は、問題はグアバであり実現

com.google.guava guava 19.0 従属管理下。

でもエラーが発生するので、spark(1.6)もグアバの古いバージョンを使用していると思いますが、どこでどのように解決するのか見つけられません... 私も新しいジャーを作ろうとしましたこれはelastic search 2.3.1 + com.google.commonを陰にして使用しますが、動作しませんでした。

+1

スパーク1.6は、グアバ14.0.1を使用しています。そのブログの投稿をチェックアウトしてください:https://www.elastic.co/blog/to-shade-or-not-to-shade – alpert

+0

'pom.xml 'のguava' 18.0'を使って解決できます – avr

答えて

1

問題はelasticsearchとsparkの両方でguavaを使用しますが、異なるバージョンを使用します:esは18.0を使用し、sparkは14.0を使用します。

だからあなたのpom.xmlにあなたは火花が使用している古いバージョン除外しようとすることができます:

<dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core</artifactId> 
     <version>1.6.0</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.google.guava</groupId> 
       <artifactId>guava</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

か、そのブログの記事に記載された方法を使用しています:https://www.elastic.co/blog/to-shade-or-not-to-shade

+0

シェーディング部分は役に立つ、thx –

-1

を私はまったく同じ問題を抱えていました私はこれを "--addJars"プロパティに "guava-16.0.1.jar"を追加して設定して解決することができました。 sparkConf.set( "spark.driver.extraClassPath"、 "guava-16.0.1.jar" ); "spark.driver.extraClassPath"エントリがドライバのクラスパスの前に追加されるため、アップロードされたguava.jarはhadoopのguava.jarより優先されます。

SparkConf sparkConf = new SparkConf().setAppName("YarnResource").setMaster("yarn-cluster").set("spark.driver.extraClassPath", "guava-16.0.1.jar"); 

List<String> argList = new ArrayList<>(); 
int argIndex = 0; 
argList.add(argIndex++, "--addJars"); 
argList.add(argIndex++, "/home/myuser/myapp/lib/guava-16.0.1.jar"); 
String[] sparkArgArray = argList.toArray(new String[argList.size()]); 
ClientArguments cArgs = new ClientArguments(sparkArgArray, sparkConf); 
// create an instance of yarn Client client 
Client client = new Client(cArgs, hadoopConfig, sparkConf); 
0

使用火花提出オプション:

spark-submit --jars path_to/guava-18.0.jar,.. \ 
--conf spark.driver.extraClassPath=guava-18.0.jar \ 
--conf spark.executor.extraClassPath=guava-18.0.jar \ 
... 
関連する問題