• hive CliDriver 源码分析


    664行 CliDriver main启动

    public static void main(String[] args) throws Exception {
    int ret = new CliDriver().run(args);
    System.exit(ret);
    }

    646行

    public int run(String[] args) throws Exception {

    OptionsProcessor oproc = new OptionsProcessor();
    if (!oproc.process_stage1(args)) {
    return 1;
    }

    OptionsProcessor oproc = new OptionsProcessor();

    OptionsProcessor 初始化  所有options

    解析 options  args
    if (!oproc.process_stage1(args)) {

    在new CliDriver()

      public CliDriver() {
        SessionState ss = SessionState.get();
        conf = (ss != null) ? ss.getConf() : new Configuration();
        Logger LOG = LoggerFactory.getLogger("CliDriver");
        if (LOG.isDebugEnabled()) {
          LOG.debug("CliDriver inited with classpath {}", System.getProperty("java.class.path"));
        }
        console = new LogHelper(LOG);
      }
    SessionState.get();
    看 SessionState.get
    public static SessionState get() {
        return tss.get().state;
      }

    tss.是threadlocal  ,threadlocal我想大家都知道,解决多线程共享问题。 threadlocal 包装了一个hashmap 其中key 是this 当前线程。

      private static ThreadLocal<SessionStates> tss = new ThreadLocal<SessionStates>() {
        @Override
        protected SessionStates initialValue() {
          return new SessionStates();
        }
      };
    重新 initialValue 当值不存在 new 一个

    看看SessionStates
      private static class SessionStates {
        private SessionState state;
        private HiveConf conf;
        private void attach(SessionState state) {
          this.state = state;
          attach(state.getConf());
        }
        private void attach(HiveConf conf) {
          this.conf = conf;
    
          ClassLoader classLoader = conf.getClassLoader();
          if (classLoader != null) {
            Thread.currentThread().setContextClassLoader(classLoader);
          }
        }
      }

    看到

    SessionStates 大家明白了
    SessionStates 包含两部分
    HiveConf 
    SessionState 
    看看
    SessionState 代码
    private static final Logger LOG = LoggerFactory.getLogger(SessionState.class);
    
      private static final String TMP_PREFIX = "_tmp_space.db";
      private static final String LOCAL_SESSION_PATH_KEY = "_hive.local.session.path";
      private static final String HDFS_SESSION_PATH_KEY = "_hive.hdfs.session.path";
      private static final String TMP_TABLE_SPACE_KEY = "_hive.tmp_table_space";
      static final String LOCK_FILE_NAME = "inuse.lck";
      static final String INFO_FILE_NAME = "inuse.info";
    
      private final Map<String, Map<String, Table>> tempTables = new HashMap<String, Map<String, Table>>();
      private final Map<String, Map<String, ColumnStatisticsObj>> tempTableColStats =
          new HashMap<String, Map<String, ColumnStatisticsObj>>();
    
      protected ClassLoader parentLoader;
    
      // Session-scope compile lock.
      private final ReentrantLock compileLock = new ReentrantLock();
    
      /**
       * current configuration.
       */
      private final HiveConf sessionConf;
    
      /**
       * silent mode.
       */
      protected boolean isSilent;
    
      /**
       * verbose mode
       */
      protected boolean isVerbose;
    
      /**
       * The flag to indicate if the session serves the queries from HiveServer2 or not.
       */
      private boolean isHiveServerQuery = false;
    
      /**
       * The flag to indicate if the session using thrift jdbc binary serde or not.
       */
      private boolean isUsingThriftJDBCBinarySerDe = false;
    
      /**
       * The flag to indicate if the session already started so we can skip the init
       */
      private boolean isStarted = false;
      /*
       * HiveHistory Object
       */
      protected HiveHistory hiveHist;
    
      /**
       * Streams to read/write from.
       */
      public InputStream in;
      public PrintStream out;
      public PrintStream info;
      public PrintStream err;

    上面部分代码 可以看出部分命令行的

    的值。

     
     
  • 相关阅读:
    用Delphi创建windows服务程序
    如何把程序手工添加系统服务
    http://www.ebooksearchengine.com/albpmpapiebookall.html
    C语言函数二维数组传递方法
    计算程序运行时间(C语言)
    快排序(递归算法)
    厄拉多塞筛(C语言)
    C语言中实现数组的动态增长
    [转]四种流行的Javascript框架jQuery,Mootools,Dojo,ExtJS的对比
    [存档]使用.Net开发web程序时现在比较流行的前台技术都有什么?
  • 原文地址:https://www.cnblogs.com/itxuexiwang/p/6288544.html
Copyright © 2020-2023  润新知