AWS EMR-получение IP главного узла из кода java


Я хочу реализовать следующий поток из кода Java:

  1. Создайте новый экземпляр AWS EMR (с помощью AWS SDK)
  2. Подключение к AWS EMR с помощью Hive JDBC (требуемый IP)
  3. выполнить мои запросы " SQL " на EMR
  4. уничтожить AWS EMR (с помощью AWS SDK)

Моя проблема заключается в том, что при создании EMR с помощью SDK я могу получить только его идентификатор AWS, что-то вроде j-XXXXXXXXXXX. Но для подключения к JDBC мне нужен IP-адрес главного узла. Как я могу это сделать? получить IP-адрес главного узла из кода?

Я следую этой странице примера JDBC

= = обновление= =
Я попытался использовать AmazonElasticMapReduceClient.describeCluster, но смог получить только публичное DNS-имя, пока ищу частный ip.

1 2

1 ответ:

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