Spark 2: как это работает при вызове SparkSession enableHiveSupport () - PullRequest
0 голосов
/ 04 сентября 2018

Мой вопрос довольно прост, но почему-то я не могу найти четкий ответ, прочитав документацию.

У меня есть Spark2 , работающий на кластере CDH 5.10 . Также есть Улей и Метастор.

Я создаю сеанс в моей программе Spark следующим образом:

SparkSession spark = SparkSession.builder().appName("MyApp").enableHiveSupport().getOrCreate()

Предположим, у меня есть следующий запрос HiveQL:

spark.sql("SELECT someColumn FROM someTable")

Я хотел бы знать, является ли:

  1. под капотом этот запрос переводится в примитивы Hive MapReduce, или
  2. поддержка HiveQL только на синтаксическом уровне, и Spark SQL будет использоваться под капотом.

Я делаю некоторую оценку производительности, и я не знаю, должен ли я заявлять о временной производительности запросов, выполняемых с spark.sql([hiveQL query]), относящихся к Spark или Hive.

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

"под капотом этот запрос переводится в примитивы Hive MapReduce, или поддержка HiveQL только на синтаксическом уровне, и Spark SQL будет использоваться под капотом. "

Я использую искровой SQL в Hive metastore. Чтобы проверить, переведен ли запрос в Map / Reduce или нет, нужно проверить: а. Откройте консоль Hive и выполните простой запрос SELECT с некоторым фильтром. Теперь перейдите к менеджеру ресурсов YARN. Вы увидите, что некоторые задания Map / Reduce запускаются в результате выполнения запроса. б. Запустите spark SQL с помощью HiveContext и выполните тот же SQL-запрос. Spark SQL извлечет выгоду из информации о метастазах Hive без запуска заданий Map / Reduce. Перейдите к Менеджеру ресурсов в YARN и проверьте его. Вы найдете только запущенный сеанс spark-shell, и в кластере не запускается дополнительное задание Map / Reduce.

0 голосов
/ 04 сентября 2018

Установка enableHiveSupport не означает, что запрос рассчитывается в Hive.

Речь идет только о каталоге Hive. Если вы используете enableHiveSupport, то вы можете:

  • запись и чтение в / из постоянного хранилища метастазов
  • использовать UDFs Hive
  • используйте Hive's SerDe

Все это напрямую связано с каталогом, а не с самим исполнением

Исторически также разбор Hive QL выполнялся с использованием Hive, но теперь Spark делает это без вызова Hive

Я должен заявить о временной производительности запросов, выполненных с spark.sql ([запрос hiveQL]) относится к Spark или Hive.

Как указано выше, это производительность Spark

0 голосов
/ 04 сентября 2018

Spark знает два каталога, улей и в памяти. Если вы установите enableHiveSupport(), то spark.sql.catalogImplementation будет установлено на hive, в противном случае на in-memory. Таким образом, если вы включите поддержку улья, spark.catalog.listTables().show() покажет вам все таблицы из метастаза улья.

Но это не значит, что для запроса используется улей *, это просто означает, что spark связывается с hive-metastore, механизм выполнения всегда - spark.

* на самом деле есть некоторые функции, такие как percentile und percentile_approx, которые являются UDAF собственного куста.

0 голосов
/ 04 сентября 2018

Есть три исполнительных механизма, MapReduce , Tez и Spark .

Когда вы выполняете запрос, используя hive , вы можете установить один из этих механизмов, ваши администраторы должны установить один из них в качестве механизма по умолчанию.

т.е.

set hive.execution.engine=tez;

Когда вы выполняете запрос, используя Spark , он будет использовать механизм искры для выполнения запроса.

Однако, если вы проводите анализ производительности, вам не нужно измерять время, также должны измеряться память и ИПЦ.

...