我已经安装了一个安装了Hive / Presto的小型EMR集群,我想在S3上查询文件并将它们导入到RDS上的Postgres。
要在S3上运行查询并将结果保存在postgres的表中,我已完成以下操作:
手动SSH连接到3个节点中的每个节点并添加新的目录文件:
/etc/presto/conf.dist/catalog/postgres.properties
包含以下内容
connector.name=postgresql
connection-url=jdbc:postgresql://ip-to-postgres:5432/database
connection-user=<user>
connection-password=<pass>
并编辑了此文件
/etc/presto/conf.dist/config.properties
添加
datasources=postgresql,hive
通过在所有3个节点上手动运行以下来重启presto
sudo restart presto-server
此设置似乎运作良好。
在我的应用程序中,有多个动态创建的数据库。似乎需要为每个数据库进行那些配置/目录更改,并且需要重新启动服务器以查看新配置更改。
我的应用程序(使用boto或其他方法)是否有适当的方法来通过
更新配置答案 0 :(得分:0)
在提供群集期间 您可以在提供时提供配置详细信息。
有关如何在群集配置期间自动添加此功能,请参阅Presto Connector Configuration。
答案 1 :(得分:0)
您可以通过管理控制台提供以下配置:
或者您可以使用awscli
传递这些配置,如下所示:
#!/bin/bash
JSON=`cat <<JSON
[
{ "Classification": "presto-connector-postgresql",
"Properties": {
"connection-url": "jdbc:postgresql://ip-to-postgres:5432/database",
"connection-user": "<user>",
"connection-password": "<password>"
},
"Configurations": []
}
]
JSON`
aws emr create-cluster --configurations "$JSON" # ... reset of params
答案 2 :(得分:0)
我相信您可以运行一个简单的bash脚本来实现所需的功能。除了使用--configurations
参数创建新集群以外,没有其他方法可以在其中提供所需的配置。您可以从主节点在脚本下面运行。
#!/bin/sh
# "cluster_nodes.txt" with private IP address of each node.
aws emr list-instances --cluster-id <cluster-id> --instance-states RUNNING | grep PrivateIpAddress | sed 's/"PrivateIpAddress"://' | sed 's/\"//g' | awk '{gsub(/^[ \t]+|[ \t]+$/,""); print;}' > cluster_nodes.txt
# For each IP connect with ssh and configure.
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "Connecting $line"
scp -i <PEM file> postgres.properties hadoop@$line:/tmp;
ssh -i <PEM file> hadoop@$line "sudo mv /tmp/postgres.properties /etc/presto/conf/catalog;sudo chown presto:presto /etc/presto/conf/catalog/postgres.properties;sudo chmod 644 /etc/presto/conf/catalog/postgres.properties; sudo restart presto-server";
done < cluster_nodes.txt