【问题标题】:Exception-"network/Elasticsearch cluster is not accessible or when targeting a WAN/Cloud instance"异常-“网络/Elasticsearch 集群不可访问或针对 WAN/云实例时”
【发布时间】:2018-11-27 13:09:41
【问题描述】:

我尝试运行 Spark 应用程序以集成 Hbase 和 ES。我曾尝试在 ES 中创建索引并从 HBase 存储数据,但在连接到 ES 服务器时收到“用户未经授权或访问被拒绝”的问题。

我已与运营团队核对并退回 ES 服务器,尝试运行应用程序并收到附加异常-线程“主”org.elasticsearch.hadoop.EsHadoopIllegalArgumentException 中的异常:无法检测到 ES 版本 - 通常如果无法访问网络/Elasticsearch 集群,或者在没有正确设置“es.nodes.wan.only”的情况下针对 WAN/云实例,就会发生这种情况 在 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$.saveToEs(EsSpark.scala:74) 在 org.elasticsearch.spark.package$SparkRDDFunctions.saveToEs(package.scala:55)

我正在使用 Elasticsearch 6.1.1 v。如果有人遇到此问题并清除异常,请告诉我

【问题讨论】:

    标签: elasticsearch kibana elasticsearch-spark


    【解决方案1】:

    由于 Elasticsearch(version: 6.x+) 使用 SSL 证书进行身份验证。我在使用 Spark 应用程序将数据加载到 Elasticsearch 时遇到了类似的问题。以下是用于解决问题的步骤。

    先决条件:

    1. 生成jks文件
    2. 生成pem文件

    解决步骤:

    1. 使用以下命令生成 SSL 证书

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

    2. 验证是否使用以下命令生成证书

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

    3. 使用 spark 参数提供 ssl 证书路径 driver-java-options

      --driver-java-options="-Djavax.net.ssl.trustStore=<jks-file-location> -Djavax.net.ssl.trustStorePassword=<trust-store-pwd"

    完成这些步骤后,Spark 应用程序就可以通过 ES 集群进行身份验证以进行数据加载。

    【讨论】:

      【解决方案2】:

      感谢大家尝试这个问题,我已经确定了这个问题。如果您遇到类似的问题,它可能会对您有所帮助。

      问题是我们正在覆盖 mapr 中的 spark 默认配置 - /opt/mapr/spark/spark-2.1.0/conf

      我们在应用程序中传递的 spark 配置无法绑定到 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()
      

      **

      谢谢你..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-30
        • 2017-01-14
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多