我需要使用AWS访问/密钥从我的Spark应用程序(结构化流)连接到AWS Elasticsearch服务。例如,S3和Spark集成有一种在configuration 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特定的一个。如有任何信息,欢迎光临!
发布于 2019-06-26 05:00:28
与您的spark会话一起,如果您拥有对您的spark集群的awsAccessKeyId
访问权限,将会传播awsSecretAccessKey
。
测试是,使用spark shell尝试从包含示例拼图文件的s3中读取存储桶。
http身份验证用户和密码是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)
https://stackoverflow.com/questions/56761624
复制相似问题