【ハイブ】2.3.4でコマンド投げClassCastExceptionが説明

参考: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)溶液

  1. ハイブ-2.3.4のソースコードを検索します。
  2. レビューカテゴリ:    / 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 
@@ - 1146 + 1147 @@ 
 ;インポート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 + 129314 @@プライベートの静的な無効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 
@@ - 566 + 567つの@@ 
 ExplainSemanticAnalyzerがBaseSemanticAnalyzer {延びパブリッククラス
   一覧 <FieldSchema> フィールドリスト。
   ExplainConfigurationの設定。
+ ParseContext pCtx =ヌル; 
 
   公共ExplainSemanticAnalyzer(QueryState queryState)はSemanticException {スロー
     スーパー(queryState)を、
@@ - 1897 + 1906 @@公共ボイドanalyzeInternal(ASTノードのAST)がスローSemanticException { 
       fetchTask.getWork()initializeForFetch(ctx.getOpContext())。
     }
 
 - ParseContext pCtx = NULL ;
     もし(SemanticAnalyzerのinstanceof SEM){ 
       pCtx = ((SemanticAnalyzer)SEM).getParseContext(); 
     } 
@@ - 2854 + 2857 @@パブリックブール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を。

 

おすすめ

転載: www.cnblogs.com/shix0909/p/11078695.html