无法从Spark连接到AWS Elasticsearch

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (10)

我需要使用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。任何信息表示赞赏!

提问于
用户回答回答于

awsAccessKeyId awsSecretAccessKey如果你有访问你的火花群的话,那么你的火花会话就会被传播。

测试是,使用spark shell尝试从s3读取存储桶,其中包含样本镶木地板文件。

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)

扫码关注云+社区

领取腾讯云代金券