From 491e8650621769714ae326179646923a62c16168 Mon Sep 17 00:00:00 2001 From: pbamba Date: Tue, 15 Dec 2015 14:27:16 +0100 Subject: [PATCH] Resolve IP Address for spark.es.nodes param --- .../hadoop/util/SettingsUtils.java | 19 ++++++++++++++++++- .../hadoop/util/StringUtils.java | 9 +++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/mr/src/main/java/org/elasticsearch/hadoop/util/SettingsUtils.java b/mr/src/main/java/org/elasticsearch/hadoop/util/SettingsUtils.java index 4ab0b9cca..16220d968 100644 --- a/mr/src/main/java/org/elasticsearch/hadoop/util/SettingsUtils.java +++ b/mr/src/main/java/org/elasticsearch/hadoop/util/SettingsUtils.java @@ -25,16 +25,19 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.net.InetAddress; +import java.net.UnknownHostException; import org.elasticsearch.hadoop.cfg.InternalConfigurationOptions; import org.elasticsearch.hadoop.cfg.Settings; +import org.elasticsearch.hadoop.EsHadoopIllegalArgumentException; public abstract class SettingsUtils { private static List qualifyNodes(String nodes, int defaultPort) { List list = StringUtils.tokenize(nodes); for (int i = 0; i < list.size(); i++) { - String host = list.get(i); + String host = resolveHostIp(list.get(i)); list.set(i, qualifyNode(host, defaultPort)); } return list; @@ -54,6 +57,20 @@ private static String qualifyNode(String node, int defaultPort) { return node + ":" + defaultPort; } + private static String resolveHostIp(String host) { + int index = host.lastIndexOf(':'); + String name = index > -1 ? host.substring(0, index) : host; + String port = index > -1 ? host.substring(index + 1) : ""; + if (StringUtils.hasLetter(name)) { + try { + return InetAddress.getByName(name).getHostAddress() + port; + } catch (UnknownHostException ex) { + throw new EsHadoopIllegalArgumentException("Cannot resolve ip for hostname: " + name); + } + } + return host; + } + public static void pinNode(Settings settings, String node) { pinNode(settings, node, settings.getPort()); } diff --git a/mr/src/main/java/org/elasticsearch/hadoop/util/StringUtils.java b/mr/src/main/java/org/elasticsearch/hadoop/util/StringUtils.java index f8778de6f..e4f8eb713 100644 --- a/mr/src/main/java/org/elasticsearch/hadoop/util/StringUtils.java +++ b/mr/src/main/java/org/elasticsearch/hadoop/util/StringUtils.java @@ -385,6 +385,15 @@ public static boolean isLowerCase(CharSequence string) { return true; } + public static boolean hasLetter(CharSequence string) { + for (int index = 0; index < string.length(); index++) { + if (Character.isLetter(string.charAt(index))) { + return true; + } + } + return false; + } + public static String jsonEncoding(String rawString) { return new String(HAS_JACKSON_CLASS ? JacksonStringEncoder.jsonEncoding(rawString) : BackportedJsonStringEncoder.getInstance().quoteAsString(rawString)); }