我尝试运行Spark应用程序来集成Hbase和ES。我尝试在 ES 中创建索引并存储来自 HBase 的数据,但在连接 ES 服务器时收到“用户未经授权或访问被拒绝”的问题。
我已与运营团队核实并退回 ES 服务器,尝试运行应用程序并收到附加异常 - 线程“main”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。如果有人遇到此问题并清除了异常,请告诉我
使用 Spark 应用程序将数据加载到 Elasticsearch 时,您可能会遇到身份验证问题,因为 Elasticsearch 版本 6.x 及更高版本使用 SSL 证书进行身份验证。要解决此问题,您可以按照以下步骤操作:
先决条件:
解决步骤:
keytool -keystore <jks-file> -import -file <pem-file>
keytool -list -v -keystore <jks-file>
--driver-java-options="-Djavax.net.ssl.trustStore=<jks-file-location> -Djavax.net.ssl.trustStorePassword=<trust-store-pwd"
按照以下步骤,您的 Spark 应用程序可以成功通过 Elasticsearch 集群进行身份验证以进行数据加载。
感谢大家尝试这个问题,我已经确定了这个问题。如果您遇到类似问题,这可能会对您有所帮助。
问题是我们正在覆盖mapr中的spark默认配置 - /opt/mapr/spark/spark-2.1.0/conf
我们在应用程序中传递的 Spark 配置无法绑定到 SparkConfig。因此它在索引创建期间指向本地主机(127.0.0.1:9200)- 如果您遇到此问题,请检查您的异常日志
我更改了应用程序中的配置详细信息,并在创建 SparkSession 对象时传递了这些配置详细信息,并且我已经测试了该应用程序。
现在,应用程序运行良好,我可以在 Elastic Search 中创建索引并加载数据。
创建sparkSession时传递了sparkConfig:
**
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()
**
谢谢你..