摘要:?jiǎn)?dòng)作用執(zhí)行命令時(shí)實(shí)際上運(yùn)行的類是。入口解析命令行參數(shù),把的參數(shù)設(shè)置到環(huán)境變量,吧,和等參數(shù)添加到一個(gè)中初始化日志組件初始化,并根據(jù)實(shí)例化,設(shè)置輸入輸出流為標(biāo)準(zhǔn)控制臺(tái)。
hive Cli 啟動(dòng)
[toc]
CliDriver作用: 執(zhí)行命令:hive時(shí) 實(shí)際上運(yùn)行的類是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 { //解析命令行參數(shù), 把hiveconf 的參數(shù)設(shè)置到環(huán)境變量,吧define,和hivevar等參數(shù)添加到一個(gè)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,并根據(jù)HiveConf實(shí)例化CliSessionState,設(shè)置輸入輸出流為標(biāo)準(zhǔn)控制臺(tái)。 //CliSessionState 繼承了SessionState類, //創(chuàng)建了一些記錄用戶輸入的字符串,在實(shí)例化的過程中,主要是用來記錄HiveConf,并生成一個(gè)會(huì)話ID,參見SessionState構(gòu)造函數(shù). CliSessionState ss = new CliSessionState(new HiveConf(SessionState.class)); //設(shè)置ss的輸入,輸出,把對(duì)ss的和hive cli的關(guān)聯(lián)起來 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; } //根據(jù)stage1解析的參數(shù)內(nèi)容,填充CliSessionState的字符串,比如用戶輸入了-e 則這個(gè)stage就把-e 對(duì)應(yīng)的字符串賦值給CliSessionState的 execString成員。 // -S 表示 沉默狀態(tài) // -e 獲取執(zhí)行sql // -f 獲取要執(zhí)行的sql文件 // -v 是否詳細(xì)顯示 // 其他, 處理hiveconf 和 i 等參數(shù) if (!oproc.process_stage2(ss)) { return 2; } //在允許打印輸出的模式下,如果日志初始化失敗,打印失敗信息 if (!ss.getIsSilent()) { if (logInitFailed) { System.err.println(logInitDetailMessage); } else { SessionState.getConsole().printInfo(logInitDetailMessage); } } //將用戶命令行輸入的配置信息和變量等,覆蓋HiveConf的默認(rèn)值 // set all properties specified via command line HiveConf conf = ss.getConf(); for (Map.Entry初始化cli命令
private int executeDriver(CliSessionState ss, HiveConf conf, OptionsProcessor oproc) throws Exception { CliDriver cli = new CliDriver(); cli.setHiveVariables(oproc.getHiveVariables()); //設(shè)置使用的數(shù)據(jù)庫(kù) // use the specified database if specified cli.processSelectDatabase(ss); // Execute -i init files (always in silent mode) cli.processInitFiles(ss); //如果傳遞了要執(zhí)行的sql 執(zhí)行后退出 if (ss.execString != null) { int cmdProcessStatus = cli.processLine(ss.execString); return cmdProcessStatus; } //執(zhí)行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 語句,如果是以 ; 結(jié)尾,則開始執(zhí)行sql while ((line = reader.readLine(curPrompt + "> ")) != null) { if (!prefix.equals("")) { prefix += " "; } if (line.trim().endsWith(";") && !line.trim().endsWith(";")) { line = prefix + line; //開始執(zhí)行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; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/35819.html
摘要:?jiǎn)?dòng)作用執(zhí)行命令時(shí)實(shí)際上運(yùn)行的類是。入口解析命令行參數(shù),把的參數(shù)設(shè)置到環(huán)境變量,吧,和等參數(shù)添加到一個(gè)中初始化日志組件初始化,并根據(jù)實(shí)例化,設(shè)置輸入輸出流為標(biāo)準(zhǔn)控制臺(tái)。 hive Cli 啟動(dòng) [toc] CliDriver 作用: 執(zhí)行命令:hive時(shí) 實(shí)際上運(yùn)行的類是org.apache.hadoop.hive.cli.CliDriver.java 。 入口 public ...
摘要:通過給用戶提供的一系列交互接口,接收到用戶的指令,使用自己的,結(jié)合元數(shù)據(jù),將這些指令翻譯成,提交到中執(zhí)行,最后,將執(zhí)行返回的結(jié)果輸出到用戶交互接口。什么是Hivehive簡(jiǎn)介hive是由Facebook開源用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計(jì)工具,是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表,并提供類 SQL查詢功能。Hive本質(zhì)將HQL轉(zhuǎn)化成MapReduce程序。...
閱讀 2272·2021-11-16 11:51
閱讀 3501·2021-09-26 10:14
閱讀 1788·2021-09-22 15:58
閱讀 1094·2019-08-30 15:52
閱讀 2012·2019-08-30 15:43
閱讀 2612·2019-08-30 13:46
閱讀 907·2019-08-30 13:10
閱讀 1020·2019-08-29 18:32