Hive CLI 실행 프로세스 분석

5190 단어 Hive

1. 시작 스크립트:


$HIVE_HOME/bin/hive --> $HIVE_HOME/bin/ext/cli.sh
입구류 org를 볼 수 있습니다.apache.hadoop.hive.cli.CliDriver

2. 포털 클래스:


org.apache.hadoop.hive.cli.CliDriver
(1) 매개 변수 해석 OptionsProcessor(-f-hiveconf-d-i 등 매개 변수 해석)process_stage1 하이비컨프의 매개 변수라면 시스템입니다.setProperty, 그리고 -d와 -hivevar를 hiveVariables에 추가합니다 (2)log4j 로그에 initHiveLog4j를 불러옵니다. (이때 HiveConf를 호출하고 그 안의 정적 변수를 초기화하여 로그의 일부 설정을 가져옵니다) (3)CliSessionState를 만들어서 HiveConf를 만들고, HiveJar를 설정합니다 (4) 매개 변수 해석process_stage2 및 매개변수를 CliSessionState(S-database-e-f-v-i 등)에 설정합니다(5)SessionState.start(CliSessionState가 SessionState에 설정됨) Hive(apache-hive-1.1.0-src/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java)를 통해 HiveDb를 생성합니다. Hive getMSC를 통해 MetaStoreClient(6) executeDriver를 가져오고 cliDriver를 생성합니다. 만약에 -e가 processLine(ss.execString)을 실행하면 (ss.fileName)을 생성합니다., ";"완전한 명령을 위해 이 명령을 실행합니다 (cli.ProcessLine 처리)

3. ProcessLine 문장 처리 프로세스


(1) 인터럽트 신호 처리 설정 – > processCmd


만약quit, exit 종료 만약source 불러오는 파일processFile 처리 만약!shell process 처리LocalCmd 정상 문장 처리(서로 다른CommandProcessor를 통해 서로 다른 문장 처리)hiveCommand를 통해 서로 다른 Processor 실행
set           SetProcessor, , SessionState HiveConf 。 
dfs           DfsProcessor, hadoop  FsShell hadoop 。 
add         AddResourceProcessor   SessionState resource_map , job  Hadoop Distributed Cache。 
delete    DeleteResourceProcessor SessionState resource_map 。
list         ListResourceProcessor   

HiveCommand가 null인 경우 Driver의 run 함수를 실행합니다.

(2) Driver run 실행 runInternal

   hive.exec.driver.run.hooks  hook ,hive  
 compileInternal  
 execute  

(3) compileInternal 컴파일


구문 분석(HiveParse.를 통해 해석)이 수행될 때 구문의 TOK 유형(예: TOK_SHOWDATABASES, TOK_SHOWTABLES, TOK_QUERY)을 가져옵니다.
의미 분석 BaseSemanticAnalyzer sem = SemanticAnalyzer Factory.get(conf, tree);
서로 다른 나무를 통해.getType을 사용하여 다른 의미 분석 생성하기
 TOK_EXPLAIN --->  ExplainSemanticAnalyzer
 TOK_EXPLAIN_SQ_REWRITE --> ExplainSQRewriteSemanticAnalyzer
 TOK_LOAD     ---> LoadSemanticAnalyzer
 TOK_EXPORT -->ExportSemanticAnalyzer
 TOK_IMPORT -->ImportSemanticAnalyzer
 DDLSemanticAnalyzer  (ALTER, SHOW GRANT  )
 TOK_QUERY  SeManticAnalyzer(select , insert)
hive.semantic.analyzer.hook , sem.analyze  preAnalyze   postAnalyze
plan = new QueryPlan()
plan.getFetchTask().initialize(conf,plan,null)   FetchTask
schema = getSchema()   schema
sem.skipAuthorization()   doAuthorization     

4. DDLSemanticAnlyzer 및 SeManticAnalyzer 분석


(1) DDLSemanticAnlyzer – >analyzeInternal – > 다른 TOK 다른 처리 – > 예를 들어 TOK_SHOWDATABASES – >analyzeShowDatabases – > rootTasks DDLWork 작업 추가 – > setFetchTask (반환된 schema 가져오기)
(2) SemanticAnlyzer – >analyzeInternal – >doPhase1 (AST 트리 분석, AST 쿼리 하위 블록으로 분할) – >getMetaData(메타데이터 정보 얻기) – >genOpTree (논리적 실행 계획 생성) – >Optimizer.optimize(논리적 실행 계획 최적화) – >TaskCompile.compile(물리적 실행 계획을 실행하고 MR, TEZ, Spark를 선택하여 TaskCompile Factory를 통해 구체적으로 얻을 수 있습니다).compile 과정에서 rootTasks에 임무를 넣습니다.

5. doAuthorization


doAuthorization – > isAuthorizationModeV2 – > getAuthorizationMode – > setupAuth – > hive를 통해.security.authenticator.관리자가 authenticator 가져오기 – > hive를 통해.security.authorization.관리자는 authorizer get Authorize Provider Manager를 가져와서 되돌아오는 것이null인지 아닌지를 통해 auth V1인지 auth V2인지 판단합니다. 만약class가 Hive Authorization Provider를 계승한다면 되돌아오는 것이null이 아니라면.null을 위해 HiveUtils를 통과하면.getAuthorizerFactory 권한 수여 Factory 획득.auth V2 버전으로 돌아갑니다.

6. 컴파일된 execute 실행


(1)hive를 통해.exec.pre.hooks Get all the pre execution hooks and execute them
(2) getRootTasks 모든 task 가져오기
(3) task를 driverCxt에 넣기(driverCxt.addToRunnable)
(4) TaskRuner를 통해 작업을 시작합니다.TaskRunner.runSequential –> tsk.executeTask () – >execute (task마다 다른 execute를 수행) 작업 유형: apache-hive-1.1.0-src\ql\src\java\org\apache\hadoop\hive\ql\exec\TaskFactory를 검사할 수 있습니다.java에서 어떤 작업 유형이 있는지 확인하십시오.기본 DDLWork, FunctionWork, MapredWordk, TezWork(물리적 실행 계획이 tez를 통과하는 경우)

좋은 웹페이지 즐겨찾기