AWS EMR-получение IP главного узла из кода java
Я хочу реализовать следующий поток из кода Java:
- Создайте новый экземпляр AWS EMR (с помощью AWS SDK)
- Подключение к AWS EMR с помощью Hive JDBC (требуемый IP)
- выполнить мои запросы " SQL " на EMR
- уничтожить AWS EMR (с помощью AWS SDK)
Моя проблема заключается в том, что при создании EMR с помощью SDK я могу получить только его идентификатор AWS, что-то вроде j-XXXXXXXXXXX. Но для подключения к JDBC мне нужен IP-адрес главного узла. Как я могу это сделать? получить IP-адрес главного узла из кода?
Я следую этой странице примера JDBC
= = обновление= =
Я попытался использовать AmazonElasticMapReduceClient.describeCluster
, но смог получить только публичное DNS-имя, пока ищу частный ip.
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."); }