无法从Spark连接到AWS Elasticsearch

时间:2019-06-25 20:32:38

标签: amazon-web-services apache-spark 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的产品。任何信息表示赞赏!

1 个答案:

答案 0 :(得分:1)

如果您有AWS访问Spark集群的权限,则将在您的Spark会话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)