我已经建立了一个安装有Hive/Presto的小型EMR集群,我想查询S3上的文件,并将它们导入到RDS上的Postgres。
为了在S3上运行查询并将结果保存到Postgres表中,我已经完成了以下步骤:
- Started a 3 node EMR cluster from the AWS console.
- Manually SSH into the Master node to create an EXTERNAL table in hive, looking at an S3 bucket.
Manually SSH into each of the 3 nodes and add a new catalog file:
/etc/presto/conf.dist/catalog/postgres.properties
with the following contents
connector.name=postgresql connection-url=jdbc:postgresql://ip-to-postgres:5432/database connection-user=<user> connection-password=<pass>
and edited this file
/etc/presto/conf.dist/config.properties
adding
datasources=postgresql,hive
Restart presto by running the following manually on all 3 nodes
sudo restart presto-server
这种设定似乎很有效。
在我的应用中,会动态创建多个数据库。看来需要为每个数据库进行配置/目录更改,并重新启动服务器才能看到新的配置更改。
是否有一种适当的方式(使用boto或其他方法)让我的应用程序更新配置,包括:
- 在所有节点的/etc/presto/conf.dist/catalog/中为每个新数据库添加一个新的目录文件
- 在所有节点的/etc/presto/conf.dist/config.properties中添加一个新条目
- 在整个集群中优雅地重启presto(最好在其变为空闲时进行,但这不是主要关注点)