すなわち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です。
'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'はそこにありますか? –