【问题标题】:Unable to connect to AWS Elasticsearch from Spark无法从 Spark 连接到 AWS Elasticsearch
【发布时间】:2019-06-26 05:06:51
【问题描述】:

我需要使用 AWS 访问/密钥从我的 Spark 应用程序(结构化流)连接到 AWS Elasticsearch 服务。 例如,S3 和 Spark 集成有一种方法可以在配置中设置访问/秘密密钥https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html

我找不到任何与 Elasticsearch 等效的东西。我尝试了下面的代码,但没有奏效。

 val writer = input.write
        .option("es.nodes",serverUrl)
        .option("es.net.https.auth.user", awsAccessKeyId)
        .option("es.net.https.auth.pass", awsSecretAccessKey)
        .option("es.nodes.wan.only", "true")
        .format("org.elasticsearch.spark.sql")
  writer.save("index/mapping")

看起来“es.net.https.auth.xxx”用于基本身份验证。我正在寻找 AWS 特定的。任何信息表示赞赏!

【问题讨论】:

  • 如果你还好并且有用,请注意投票。

标签: amazon-web-services apache-spark elasticsearch


【解决方案1】:

如果您拥有对 spark 集群的 aws 访问权限,则将与您的 spark 会话一起传播 awsAccessKeyId awsSecretAccessKey

测试是,使用 spark shell 尝试从 s3 读取存储桶,其中包含示例 parquet 文件。

http auth 用户和密码是es.net.https.auth.user es.net.https.auth.pass 的占位符

例如,如果您要连接到 mysql(RDS 是 aws),您需要分别传递 jdbc 用户和密码。类似的名词你的http认证也是这样的。

结论:

根据我的经验,没有必要单独提供 awsAccessKeyId awsSecretAccessKey,因为它暗示您可以从您的 EMR 集群访问它。

注意:如果您想或必须真正设置访问凭据,您需要像下面这样设置......

val hadoopConf = sc.hadoopConfiguration;
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey", mySecretKey)

不喜欢

.option("es.net.https.auth.user", awsAccessKeyId)

【讨论】:

  • 是的,它成功了!我在 hadoopConfiguration 中设置了访问/密钥。非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2021-01-22
  • 2021-10-20
  • 2017-01-22
  • 1970-01-01
  • 2016-04-25
  • 2022-10-19
  • 2021-10-11
  • 2016-03-10
相关资源
最近更新 更多