参考:https://issues.apache.org/jira/browse/HIVE-21489
問題の(A)説明:
ハイブ-2.3.4执行 ハイブ-2.3.4にSRC SELECT * FROM説明
报错:ClassCastExceptionが発生:org.apache.hadoop.hive.ql.parse.ExplainSemanticAnalyzerはorg.apache.hadoop.hive.ql.parse.SemanticAnalyzerにキャストすることはできません
(B)溶液
- ハイブ-2.3.4のソースコードを検索します。
- レビューカテゴリ: / QL / SRC / Javaの/ ORG / Apacheの/ Hadoopの/ハイブ/ QL / Driver.java
差分 --git A / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL / Driver.java B / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL / Driver.javaの インデックスcac14a6 .. 70a8028 100644 --- / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL / Driver.java +++ B / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL / Driver.java @@ - 114、6 + 114、7 @@ ;インポートorg.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer 輸入org.apache.hadoop.hive.ql.parse.ColumnAccessInfo; 輸入org.apache.hadoop.hive.ql.parse.ExplainConfiguration.AnalyzeState。 + 輸入org.apache.hadoop.hive.ql.parse.ExplainSemanticAnalyzer。 輸入org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext。 輸入org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContextImpl。 輸入org.apache.hadoop.hive.ql.parse.ImportSemanticAnalyzer。 @@ - 1292年、10 + 1293、14 @@プライベートの静的な無効getTablePartitionUsedColumns(HiveOperationオペアンプ、BaseSemanticA // (par2Cols)または // テーブルの列へのマッピング(tab2Cols) の場合(op.equals(HiveOperation.CREATETABLE_AS_SELECT)|| オペアンプ。等号(HiveOperation.QUERY)){ - SemanticAnalyzer querySem = (SemanticAnalyzer)SEM; - ParseContext parseCtx = querySem.getParseContext(); + ParseContext parseCtx; + もし(ExplainSemanticAnalyzerのinstanceof SEM){ + parseCtx = ((ExplainSemanticAnalyzer)SEM).getParseContext(); +} 他{ + parseCtx = ((SemanticAnalyzer)SEM).getParseContext(); + } - 用(のMap.Entry <文字列、TableScanOperator> topOpMap:querySem.getParseContext()getTopOps() + ため(のMap.Entry <文字列、TableScanOperator> topOpMap:parseCtx.getTopOps() .entrySet()){ TableScanOperator tableScanOp = topOpMap.getValue()。 場合(!tableScanOp.isInsideView()){
レビューカテゴリ:/ QL / SRC / Javaの/ ORG / Apacheの/ Hadoopの/ハイブ/ QL /パース/ ExplainSemanticAnalyzer.java
差分 --git A / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL /パース/ ExplainSemanticAnalyzer.java B / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL /パース/ ExplainSemanticAnalyzer.java インデックス6d7af38..73ba8e3 100644 --- / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL /パース/ ExplainSemanticAnalyzer.java +++ B / QL / SRC / javaの/組織/ apacheの/ Hadoopの/ハイブ/ QL /パース/ ExplainSemanticAnalyzer.java @@ - 56、6 + 56、7つの@@ ExplainSemanticAnalyzerがBaseSemanticAnalyzer {延びパブリッククラス 一覧 <FieldSchema> フィールドリスト。 ExplainConfigurationの設定。 + ParseContext pCtx =ヌル; 公共ExplainSemanticAnalyzer(QueryState queryState)はSemanticException {スロー スーパー(queryState)を、 @@ - 189、7 + 190、6 @@公共ボイドanalyzeInternal(ASTノードのAST)がスローSemanticException { fetchTask.getWork()initializeForFetch(ctx.getOpContext())。 } - ParseContext pCtx = NULL ; もし(SemanticAnalyzerのinstanceof SEM){ pCtx = ((SemanticAnalyzer)SEM).getParseContext(); } @@ - 285、4 + 285、7 @@パブリックブールskipAuthorization(){ ExplainTask instanceofの戻りタスク && ((ExplainTask)タスク).getWork()isAuthorize()。 } + 公共ParseContext getParseContext(){ + pCtxを返します。 + } }
ハイブ-EXEC-2.3.4.jarを交換3.コンパイル済みのクラスファイル、
4.次のコマンドを実行します(取り付けられている場合、必須ではありません)
セット= hive.security.authorization.enabled 真。 hive.execution.engineがセット = ミスター。 hive.security.authorization.managerセット = org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProviderを。