commit 35d7ab353f7c9b5c7e8c07462accdf7bfd117d78 Author: Vihang Karajgaonkar Date: Mon Jun 4 14:22:41 2018 -0700 HIVE-19685 : OpenTracing support for HMS diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 2a34da2544f304b3355e7157d7fba29db6173199..3a2d92789f795bf35cb712a4ba32fc201cb98af9 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -81,6 +81,9 @@ 0.9.3 2.8.2 1.10.19 + 0.31.0 + 0.0.7 + 0.1.0 1.5.0 2.5.0 1.3.0 @@ -95,6 +98,26 @@ + io.opentracing + opentracing-api + ${opentracing.version} + + + io.opentracing + opentracing-util + ${opentracing.version} + + + io.opentracing.contrib + opentracing-thrift + ${opentracing-thrift.version} + + + io.opentracing.contrib + opentracing-tracerresolver + ${opentracing-tracerresolver.version} + + org.apache.orc orc-core ${orc.version} diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index d8b841499971339b167b83648bb28a691dddbabe..e8603bb215db89420fe862374ab433823d7bb935 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -71,6 +71,12 @@ import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimaps; +import io.opentracing.contrib.tracerresolver.TracerResolver; +import io.opentracing.Scope; +import io.opentracing.Tracer; +import io.opentracing.thrift.SpanProcessor; +import io.opentracing.noop.NoopTracer; +import io.opentracing.util.GlobalTracer; import org.apache.commons.cli.OptionBuilder; import org.apache.hadoop.conf.Configuration; @@ -8682,6 +8688,8 @@ public static void main(String[] args) throws Throwable { } startupShutdownMessage(HiveMetaStore.class, args, LOG); + initTracing(); + try { String msg = "Starting hive metastore on port " + cli.port; HMSHandler.LOG.info(msg); @@ -8879,6 +8887,11 @@ public static void startMetaStore(int port, HadoopThriftAuthBridge bridge, serverSocket = new TServerSocketKeepAlive(serverSocket); } + // Wrap processor for tracing if enabled. + if (!(GlobalTracer.get() instanceof NoopTracer)) { + processor = new SpanProcessor(processor); + } + // Metrics will have already been initialized if we're using them since HMSHandler // initializes them. openConnections = Metrics.getOrCreateGauge(MetricsConstants.OPEN_CONNECTIONS); @@ -9137,6 +9150,17 @@ private static void startupShutdownMessage(Class clazz, String[] args, } /** + * Initialize OpenTracing by looking for any registered tracers + * on the classpath. + **/ + private static void initTracing() { + Tracer t = TracerResolver.resolveTracer(); + if (t != null) { + GlobalTracer.register(t); + } + } + + /** * Return a message for logging. * @param prefix prefix keyword for the message * @param msg content of the message diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java index fd7546e82a310b38bc338642dd9a1691bb270bf0..ef85e574c4c4ac89f96c3f263fbc41a2bc5c8b90 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java @@ -85,6 +85,9 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; +import io.opentracing.thrift.SpanProtocol; +import io.opentracing.util.GlobalTracer; + /** * Hive Metastore Client. * The public implementation of IMetaStoreClient. Methods not inherited from IMetaStoreClient @@ -503,12 +506,17 @@ private void open() throws MetaException { } } - final TProtocol protocol; + TProtocol protocol; if (useCompactProtocol) { protocol = new TCompactProtocol(transport); } else { protocol = new TBinaryProtocol(transport); } + + if (GlobalTracer.isRegistered()) { + protocol = new SpanProtocol(protocol, GlobalTracer.get()); + } + client = new ThriftHiveMetastore.Client(protocol); try { if (!transport.isOpen()) {