Spark-SQL не может прочитать новое руководство по яме базы данных Hive

Большие данные

задний план

Эта статья оspark-sqlЭтот инструмент командной строки считывает данные куста:

  • Искра 2.3.1, дистрибутив HDP
  • Улей 3.1.0, HDP
  • Взаимодействие между SparkSQL и Hive3, использование Sparksql для чтения и обработки существующих данных таблицы в кусте, но не может читать базу данных куста.
  • Кстати, SparkSQL не может читать внутреннюю таблицу улья, но может читать данные внешней таблицы улья, решение есть в конце статьи.

Сначала я был знаком с взаимодействием Spark и hive3.x.Поиски не нашел решения.Большинство говорили скопировать hive-site.xml в директорию spark.На самом деле это делалось автоматически при мой кластер был установлен.Вы можете видеть, что файл hive-site.xml уже есть в конфигурации spark.

ключевой журнал

INFO HiveUtils: Initializing HiveMetastoreConnection version 3.0 using file
INFO HiveConf: Found configuration file file:/xxx/hdp/current/spark2/conf/hive-site.xml
INFO HiveClientImpl: Warehouse location for Hive client (version 3.0.0) is /apps/spark/warehouse
INFO HiveMetaStoreClient: Opened a connection to metastore, current connections: 1
INFO HiveMetaStoreClient: Connected to metastore.

В это время spark-sql запускается нормально, есть файл конфигурации, и он показывает, что он нормально подключен к метахранилищу улья.Ключевые слова:

  • HiveMetastoreConnection version 3.0
  • Hive client (version 3.0.0)
  • Connected to metastore

В это время введите в командной строкеshow databases;и выполнить, результат будет следующим:

проблема

В результате есть только база данных по умолчанию, а других баз, созданных в улье, нет, и прочитать и обработать ее невозможно. Ожидается, что в улье отобразится несколько других имен баз данных.

решение

Устранение неполадок с файлом hive-site.xml

Заметив сообщения, напечатанные во время запуска,INFO HiveConf: Found configuration file file:/xxx/hdp/current/spark2/conf/hive-site.xml, здесь упоминается файл конфигурации улья, проверьте содержимое файла конфигурации:

Обратите внимание, что указанный выше порт не совпадает с портом, фактически используемым HiveServer! Предполагается, что в новой версии пакета интеграции spark принимает набор независимых настроек, поэтому его можно запустить в обычном режиме, но нельзя прочитать базу данных улья.

подсказка версии

Обратите внимание на информацию INFO:HiveMetastoreConnection version 3.0, все соответствующие подсказки говорят, что это версия hive3.x.Согласно отзывам мелких партнеров, spark-sql без каких-либо препятствий считывает таблицу данных улья в предыдущей версии hive2.x, поэтому это изменение обновления версии быть проверенным!

Практическое решение (временное решение)

Скопируйте конфигурацию улья напрямую

  1. Создайте резервную копию или удалите файл hive-site.xml в исходной искре,Скопируйте hive-site.xml в каталог установки улья, чтобы запустить conf!

Это все еще копия, но hive-site.xml уже существует в spark, когда пользователи Ambari устанавливают кластер, и этой проблемы не было в предыдущей версии hive, что может сбивать с толку.

  1. Запустите spark-sql снова, если сообщается об ошибке, связанной с tez, напрямуюУдалите все конфигурации tez в файле hive-site.xml.Вот и все!
  2. Запустите spark-sql в обычном режиме,show databases;(может быть, такжеrootилиsparkПроблема с правами пользователя) Он может нормально отображать другие базы данных, которые я создал в улье.

Или измените файл hive-site.xml, который поставляется со искрой.

Непосредственно измените следующие три элемента как:

    <property>
      <name>hive.server2.thrift.http.port</name>
      <value>10001</value>
    </property>

    <property>
      <name>hive.server2.thrift.port</name>
      <value>10000</value>
    </property>
    
    <property>
      <name>metastore.catalog.default</name>
      <value>hive</value>
    </property>

Spark использует тот же запас и хранилище метаданных, что и Hive.

Уведомление

  • Также кажется, что есть проблема с чтением внутренних и внешних таблиц улья (см. дополнение позже).

2019-10-11 Дополнение: Hive внесла значительные улучшения в HDP-3.0, включая улучшения производительности и безопасности, а также соответствие требованиям ACID. Spark не может читать или записывать таблицы ACID, поэтому для реализации этих улучшений были введены каталоги Hive и Hive Warehouse Connector (HWC).


Важное дополнение! Spark читает внутренние таблицы Hive3.0 (04.10.2019)

Дополнительные причины, по которым Spark не может прочитать данные внутренней таблицы куста:

  • HDP3.0 интегрирует hive 3.0 и spark 2.3.1 Spark не может прочитать данные таблицы улья, а точнее данные внутренней таблицы (таблицы управления ульем).

  • Он включен по умолчанию после улья 3.0.ACIDфункция, а новаяВнутренние таблицы по умолчанию являются таблицами ACID.(улей таблицы транзакций). В настоящее время Spark не поддерживает функцию ACID куста, поэтому он не может читать данные таблицы ACID.

  • Обратитесь к проблеме Spark:SPARK-15348 Hive ACID

временное решение

Временный ответследующее, Измените следующие параметры Hive, чтобы вновь созданная таблица не была таблицей кислот по умолчанию.

hive.strict.managed.tables=false 
hive.create.as.insert.only=false 
metastore.create.as.acid=false

Это не влияет на существующие внутренние таблицы!

Решение для документов HDP:

После инструкции @YangGod решение, данное на официальном сайте, заключается в использованииHive Warehouse Connector, но это решение не должно быть идеальным, студенты, которые его пробовали, могут сказать, хорошо оно работает или нет.

Две ссылки на документацию официального сайта HDP: