Исключение -"сеть / кластер 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. Ниже приведены шаги, используемые для решения проблемы.

Предварительные требования:

  1. Создать файл jks
  2. Создать PEM файл

Шаги разрешения:

  1. Создайте сертификаты SSL, используя команду ниже

    keytool -keystore <jks-file> -import -file <pem-file>

  2. Проверьте, созданы ли сертификаты, используя команду ниже

    keytool -list -v -keystore <jks-file>

  3. Укажите путь сертификата 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()

**

Спасибо..

Другие вопросы по тегам