Исключение -"сеть / кластер Elasticsearch недоступен или при настройке на экземпляр WAN/Cloud"
Я попытался запустить приложение Spark для интеграции Hbase и ES. Я попытался создать индекс в ES и сохранить данные из HBase, но получил сообщение "пользователь не авторизован или в доступе отказано" при подключении к серверу ES.
Я проверил с командой операций и отскочил сервер ES, попытался запустить приложение и получил присоединенное исключение -Исключение в потоке "main" org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: Не удается определить версию ES - обычно это происходит, если сеть / Кластер Elasticsearch недоступен или при нацеливании на экземпляр WAN/Cloud без правильной настройки "es.nodes.wan.only" в org.elasticsearch.hadoop.rest.InitializationUtils.discoverEsVersion(InitializationUtils.java:327) в org.elasticsearch.spark.rdd.EsSpark$.doSaveToEs(EsSpark.scala:103) в org.elasticsearch.spark.rdd.EsSpark$.saveToEs(EsSpark.scala:79) в org.elasticsearch.spark.rdd.EsSpark $.saveToE.scala:74) в org.elasticsearch.spark.package$SparkRDDFunctions.saveToEs(package.scala:55)
Я использую Elasticsearch 6.1.1 v. Пожалуйста, дайте мне знать, если кто-то сталкивался с этой проблемой и снял исключение
1 ответ
Поскольку Elasticsearch(версия: 6.x+) использует сертификаты SSL для аутентификации. Я столкнулся с аналогичной проблемой при загрузке данных в Elasticsearch с помощью Spark Application. Ниже приведены шаги, используемые для решения проблемы.
Предварительные требования:
- Создать файл jks
- Создать PEM файл
Шаги разрешения:
Создайте сертификаты SSL, используя команду ниже
keytool -keystore <jks-file> -import -file <pem-file>
Проверьте, созданы ли сертификаты, используя команду ниже
keytool -list -v -keystore <jks-file>
Укажите путь сертификата ssl с помощью параметра Spark driver-java-options
--driver-java-options="-Djavax.net.ssl.trustStore=<jks-file-location> -Djavax.net.ssl.trustStorePassword=<trust-store-pwd"
После выполнения этих шагов приложение Spark может пройти аутентификацию в кластере ES для загрузки данных.
Спасибо всем за решение этой проблемы, я определил проблему. Это может быть полезно для вас, если вы столкнулись с подобной проблемой.
Проблема в том, что мы перезаписываем конфигурацию спарк по умолчанию в mapr - /opt/mapr/spark/spark-2.1.0/conf
и конфигурация искры, которую мы передаем в нашем приложении, не смогла привязаться к sparkConfig. Таким образом, он указывает на локальный хост при создании индекса (127.0.0.1:9200)- проверьте в журнале исключений, сталкивались ли вы с этим
Я изменил детали конфигурации в приложении и передал их при создании объекта sparkSession, и я протестировал приложение.
Теперь приложение работает нормально, и я могу создать индекс в Elastic Search и загрузить данные.
sparkConfig прошел при создании sparkSession:
**
val sparkConf = new SparkConf()
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.set("spark.es.index.auto.create", "true")
.set("spark.es.nodes", "yourESaddress")
.set("spark.es.port", "9200")
.set("spark.es.net.http.auth.user","*******")
.set("spark.es.net.http.auth.pass", "*******")
.set("spark.es.resource", indexName)
.set("spark.es.nodes.wan.only", "true")
val sparkSession = SparkSession.builder().config(sparkConf).appName("sourcedashboard").getOrCreate()
**
Спасибо..