ошибка зажигания при чтении таблицы улья - PullRequest
3 голосов
/ 06 февраля 2020

я пытаюсь сделать выбор * из базы данных dab.ab c в улье, эта таблица улья была загружена с использованием spark

, это не работает, показывает ошибку:

Ошибка: java .io.IOException: java .lang.IllegalArgumentException: bucketId вне диапазона: -1 (состояние =, код = 0)

, когда я использовал следующие свойства, я был в состоянии запросить улей:

set hive.mapred.mode=nonstrict;
set hive.optimize.ppd=true;
set hive.optimize.index.filter=true;
set hive.tez.bucket.pruning=true;
set hive.explain.user=false; 
set hive.fetch.task.conversion=none;

теперь, когда я пытаюсь прочитать ту же таблицу улья db.ab c, используя искру, я получаю ошибку, как показано ниже:

Клиенты могут получить доступ к этой таблице, только если у них есть следующие возможности: CONNECTORREAD, HIVEFULLACIDREAD, HIVEFULLACIDWRITE, HIVEMANAGESTATS, HIVECACHEINVALIDATE, CONNECTORWRITE. Эта таблица может быть таблицей ACID, управляемой Hive, или требовать какой-то другой возможности, которую Spark в настоящее время не реализует; в орг. apache .spark. sql .catalyst.catalog.CatalogUtils $ .throwIfNoAccess (ExternalCatalogUtils. scala: 280) в орг. apache .spark. sql .hive.HiveTranslationLayerCheck $$ anonfun $ apply $ 1.applyOrElse (HiveTranslationLayerStrategies. scala: 105) в org. apache .spark. sql .hive.HiveTranslationLayerCheck $$ anonfun $ apply $ 1.applyOrElse (HiveTranslationLayerStrategies. scala). 1035 * .spark. sql .catalyst.trees.TreeNode $$ anonfun $ transformUp $ 1.apply (TreeNode. scala: 289) в org. apache .spark. sql .catalyst.trees.TreeNode $ $ anonfun $ transformUp $ 1.apply (TreeNode. scala: 289) в org. apache .spark. sql .catalyst.trees.CurrentOrigin $ .withOrigin (TreeNode. scala: 70) в org. apache .spark. sql .catalyst.trees.TreeNode.transformUp (TreeNode. scala: 288) в org. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 3.apply ( TreeNode. scala: 286) в орг. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 3.apply (TreeNode. scala: 286) в орг. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 4.Apply (TreeNode. scala: 306) в орг. apache .spark. sql .catalyst.trees.TreeNode.mapProductIterator (TreeNode. scala: 187) в орг. apache .spark. sql .catalyst.trees. TreeNode.mapChildren (TreeNode. scala: 304) в орг. apache .spark. sql .catalyst.trees.TreeNode.transformUp (TreeNode. scala: 286) в орг. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 3.apply (TreeNode. scala: 286) в org. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 3.apply (TreeNode . scala: 286) в орг. apache .spark. sql .catalyst.trees.TreeNode $$ anonfun $ 4.apply (TreeNode. scala: 306) в орг. apache .spark. sql .catalyst.trees.TreeNode.mapProductIterator (TreeNode. scala: 187) в орг. apache .spark. sql .catalyst.trees.TreeNode.mapChildren (TreeNode. scala: 304) в орг. . apache .spark. sql .catalyst.trees.TreeNode.transformUp (TreeNode. scala: 286) в org. apache .spark. sql .hive.HiveTranslationLayerCheck.apply (HiveTranslationLayerStrategies. scala: 85) в орг. apache .spark. sql .hive.HiveTranslationLayerCheck.apply (HiveTranslationLayerStrategies. scala: 83) в org. apache .spark. sql .catalyst.rules.RuleExecutor $$ anonfun $ execute $ 1 $$ anonfun $ apply $ 1.apply (RuleExecutor. scala: 87) в org. apache. spark. sql .catalyst.rules.RuleExecutor $$ anonfun $ execute $ 1 $$ anonfun $ apply $ 1.apply (RuleExecutor. scala: 84) в scala .collection.LinearSeqOptimized $ class.foldLeft (LinearSeqOptimized. scala: 124) в scala .collection.immutable.List.foldLeft (List. scala: 84) в org. apache .spark. sql .catalyst.rules.RuleExecutor $$ anonfun $ execute $ 1 .apply (RuleExecutor. scala: 84) в орг. apache .spark. sql .catalyst.rules.RuleExecutor $$ anonfun $ execute $ 1.apply (RuleExecutor. scala: 76) в scala .collection.immutable.List.foreach (List. scala: 392) в org. apache .spark. sql .catalyst.rules.RuleExecutor.execute (RuleExecutor. scala: 76) в org. apache .spark. sql .catalyst.analysis.Analyzer.org $ apache $ spark $ sql $ катализатор анализ $ $ Analyzer $$ executeSameContext (Analyzer. scala: 124) в орг. apache .spark. sql .catalyst.analysis.Analyzer.execute (Analyzer. scala: 118) в орг. apache .spark. sql .Catalyst.analysis.Analyzer. executeAndCheck (Analyzer. scala: 103) в орг. apache .spark. sql .execution.QueryExecution.analyzed $ lzycompute (QueryExecution. scala: 57) в орг. apache .spark. sql .execution.QueryExecution.analyzed (QueryExecution. scala: 55) в орг. apache .spark. sql .execution.QueryExecution.assertAnalyzed (QueryExecution. scala: 47) в орг. apache. spark. sql .Dataset $ .ofRows (Набор данных. scala: 74) в орг. apache .spark. sql .SparkSession. sql (SparkSession. scala: 642) ... 49 elided

мне нужно добавить какие-либо свойства в spark-submit или shell? или как можно альтернативно прочитать эту таблицу Hive, используя формат образца таблицы ульев Spark

:

  CREATE TABLE `hive``(                   |
|   `c_id` decimal(11,0),etc.........       
  ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'      |
| WITH SERDEPROPERTIES (  
 STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'  |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |
 LOCATION                                           |
|  path= 'hdfs://gjuyada/bbts/scl/raw' |
| TBLPROPERTIES (                                    |
|   'bucketing_version'='2',                         |
|   'spark.sql.create.version'='2.3.2.3.1.0.0-78',   |
|   'spark.sql.sources.provider'='orc',              |
|   'spark.sql.sources.schema.numParts'='1',         |
|   'spark.sql.sources.schema.part.0'='{"type":"struct","fields":
[{"name":"Czz_ID","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"DzzzC_CD","type":"string","nullable":true,"metadata":{}},
{"name":"C0000_S_N","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"P_ _NB","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"C_YYYY","type":"string","nullable":true,"metadata":{}},"type":"string","nullable":true,"metadata":{}},{"name":"Cv_ID","type":"string","nullable":true,"metadata":{}},
|   'transactional'='true',                          |
|   'transient_lastDdlTime'='1574817059')  

1 Ответ

3 голосов
/ 06 февраля 2020

Проблема, которую вы пытаетесь прочитать Transactional table(transactional = true) в Spark.

Официально Spark еще не поддерживается для Hive-ACID таблица, получите full dump/incremental dump of acid table в обычную hive orc/parquet секционированную таблицу, затем прочитайте данные, используя искру.

Там Open Jira saprk-15348 для добавления поддержки чтения таблицы Hive ACID.

  • Если вы запускаете major compaction в таблице Acid (из улья), затем spark может читать base_XXX только каталоги, но не дельта-каталоги Spark-16996 , адресованные в этом jira.

  • Существует несколько обходных путей для чтения кислотных таблиц с использованием SPARK-LLAP , как указано в этой ссылке.

  • Я думаю начиная с HDP-3.X HiveWareHouseConnector поддерживает чтение таблиц HiveAcid.

  • Вы можете создать snapshot таблицы транзакций как non transactional и т Затем прочитайте данные из таблицы.

    create table <non_trans> stored as orc as select * from <transactional_table>


UPDATE:

1.Создать внешнюю таблицу кустов:

 CREATE external TABLE `<ext_tab_name>`(  
       <col_name>       <data_type>....etc
           )
    stored as orc
    location '<path>';

2. Затем перезаписать в вышеуказанную внешнюю таблицу существующие данные таблицы транзакций.

 insert overwrite table <ext_tab_name> select * from <transactional_tab_name>;
...