Я использую искру на 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.
Если вы запустите '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 'есть? –