2016-05-01 12 views
0

すなわちspark-submit --master local[*]すべてがOK走る、私はGoogleクラウド上のスパークを使用していると私は、私はローカルで実行ElasticsearchデータベースGoogleクラウドスパークElasticSearchのtransportClient接続例外

import org.elasticsearch.action.search.SearchResponse; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 
import org.elasticsearch.index.query.QueryBuilders; 
import org.elasticsearch.search.SearchHit; 


public TransportClient openConnection(String ipAddress, int ipPort) throws UnknownHostException { 

    Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch").build(); 
    TransportClient client = TransportClient.builder().settings(settings).build(). 
      addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipAddress), ipPort)); 

    return client; 

} 

に接続するために、次のコードを持っています。私はGoogleクラウドスパーククラスタでそれを実行すると、私は次の例外を取得:

java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool 
at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:131) 
at javaTools.ElasticSearchConnection.openConnection(ElasticSearchConnection.java:24) 

最後呼ばれる方法(openConnection)は、上述の接続です。

コードは、sbt asssemblyを使用して作成されたfat jarを使用してGoogleクラウドにアップロードされるため、使用されるすべてのライブラリはネイティブJavaのものを除いて共通です。

同じJarファイルがローカルコンピュータで正常に動作し、ElasticSearchサーバーに接続できますが、同じJARファイルがGoogleクラウド上のsparkクラスタで実行されないため、ライブラリ依存性があると考えています。 Sparkのローカルバージョンとクラウドバージョンは同じ1.6.0です。

+0

'jar tf your-jarfile.jar | grep ThreadPool' 'org/elasticsearch/threadpool/ThreadPool.class'というクラスファイルがありますか?多くの場合、ローカルの開発環境は、欠落しているfatjarの依存関係を隠す依存関係で汚染されることがあります。きれいな環境(たとえば、新しいローカルまたはクラウドVM)で完全に新鮮な[Spark tarball](http://spark.apache.org/downloads.html)をダウンロードして、同じものを実行する完全にきれいな環境を試してみましたか'spark-submit --master local'はそこにありますか? –

答えて

0

この問題は、SparkおよびElasticsearchで使用されているGuavaライブラリが競合するために発生しています。解を見つけることができますin this StackOverflow question

関連する問題