diff --git shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java index 23ca261..b6780c4 100644 --- shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java +++ shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java @@ -19,17 +19,17 @@ import java.io.IOException; import java.lang.Integer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Comparator; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.HashMap; import java.net.URI; -import java.nio.ByteBuffer; import java.io.FileNotFoundException; import org.apache.commons.lang.StringUtils; @@ -46,12 +46,7 @@ import org.apache.hadoop.fs.RemoteIterator; import org.apache.hadoop.fs.Trash; import org.apache.hadoop.hdfs.MiniDFSCluster; -import org.apache.hadoop.hive.shims.HadoopShims.ByteBufferPoolShim; -import org.apache.hadoop.hive.shims.HadoopShims.DirectCompressionType; -import org.apache.hadoop.hive.shims.HadoopShims.DirectDecompressorShim; -import org.apache.hadoop.hive.shims.HadoopShims.ZeroCopyReaderShim; import org.apache.hadoop.io.LongWritable; -import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.mapred.ClusterStatus; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.MiniMRCluster; @@ -79,6 +74,27 @@ */ public class Hadoop23Shims extends HadoopShimsSecure { + private static final Method GET_TASK_LOG_URL_23; + private static final Method GET_TASK_LOG_URL_24; + + static { + Method method1 = null; + Method method2 = null; + try { + method1 = HostUtil.class.getMethod( + "getTaskLogUrl", String.class, String.class, String.class); + } catch (NoSuchMethodException e) { + try { + method2 = HostUtil.class.getMethod( + "getTaskLogUrl", String.class, String.class, String.class, String.class); + } catch (NoSuchMethodException e1) { + throw new IllegalStateException(e1); + } + } + GET_TASK_LOG_URL_23 = method1; + GET_TASK_LOG_URL_24 = method2; + } + HadoopShims.MiniDFSShim cluster = null; final boolean zeroCopy; @@ -106,9 +122,27 @@ public String getTaskAttemptLogUrl(JobConf conf, } else { // if the cluster is running in MR1 mode, using HostUtil to construct TaskLogURL URL taskTrackerHttpURL = new URL(taskTrackerHttpAddress); - return HostUtil.getTaskLogUrl(taskTrackerHttpURL.getHost(), - Integer.toString(taskTrackerHttpURL.getPort()), - taskAttemptId); + if (GET_TASK_LOG_URL_23 != null) { + return getTaskLogURL(GET_TASK_LOG_URL_23, taskTrackerHttpURL.getHost(), + Integer.toString(taskTrackerHttpURL.getPort()), + taskAttemptId); + } + return getTaskLogURL(GET_TASK_LOG_URL_24, taskTrackerHttpURL.getProtocol(), + taskTrackerHttpURL.getHost(), Integer.toString(taskTrackerHttpURL.getPort()), + taskAttemptId); + } + } + + private String getTaskLogURL(Method method, Object... args) throws MalformedURLException { + try { + return (String)method.invoke(null, args); + } catch (InvocationTargetException e) { + if (e.getCause() instanceof MalformedURLException) { + throw (MalformedURLException)e.getCause(); + } + throw new RuntimeException(e.getCause()); + } catch (Throwable t) { + throw new RuntimeException(t); } }