国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

hive Cli實例解析

Hujiawei / 2688人閱讀

摘要:啟動作用執行命令時實際上運行的類是。入口解析命令行參數,把的參數設置到環境變量,吧,和等參數添加到一個中初始化日志組件初始化,并根據實例化,設置輸入輸出流為標準控制臺。

hive Cli 啟動

[toc]

CliDriver

作用: 執行命令:hive時 實際上運行的類是org.apache.hadoop.hive.cli.CliDriver.java 。

入口
    public static void main(String[] args) throws Exception {
        int ret = new CliDriver().run(args);
        System.exit(ret);
    }
    public  int run(String[] args) throws Exception {
        //解析命令行參數, 把hiveconf 的參數設置到環境變量,吧define,和hivevar等參數添加到一個map中
        OptionsProcessor oproc = new OptionsProcessor();
        if (!oproc.process_stage1(args)) {
            return 1;
        }
        //初始化Log4j日志組件
        // NOTE: It is critical to do this here so that log4j is reinitialized
        // before any of the other core hive classes are loaded
        boolean logInitFailed = false;
        String logInitDetailMessage;
        try {
            logInitDetailMessage = LogUtils.initHiveLog4j();
        } catch (LogInitializationException e) {
            logInitFailed = true;
            logInitDetailMessage = e.getMessage();
        }
        //初始化HiveConf,并根據HiveConf實例化CliSessionState,設置輸入輸出流為標準控制臺。
        //CliSessionState 繼承了SessionState類,
        //創建了一些記錄用戶輸入的字符串,在實例化的過程中,主要是用來記錄HiveConf,并生成一個會話ID,參見SessionState構造函數.
        CliSessionState ss = new CliSessionState(new HiveConf(SessionState.class));
        //設置ss的輸入,輸出,把對ss的和hive cli的關聯起來
        ss.in = System.in;
        try {
            ss.out = new PrintStream(System.out, true, "UTF-8");
            ss.info = new PrintStream(System.err, true, "UTF-8");
            ss.err = new CachingPrintStream(System.err, true, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            return 3;
        }
        //根據stage1解析的參數內容,填充CliSessionState的字符串,比如用戶輸入了-e 則這個stage就把-e 對應的字符串賦值給CliSessionState的 execString成員。
        // -S 表示 沉默狀態
        // -e 獲取執行sql 
        // -f 獲取要執行的sql文件
        // -v 是否詳細顯示
        // 其他, 處理hiveconf 和 i 等參數
        if (!oproc.process_stage2(ss)) {
            return 2;
        }
        //在允許打印輸出的模式下,如果日志初始化失敗,打印失敗信息
        if (!ss.getIsSilent()) {
            if (logInitFailed) {
                System.err.println(logInitDetailMessage);
            } else {
                SessionState.getConsole().printInfo(logInitDetailMessage);
            }
        }
        //將用戶命令行輸入的配置信息和變量等,覆蓋HiveConf的默認值
        // set all properties specified via command line
        HiveConf conf = ss.getConf();
        for (Map.Entry item : ss.cmdProperties.entrySet()) {
            conf.set((String) item.getKey(), (String) item.getValue());
            ss.getOverriddenConfigurations().put((String) item.getKey(), (String) item.getValue());
        }

        // read prompt configuration and substitute variables.
        prompt = conf.getVar(HiveConf.ConfVars.CLIPROMPT);
        prompt = new VariableSubstitution(new HiveVariableSource() {
            @Override
            public Map getHiveVariable() {
                return SessionState.get().getHiveVariables();
            }
        }).substitute(conf, prompt);
        prompt2 = spacesForString(prompt);
        //設置當前回話狀態,執行CLI驅動
        SessionState.start(ss);
        //在這之前都是準備hive 參數
        try {
            return executeDriver(ss, conf, oproc);
        } finally {
            ss.close();
        }
    }
初始化cli命令
private int executeDriver(CliSessionState ss, HiveConf conf, OptionsProcessor oproc)
            throws Exception {

        CliDriver cli = new CliDriver();
        cli.setHiveVariables(oproc.getHiveVariables());
        //設置使用的數據庫
        // use the specified database if specified
        cli.processSelectDatabase(ss);

        // Execute -i init files (always in silent mode)
        cli.processInitFiles(ss);
        //如果傳遞了要執行的sql 執行后退出
        if (ss.execString != null) {
            int cmdProcessStatus = cli.processLine(ss.execString);
            return cmdProcessStatus;
        }
        //執行sql文件
        try {
            if (ss.fileName != null) {
                return cli.processFile(ss.fileName);
            }
        } catch (FileNotFoundException e) {
            System.err.println("Could not open input file for reading. (" + e.getMessage() + ")");
            return 3;
        }
        //獲取命令行的reader
        ConsoleReader reader =  getConsoleReader();
        reader.setExpandEvents(false);
        reader.setBellEnabled(false);
        // reader.setDebug(new PrintWriter(new FileWriter("writer.debug", true)));
        for (Completer completer : getCommandCompleter()) {
            reader.addCompleter(completer);
        }
        //略去一部分不重要代碼

        int ret = 0;

        String prefix = "";
        String curDB = getFormattedDb(conf, ss);
        String curPrompt = prompt + curDB;
        String dbSpaces = spacesForString(curDB);
        //開始從命令行獲取sql 語句,如果是以 ; 結尾,則開始執行sql
        while ((line = reader.readLine(curPrompt + "> ")) != null) {
            if (!prefix.equals("")) {
                prefix += "
";
            }
            if (line.trim().endsWith(";") && !line.trim().endsWith(";")) {
                line = prefix + line;
                //開始執行hive 命令
                ret = cli.processLine(line, true);
                prefix = "";
                curDB = getFormattedDb(conf, ss);
                curPrompt = prompt + curDB;
                dbSpaces = dbSpaces.length() == curDB.length() ? dbSpaces : spacesForString(curDB);
            } else {
                prefix = prefix + line;
                curPrompt = prompt2 + dbSpaces;
                continue;
            }
        }

        if (history != null) {
            history.flush();
        }
        return ret;
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69923.html

相關文章

  • hive Cli實例解析

    摘要:啟動作用執行命令時實際上運行的類是。入口解析命令行參數,把的參數設置到環境變量,吧,和等參數添加到一個中初始化日志組件初始化,并根據實例化,設置輸入輸出流為標準控制臺。 hive Cli 啟動 [toc] CliDriver 作用: 執行命令:hive時 實際上運行的類是org.apache.hadoop.hive.cli.CliDriver.java 。 入口 public ...

    oliverhuang 評論0 收藏0
  • Hive介紹

    摘要:通過給用戶提供的一系列交互接口,接收到用戶的指令,使用自己的,結合元數據,將這些指令翻譯成,提交到中執行,最后,將執行返回的結果輸出到用戶交互接口。什么是Hivehive簡介hive是由Facebook開源用于解決海量結構化日志的數據統計工具,是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,并提供類 SQL查詢功能。Hive本質將HQL轉化成MapReduce程序。...

    Tecode 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<