【发布时间】:2017-05-24 01:38:30
【问题描述】:
我正在尝试在 AWS EC2 实例上设置 Presto,以便我可以对存储在 S3 中的文件运行查询。我知道您可以/应该使用 EMR,但我仅限于 EC2。我已经为我的元存储创建了一个 Derby DB,在存储桶上设置了 HDFS,并且能够使用 Hive 在 S3 中查询数据文件。在 Hive CLI 中,我可以运行 SELECT * FROM testpresto;(testpresto 是我的表名),它会正确显示我的 S3 txt 文件的所有内容。我将 Presto 连接到 Hive 元存储,因此我的表通过 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 访问密钥 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-key 和hive.s3.aws-secret-key 直接添加密钥应该使Presto 能够从S3 读取。我还尝试使用hive.s3.use-instance-credentials=true(设置和不设置密钥配置)来使用 IAM 角色,但都会产生同样的错误。我还缺少其他一些设置吗?我不明白为什么 Hive 能够查询,但 Presto 不能。
【问题讨论】:
标签: amazon-web-services amazon-ec2 hive presto