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를 통과하는 경우)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Hive 통합 ElasticSearch역할: Hive 데이터를 Es에 직접 입력 Index 를 생성합니다 Type의 매핑을 생성합니다 es-hive 관련 Jar 패키지를 다운로드하여 HDFS에 넣습니다 Hive 관련 JAR 패키지 추가 ES 외부 테이블...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.