Amazon web services Presto无法识别AWS凭据(IAM和密钥)?
我正在尝试在AWSEC2实例上设置Presto,以便可以对存储在S3中的文件运行查询。我知道您可以/应该使用EMR,但我仅限于EC2。我已经为我的metastore创建了一个Derby DB,在bucket上设置了HDFS,并且能够使用Hive查询S3中的数据文件。在Hive CLI中,我可以从testpresto运行Amazon web services Presto无法识别AWS凭据(IAM和密钥)?,amazon-web-services,amazon-ec2,hive,presto,Amazon Web Services,Amazon Ec2,Hive,Presto,我正在尝试在AWSEC2实例上设置Presto,以便可以对存储在S3中的文件运行查询。我知道您可以/应该使用EMR,但我仅限于EC2。我已经为我的metastore创建了一个Derby DB,在bucket上设置了HDFS,并且能够使用Hive查询S3中的数据文件。在Hive CLI中,我可以从testpresto运行SELECT*(testpresto是我的表名),它正确地显示了我的S3 txt文件的所有内容。我将Presto连接到Hive metastore,因此我的表通过SHOW TABL
SELECT*代码>(testpresto是我的表名),它正确地显示了我的S3 txt文件的所有内容。我将Presto连接到Hive metastore,因此我的表通过SHOW TABLES显示在Presto CLI中代码>和描述testpresto代码>
但是,当我运行SELECT*fromtestpresto时代码>查询超时,出现以下错误
查询20170109_165917_00007_7pyam失败:无法执行HTTP
请求:连接到${MY_BUCKET}.s3-us-west-1.amazonaws.com:443
[${MY_BUCKET}.s3-us-west-1.amazonaws.com/54.231.237.24]失败:
连接超时
当我试图通过Presto CLI实例化一个新模式时,我得到了一个更具描述性的错误
查询20170109_175329_00016_7pyam失败:
java.lang.IllegalArgumentException:AWS访问密钥ID和密码
必须将访问密钥指定为用户名或密码
(分别)的S3URL,或通过设置fs.s3.awsAccessKeyId或
fs.s3.awsSecretAccessKey属性(分别)
不幸的是,我所做的一切都不能解决这个错误。从我在网上读到的内容来看,似乎要通过以下方式将资源引用添加到我的Presto配置(catalog/hive.properties
)
或者通过hive.s3.aws访问密钥
和hive.s3.aws密钥
直接添加密钥,应该可以使Presto从s3读取。我还尝试使用hive.s3.use instance credentials=true
(有和没有设置密钥配置)来使用IAM角色,但都会产生相同的错误。我还缺少其他一些设置吗?我不明白为什么Hive可以查询,但Presto不能查询。启动EC2实例时,您有机会为其分配IAM角色。必须在启动时分配IAM角色。启动实例后,您无法为其分配角色或更改其角色
我认为您应该创建一个IAM角色,该角色具有对s3 bucket所需的访问权限,然后启动一个新的EC2实例并将其分配给该角色。创建此实例后,使用SSH连接并运行aws s3 ls
,查看实例也可以访问哪些存储桶。如果您正确配置了角色,它应该能够列出您的bucket。从那以后,普雷斯托应该开始工作 如果您使用的是EMR,那么您使用的是AmazonS3客户端,而不是ASF代码。这意味着S3a中的代码(例如,凭证提供者链)将不存在。忽略对HADOOP-*JIRAs或下文档的任何引用。抱歉我使用访问S3的s3a://
模式测试了带有S3和Hive元存储的Presto。因为您已经与S3进行了Hive对话,所以剩下的应该很简单:
- 您可以分配一个IAM角色,允许EC2实例与S3对话。在Presto 0.157中,这是开箱即用的,因为
hive.s3。请使用hive
连接器的实例凭据
config属性
- 或者,您可以在配置单元连接器的配置文件中设置以下内容(通常为
目录/hive.properties
):
hive.s3.use-instance-credentials=false
hive.s3.aws-access-key=…
hive.s3.aws-secret-key=…
因为我知道您测试了这些选项,但它们对您不起作用,所以您仍然可以尝试:
- 重审
- 如果还没有,请尝试使用
s3a
schema
- 如果您远远落后于最新版本,请升级,或者尝试与我使用的版本完全相同的版本(
0.157.1-t.1
)
- 确保没有网络级配置阻止来自Presto机器的S3访问
- 确保IAM角色确实授予您S3访问权限(或使用显式密钥作为临时解决方案)
这个实例确实有一个IAM角色,允许它访问bucket,我在启动时分配了它。我能够在此EC2上运行aws s3 ls s3://${MY_BUCKET}
,它正确显示BUCKET内容。我认为Presto将检查aws凭据,如果未配置这些凭据,它将退回到使用aws元数据服务来使用IAM角色。也许这个要点很有用-是的,我以前看过这个链接。但是这些更改都没有实现,最终链接的PRs链会在有人为Hadoop创建一个新的应用程序时结束吗?我真的不知道如何将其合并到Presto中。如果您直接通过hive.s3.aws访问密钥
和hive.s3.aws密钥
Presto添加密钥,使用aws凭据,您可以使用CloudTrail或IAM控制台查看这些凭据是否被使用并发送到aws进行s3身份验证?希望这能帮助您进一步隔离故障。在我之前尝试使用键时,我将它们添加到目录配置中的hive.properties文件中。这一次,我尝试将它们作为会话参数添加,并得到以下错误<代码>线程“main”io.airlift.airline.ParseOptionConversionException:会话:无法将“hive.s3.aws access key=${MY_key}”转换为ClientSessionProperty
当我将其放入属性文件时,Presto是否悄悄地发生了相同的错误?
hive.config.resources=/usr/local/hadoop/etc/hadoop/core-site.xml,/usr/local/hadoop/etc/hadoop/hdfs-site.xml