AWS EMR - 从java代码获取主节点ip

时间:2015-12-01 08:08:15

标签: java aws-sdk emr amazon-emr

我想从Java代码实现以下流程:

  1. 创建新的AWS EMR实例(使用AWS SDK)
  2. 使用Hive JDBC(所需IP)
  3. 连接到AWS EMR
  4. 在EMR上运行我的“SQL”查询
  5. 销毁AWS EMR(使用AWS SDK)
  6. 我的问题是,当我使用SDK创建EMR时,我只能检索它的AWS id,例如j-XXXXXXXXXXX。但是为了连接到JDBC我需要主节点IP。如何从代码中获取主节点IP?

    我正在关注此JDBC example page

    == UPDATE ==
    我尝试使用AmazonElasticMapReduceClient.describeCluster但只能获取公共DNS名称,而我正在寻找私有IP。

1 个答案:

答案 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.");
}