我试图在一个aws ec2示例上设置presto,以便可以对存储在s3中的文件运行查询。我知道你可以/应该使用电子病历,但我只限于ec2。我已经为我的metastore创建了一个derby数据库,在bucket上设置了hdfs,并且能够使用hive查询s3中的数据文件。在hive cli中,我可以运行 SELECT * FROM testpresto;
(testpresto是我的表名),它正确地显示了我的s3txt文件的所有内容。我将presto连接到hive metastore,因此我的表通过 SHOW TABLES;
以及 DESCRIBE testpresto;
.
但是,当我跑的时候 SELECT * FROM testpresto;
查询超时,出现以下错误。
查询20170109\u 165917\u 00007\u 7pyam失败:无法执行http请求:连接到${my\u bucket}.s3-us-west-1.amazonaws。com:443 [${my\u bucket}.s3-us-west-1.amazonaws.com/54.231.237.24]失败:连接超时
当我试图通过presto cli示例化一个新的模式时,我得到了一个更具描述性的错误。
查询20170109\u 175329\u 00016\u 7pyam失败:java.lang.illegalargumentexception:aws access key id和secret access key必须分别指定为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可以查询,但普雷斯托不是。
3条答案
按热度按时间zlhcx6iw1#
启动ec2示例时,您有机会为其分配iam角色。iam角色必须在启动时分配。一旦启动示例,就不能为其分配角色或更改其角色。
我认为您应该创建一个iam角色,该角色具有对s3 bucket所需的访问权限,然后启动一个新的ec2示例并为其分配该角色。一旦创建了这个示例,ssh就会进入并运行
aws s3 ls
查看示例也可以访问哪些存储桶。如果您正确配置了角色,它应该能够列出您的bucket。从那以后,普雷斯托应该开始工作了。kknvjkwl2#
我用s3和hive metastore测试了presto
s3a://
访问s3的模式。既然您有了与s3对话的hive,剩下的应该很简单:您可以分配一个iam角色,该角色允许ec2示例与s3通信。在presto 0.157中,这是开箱即用的
hive.s3.use-instance-credentials
的配置属性hive
连接器默认为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访问权限(或者使用显式密钥作为临时解决方法)
hlswsv353#
如果您使用的是emr,那么您使用的是amazons3客户机,而不是asf代码。这意味着s3a中的代码(例如,凭证提供者链)将不在那里。忽略对hadoop-*jiras或文档的任何引用http://hadoop.apache.org. 对不起的