Таблица, загруженная через Spark, недоступна в Hive - PullRequest
0 голосов
/ 11 октября 2018

Таблица Hive, созданная с помощью Spark (pyspark), недоступна из Hive.

df.write.format("orc").mode("overwrite").saveAsTable("db.table")

Ошибка при доступе из Hive:

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

Таблица успешно создается в Hive и может читать эту таблицу обратно в искре.Доступны метаданные таблицы (в Hive) и файл данных в каталоге таблицы (в hdfs).

TBLPROPERTIES таблицы Hive:

  'bucketing_version'='2',                         
  'spark.sql.create.version'='2.3.1.3.0.0.0-1634', 
  'spark.sql.sources.provider'='orc',              
  'spark.sql.sources.schema.numParts'='1',

Я также попытался создать таблицу с другими обходными путями, но получилошибка при создании таблицы:

df.write.mode("overwrite").saveAsTable("db.table")

ИЛИ

df.createOrReplaceTempView("dfTable")
spark.sql("CREATE TABLE db.table AS SELECT * FROM dfTable")

Ошибка:

AnalysisException: u'org.apache.hadoop.hive.ql.metadata.HiveException: MetaException (сообщение: Таблица default.src не прошла строгие проверки управляемой таблицы по следующей причине: таблица помечена как управляемая таблица, но не является транзакционной.); '

Сведения о версии стека:

Spark2.3

Hive3.1

Платформа данных Hortonworks HDP3.0

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Я столкнулся с той же проблемой после установки следующих свойств, она работает нормально.

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;
set hive.support.concurrency=true;
set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
0 голосов
/ 21 января 2019

Начиная с HDP 3.0, каталоги для Apache Hive и Apache Spark отделены и используют собственный каталог;а именно, они являются взаимоисключающими - каталог Apache Hive может быть доступен только через Apache Hive или эту библиотеку, а каталог Apache Spark может быть доступен только через существующие API-интерфейсы в Apache Spark.Другими словами, некоторые функции, такие как таблицы ACID или Apache Ranger с таблицей Apache Hive, доступны только через эту библиотеку в Apache Spark.Эти таблицы в Hive не должны быть непосредственно доступны в самих API-интерфейсах Apache Spark.

  • Ниже в статье объясняются шаги:

Интеграция Apache Hive с Apache Spark - HiveСкладской разъем

...