Amazon web services Presto无法识别AWS凭据(IAM和密钥)?

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

我正在尝试在AWSEC2实例上设置Presto,以便可以对存储在S3中的文件运行查询。我知道您可以/应该使用EMR,但我仅限于EC2。我已经为我的metastore创建了一个Derby DB,在bucket上设置了HDFS,并且能够使用Hive查询S3中的数据文件。在Hive CLI中,我可以从testpresto运行
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