AWS EMR - 从 java 代码获取主节点 ip
AWS EMR - Get master node ip from java code
我想从 Java 代码实现以下流程:
- 创建一个新的 AWS EMR 实例(使用 AWS SDK)
- 使用 Hive JDBC(需要 IP)连接到 AWS EMR
- 运行 我在 EMR 上的 "SQL" 查询
- 销毁 AWS EMR(使用 AWS SDK)
我的问题是,当我使用 SDK 创建 EMR 时,我只能检索它的 AWS ID,例如 j-XXXXXXXXXXX。但是为了连接到 JDBC 我需要主节点 IP。如何从代码中获取主节点IP?
我正在关注这个JDBC example page
==更新==
我尝试使用 AmazonElasticMapReduceClient.describeCluster
但在寻找私有 ip 时只能获得 public DNS 名称。
据我所知,没有直接的方法来获取它,但可以使用 2 API 调用并在其中搜索来实现:
public String getMasterNodeIp(AmazonElasticMapReduceClient emr, String emrId) throws Exception {
Cluster cluster = emr.describeCluster(new DescribeClusterRequest().withClusterId(emrId)).getCluster();
ListInstancesResult instances = emr.listInstances(new ListInstancesRequest().withClusterId(emrId));
String masterDnsName = cluster.getMasterPublicDnsName();
for (Instance instance : instances.getInstances()) {
if (instance.getPublicDnsName().equals(masterDnsName)) {
return instance.getPrivateIpAddress();
}
}
throw new Exception("Failed to find master node private ip.");
}
我想从 Java 代码实现以下流程:
- 创建一个新的 AWS EMR 实例(使用 AWS SDK)
- 使用 Hive JDBC(需要 IP)连接到 AWS EMR
- 运行 我在 EMR 上的 "SQL" 查询
- 销毁 AWS EMR(使用 AWS SDK)
我的问题是,当我使用 SDK 创建 EMR 时,我只能检索它的 AWS ID,例如 j-XXXXXXXXXXX。但是为了连接到 JDBC 我需要主节点 IP。如何从代码中获取主节点IP?
我正在关注这个JDBC example page
==更新==
我尝试使用 AmazonElasticMapReduceClient.describeCluster
但在寻找私有 ip 时只能获得 public DNS 名称。
据我所知,没有直接的方法来获取它,但可以使用 2 API 调用并在其中搜索来实现:
public String getMasterNodeIp(AmazonElasticMapReduceClient emr, String emrId) throws Exception {
Cluster cluster = emr.describeCluster(new DescribeClusterRequest().withClusterId(emrId)).getCluster();
ListInstancesResult instances = emr.listInstances(new ListInstancesRequest().withClusterId(emrId));
String masterDnsName = cluster.getMasterPublicDnsName();
for (Instance instance : instances.getInstances()) {
if (instance.getPublicDnsName().equals(masterDnsName)) {
return instance.getPrivateIpAddress();
}
}
throw new Exception("Failed to find master node private ip.");
}