我想从Java代码实现以下流程:
我的问题是,当我使用SDK创建EMR时,我只能检索它的AWS id,例如j-XXXXXXXXXXX。但是为了连接到JDBC我需要主节点IP。如何从代码中获取主节点IP?
我正在关注此JDBC example page
== UPDATE ==
我尝试使用AmazonElasticMapReduceClient.describeCluster
但只能获取公共DNS名称,而我正在寻找私有IP。
答案 0 :(得分:2)
AFAIK没有直接获取方法,但可以使用2个API调用并在其中搜索来实现:
public String getMasterNodeIp(AmazonElasticMapReduceClient emr, String emrId) throws Exception {
Cluster cluster = emr.describeCluster(new DescribeClusterRequest().withClusterId(emrId));
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.");
}