首页 > 解决方案 > 无法从 Spark 连接到 AWS Elasticsearch

问题描述

我需要使用 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-servicesapache-sparkelasticsearch

解决方案


awsAccessKeyId awsSecretAccessKey如果您有权访问您的 spark 集群,那么您的 spark 会话将被传播。

测试是,使用 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)

推荐阅读