2016-05-01 2 views
0

Я использую искру на Google Cloud и у меня есть следующий код для подключения к базе данных ElasticsearchGoogle Cloud Спарк 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; 

} 

Когда я запустить его локально, т.е. spark-submit --master local[*] все работает нормально. Когда я запустить его в 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) является соединение описано выше.

Код загружается в облако Google, используя жирную банку, созданную с использованием sbt asssembly, поэтому все используемые библиотеки являются общими, за исключением родных java-единиц.

Я думаю, что это может быть какая-то зависимость от библиотеки, поскольку тот же jar отлично работает на моем локальном компьютере, и он может подключиться к серверу ElasticSearch, но тот же банд не запускается на искровом кластере в облаке Google. Как локальные, так и облачные версии Spark те же, 1.6.0.

+0

Если вы запустите 'jar tf your-jarfile.jar | grep ThreadPool' вы видите класс-файл 'org/elasticsearch/threadpool/ThreadPool.class'? Часто локальная среда для разработчиков может быть загрязнена зависимостями, которые скрывают недостающие зависимости fatjar; вы попробовали полностью чистую среду, в которой вы загружаете совершенно новый [Spark tarball] (http://spark.apache.org/downloads.html) в чистой среде (скажем, в новую локальную или облачную виртуальную машину) и запускаете те же самые 'spark-submit --master local 'есть? –

ответ

0

Проблема вызвана конфликтующими библиотеками Гуавы, используемыми в Spark и Elasticsearch. Решение можно найти in this StackOverflow question

Смежные вопросы