Presto无法识别AWS凭证(IAM和密钥)?

时间:2017-01-09 17:57:33

标签: amazon-web-services amazon-ec2 hive presto

我正在尝试在AWS EC2实例上设置Presto,以便我可以对存储在S3中的文件运行查询。我知道你可以/应该使用EMR,但我仅限于EC2。我为我的Metastore创建了一个Derby DB,在存储桶上设置了HDFS,并且能够使用Hive在S3中查询数据文件。在Hive CLI中,我可以运行SELECT * FROM testpresto;(testpresto是我的表名),它正确显示了我的S3 txt文件的所有内容。我将Presto连接到Hive Metastore,因此我的表通过SHOW TABLES;DESCRIBE testpresto;显示在presto CLI中。

但是,当我运行SELECT * FROM testpresto;时,查询超时时出现以下错误。

  

查询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 Access密钥ID和密钥   必须将访问密钥指定为用户名或密码   (分别)s3 URL,或者设置fs.s3.awsAccessKeyId或   fs.s3.awsSecretAccessKey属性(分别)。

不幸的是,我没有做任何事情来解决这个错误。从我在线阅读的内容来看,似乎是通过

向我的Presto配置(catalog/hive.properties)添加资源引用
hive.config.resources=/usr/local/hadoop/etc/hadoop/core-site.xml,/usr/local/hadoop/etc/hadoop/hdfs-site.xml

或通过hive.s3.aws-access-keyhive.s3.aws-secret-key直接添加密钥应该使Presto能够从S3读取。我也尝试使用hive.s3.use-instance-credentials=true(使用和不设置密钥配置)来使用IAM角色,但这一切都会产生同样的错误。我还缺少其他一些设置吗?我不明白为什么Hive能够查询但是Presto不能查询。

3 个答案:

答案 0 :(得分:0)

启动EC2实例时,您有机会为其分配IAM角色。必须在启动时分配IAM角色。启动实例后,您无法为其分配角色或更改其角色。

我认为你应该创建一个具有s3存储桶所需访问权限的IAM角色,然后启动一个新的EC2实例并为其分配该角色。创建此实例后,立即SSH并运行aws s3 ls以查看实例可以访问的存储区。如果您正确配置了角色,它应该能够列出您的桶。从那里Presto应该工作。

答案 1 :(得分:0)

如果您正在使用EMR,则使用的是Amazon S3客户端,而不是ASF代码。这意味着S3a中的代码(例如,凭证提供商链)不会存在。忽略http://hadoop.apache.org下对HADOOP- * JIRA或docs的任何引用。遗憾

答案 2 :(得分:0)

我使用s3a://模式使用S3和Hive Metastore测试Presto以访问S3。由于你有Hive与S3交谈,其余的应该很简单:

  • 您可以分配一个允许您的EC2实例与S3通信的IAM角色。在Presto 0.157中,由于hive.s3.use-instance-credentials连接器的hive配置属性defaults to true
  • ,因此开箱即用
  • 或者您可以在配置单元连接器的配置文件中设置以下内容(通常为catalog/hive.properties):
    • hive.s3.use-instance-credentials = false
    • hive.s3.aws-access-key = ...
    • hive.s3.aws-secret-key = ...

由于我了解您测试了这些选项并且它们不适合您,您可能仍会尝试:

  • 重试
  • 尝试使用s3a架构,如果您还没有
  • 升级,如果您远远落后于最新版本,或者尝试完全相同的版本(0.157.1-t.1
  • 确保没有阻止来自Presto机器的S3访问的网络级配置
  • 确保IAM角色真正授予您S3访问权限(或使用显式密钥作为临时解决方法)