跳至内容
2. Hive编译
在 GitHub 编辑

Hive编译

  • 拉取源码
cd /opt/software/source
git clone https://git-wip-us.apache.org/repos/asf/hive.git
  • 修改pom.xml,将guava的版本改为如下版本
<guava.version>27.0-jre</guava.version>
  • 修改以下文件中关于 com.google.common.util.concurrent.Futures#addCallback 的调用

    • src\java\org\apache\hadoop\hive\llap\AsyncPbRpcProxy.java
    //173行
    Futures.addCallback(
        future,
        new ResponseCallback<U>(
            request.getCallback(), nodeId, this)
        ,executor);
    
    //278行
    Futures.addCallback(requestManagerFuture, new FutureCallback<Void>() {
        @Override
        public void onSuccess(Void result) {
            LOG.info("RequestManager shutdown");
        }
    
        @Override
        public void onFailure(Throwable t) {
            if (!(t instanceof CancellationException)) {
                LOG.warn("RequestManager shutdown with error", t);
            }
        }
    }, requestManagerExecutor);
    • src\java\org\apache\hadoop\hive\llap\daemon\impl\AMReporter.java
    //162行
    Futures.addCallback(queueLookupFuture, new FutureCallback<Void>() {
      @Override
      public void onSuccess(Void result) {
        LOG.info("AMReporter QueueDrainer exited");
      }
    
      @Override
      public void onFailure(Throwable t) {
        if (t instanceof CancellationException && isShutdown.get()) {
          LOG.info("AMReporter QueueDrainer exited as a result of a cancellation after shutdown");
        } else {
          LOG.error("AMReporter QueueDrainer exited with error", t);
          Thread.getDefaultUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), t);
        }
      }
    }, queueLookupExecutor);
    
    //266行
    Futures.addCallback(future, new FutureCallback<Void>() {
      @Override
      public void onSuccess(Void result) {
        LOG.info("Sent taskKilled for {}", taskAttemptId);
      }
    
      @Override
      public void onFailure(Throwable t) {
        LOG.warn("Failed to send taskKilled for {}. The attempt will likely time out.",
            taskAttemptId);
      }
    }, executor);
    
    //331行
    Futures.addCallback(future, new FutureCallback<Void>() {
      @Override
      public void onSuccess(Void result) {
        // Nothing to do.
      }
    
      @Override
      public void onFailure(Throwable t) {
        QueryIdentifier currentQueryIdentifier = amNodeInfo.getQueryIdentifier();
        amNodeInfo.setAmFailed(true);
        LOG.warn("Heartbeat failed to AM {}. Marking query as failed. query={}",
          amNodeInfo.amNodeId, currentQueryIdentifier, t);
        queryFailedHandler.queryFailed(currentQueryIdentifier);
      }
    }, executor);
    • src\java\org\apache\hadoop\hive\llap\daemon\impl\LlapTaskReporter.java
    //131行
    Futures.addCallback(future, new HeartbeatCallback(errorReporter), heartbeatExecutor);
    • src\java\org\apache\hadoop\hive\llap\daemon\impl\TaskExecutorService.java
    //178行
    Futures.addCallback(future, new WaitQueueWorkerCallback(), executionCompletionExecutorServiceRaw);
    
    //692行
    Futures.addCallback(future, wrappedCallback, executionCompletionExecutorService);
    • src\java\org\apache\hadoop\hive\llap\tezplugins\LlapTaskSchedulerService.java
    //747行
    Futures.addCallback(nodeEnablerFuture, new LoggingFutureCallback("NodeEnablerThread", LOG),nodeEnabledExecutor);
    
    //751行
    Futures.addCallback(delayedTaskSchedulerFuture,
        new LoggingFutureCallback("DelayedTaskSchedulerThread", LOG),delayedTaskSchedulerExecutor);
    
    //755行
    Futures.addCallback(schedulerFuture, new LoggingFutureCallback("SchedulerThread", LOG),schedulerExecutor);
    • src\java\org\apache\hadoop\hive\ql\exec\tez\WorkloadManager.java
    //1089行
    Futures.addCallback(future, FATAL_ERROR_CALLBACK, timeoutPool);
    
    //1923行
    Futures.addCallback(getFuture, this,timeoutPool);
    
    //1977行
    Futures.addCallback(waitFuture, this, timeoutPool);
    • src\test\org\apache\hadoop\hive\ql\exec\tez\SampleTezSessionState.java
    //121行
    Futures.addCallback(waitForAmRegFuture, new FutureCallback<Boolean>() {
      @Override
      public void onSuccess(Boolean result) {
        future.set(session);
      }
    
      @Override
      public void onFailure(Throwable t) {
        future.setException(t);
      }
    },timeoutPool);
  • 编译

mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true