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

AWS EMR - Get master node ip from java code

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

  1. 创建一个新的 AWS EMR 实例(使用 AWS SDK)
  2. 使用 Hive JDBC(需要 IP)连接到 AWS EMR
  3. 运行 我在 EMR 上的 "SQL" 查询
  4. 销毁 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.");
}