Как я могу заставить pyspark и Spark SQL выполнить Hive on Spark? - PullRequest
0 голосов
/ 23 февраля 2020

Я установил и настроил Spark на пряже вместе с интеграцией Spark с таблицами кустов . Используя spark-shell / pyspark, я также следую простому учебнику и достигаю создания таблицы Hive, загрузки данных и правильного выбора.

Затем я перехожу к следующему шагу, настройка Hive on Spark . Используя hive / beeline, я также добиваюсь создания таблицы Hive, загрузки данных и правильного выбора. Улей выполнен на YARN / Spark правильно. Как я знаю, что это работает? Оболочка hive отображает следующее: -

hive> select sum(col1) from test_table;
....
Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
--------------------------------------------------------------------------------------
          STAGES   ATTEMPT        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED
--------------------------------------------------------------------------------------
Stage-0 ........         0      FINISHED      3          3        0        0       0
Stage-1 ........         0      FINISHED      1          1        0        0       0
--------------------------------------------------------------------------------------
STAGES: 02/02    [==========================>>] 100%  ELAPSED TIME: 55.26 s
--------------------------------------------------------------------------------------
Spark job[0] finished successfully in 55.26 second(s)
OK
6
Time taken: 99.165 seconds, Fetched: 1 row(s)

Пользовательский интерфейс менеджера ресурсов также отображает приложение RUNNING как Hive on Spark (sessionId = ....), и я могу посетить ApplicationMaster для просмотра подробного запроса как ну.

Текущий шаг, которого я пока не могу достичь, - это интеграция pyspark / SparkSQL в Hive on Spark.

Что я пытаюсь.

  1. Редактировать $SPARK_HOME/conf/hive-site.xml как hive.execution.engine=spark.
    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>
        <description>
            Expects one of [mr, tez, spark].
        </description>
    </property>
Войдите в pyspark с помощью bin/pyspark и отметьте hive.execution.engine.
>>> spark.sql("set spark.master").show()
+------------+-----+
|         key|value|
+------------+-----+
|spark.master| yarn|
+------------+-----+

>>> spark.sql("set spark.submit.deployMode").show()
+--------------------+------+
|                 key| value|
+--------------------+------+
|spark.submit.depl...|client|
+--------------------+------+

>>> spark.sql("set hive.execution.engine").show()
+--------------------+-----------+
|                 key|      value|
+--------------------+-----------+
|hive.execution.en...|<undefined>|
+--------------------+-----------+
Поскольку никакого значения для hive.execution.engine нет (весьма удивительно! Я установил сайт улья. xml!), Я решил установить его вручную следующим образом: -
>>> spark.sql("set hive.execution.engine=spark")
>>> spark.sql("set hive.execution.engine").show()
+--------------------+-----+
|                 key|value|
+--------------------+-----+
|hive.execution.en...|spark|
+--------------------+-----+
Выберите данные из Hive с помощью Spark SQL
>>> spark.sql("select sum(col1) from test_table").show()
+---------+
|sum(col1)|
+---------+
|        6|
+---------+
Даже результат отображается, но приложение не отображается в диспетчере ресурсов. Я понимаю, что SparkSQL не использует Hive On Spark. Я понятия не имею об этом.

Вопрос в том,

  1. Как я могу заставить pyspark / SparkSQL использовать Hive on Spark?
  2. Подходит ли так, чтобы ускориться и отойти от mr механизма исполнения?
  3. Могу ли я смешивать и сочетать с неправильным ингредиентом? или это невозможно?

1 Ответ

1 голос
/ 23 февраля 2020

«Hive on Spark» - это сокращение от «HiveServer2 по умолчанию использует механизм исполнения Spark» .

  • Какие клиенты службы HS2 ? Приложения, которые рассматривают Hive как обычную базу данных , подключаясь через JDB C (приложения Java / Scala, такие как beeline) или ODB C (сценарии R, Windows приложения) или DBI (Python приложения и скрипты) и отправка SQL запросов
  • Относится ли это к заданиям Spark? Нет ...! Spark хочет получить доступ к файлам данных. По сути, Spark является собственным механизмом базы данных; есть даже Spark ThriftServer, который можно использовать в качестве (грубой) замены для HS2.


Когда Spark создан для взаимодействия с Hive V1 или Hive V2, он взаимодействует только с MetaStore сервис - то есть каталог метаданных, который позволяет нескольким системам (HiveServer2 / Presto / Impala / Spark jobs / Spark ThriftServer / et c) совместно использовать одно и то же определение для «баз данных» и «таблиц» ", включая расположение файлов данных (т. е. каталоги HDFS / псевдокаталоги S3 / et c)

Но каждая система имеет свои собственные библиотеки для чтения и записи в" таблицы "- HiveServer2 использует задания YARN (с возможностью выбора механизмов исполнения, таких как MapReduce, TEZ, Spark); Impala и Presto имеют свои собственные механизмы исполнения, работающие за пределами YARN; Spark имеет собственный механизм выполнения, работающий внутри или за пределами YARN.

И, к сожалению, эти системы не координируют свои операции чтения / записи, что может быть настоящим беспорядком (т. Е. Запрос Hive SELECT может обработать sh потому что задание Spark только что удалило файл при перестроении раздела, и наоборот) , хотя Metastore предоставляет API для управления блокировками чтения / записи в ZooKeeper. По-видимому, только HS2 поддерживает этот API, и по умолчанию он даже не активен.

PS: Hive LLAP - это еще одна система, которая использует YARN с TEZ (никакой другой опции), но с дополнительным уровнем постоянство и сетка памяти для кэширования - то есть не ваш обычный HiveServer2, а эволюция, которую HortonWorks представил в качестве конкурента Impala и Presto.


Когда Spark создан для взаимодействия с Hive V3 "HortonWorks-style", есть ловушка:
  • по умолчанию HiveServer2 управляет "таблицами ACID" с указанным c форматом данных (вариант OR C), который Spark не поддерживает
  • по умолчанию Metastore препятствует тому, чтобы Spark знал о любой таблице HiveServer2, используя разные пространства имен для HS2 и Spark, что фактически сводит на нет цель иметь один общий каталог ... !!
  • Следовательно, Horton предоставляет Spark специальный «соединитель» для доступа к таблицам Hive через HS2, что сводит на нет цель использования Spark. E ngine ... !!

Поскольку Хортон был поглощен Клодерой, будущее интеграции Spark с Metastore неясно. Большинство хороших частей из дистрибутива Horton заменяют хромые (или отсутствующие) части Cloudera; но это конкретное c развитие не было явно хорошим.

...