задний план
Эта статья о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
, здесь упоминается файл конфигурации улья, проверьте содержимое файла конфигурации:
подсказка версии
Обратите внимание на информацию INFO:HiveMetastoreConnection version 3.0
, все соответствующие подсказки говорят, что это версия hive3.x.Согласно отзывам мелких партнеров, spark-sql без каких-либо препятствий считывает таблицу данных улья в предыдущей версии hive2.x, поэтому это изменение обновления версии быть проверенным!
Практическое решение (временное решение)
Скопируйте конфигурацию улья напрямую
- Создайте резервную копию или удалите файл hive-site.xml в исходной искре,Скопируйте hive-site.xml в каталог установки улья, чтобы запустить conf!
Это все еще копия, но hive-site.xml уже существует в spark, когда пользователи Ambari устанавливают кластер, и этой проблемы не было в предыдущей версии hive, что может сбивать с толку.
- Запустите spark-sql снова, если сообщается об ошибке, связанной с tez, напрямуюУдалите все конфигурации tez в файле hive-site.xml.Вот и все!
- Запустите 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: