Более глубокий взгляд на взаимодействие Spark с Hive - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь понять взаимодействие между Spark и Hive metastore. Я начал с того, что посмотрел, когда и какие вызовы делаются из Spark в хранилище метаданных Hive. Я мог видеть кучу get_table вызовов для spark.read.table операций, и если таблица разбита на разделы, пару вызовов get_partitions, когда DataFrame материализуется путем вызова действий. Еще я заметил, что Spark не кэширует определение таблицы. Каждый раз, когда в таблице Hive вызывается действие, определение и соответствующие разделы снова считываются из базового хранилища метаданных !. Я смирился с этим, учитывая, что Spark предоставляет вам другие возможности для go оптимизации для подобных ситуаций, вы можете сохранить DataFrame. Я заметил нечто странное, когда взглянул на шаблон вызова API для операции saveAsTable. Были вызовы API для создания таблицы и создания разделов, как и ожидалось, но вместе с этим было сделано около 30 get_table вызовов в хранилище метаданных Hive. Мне действительно странно и трудно понять цель этих звонков.

Я ищу ответы на следующие вопросы.

  • Почему Spark не кэширует информацию о таблицах и разделах после их чтения из хранилища метаданных?
  • В чем причина такого количества вызовов get_table при создании таблицы Hive?
  • Является ли количество вызовов get_table, сделанных при чтении или записи таблицы, функцией количества исполнителей?
  • Есть ли какие-то улучшения, ожидаем ли мы значительного улучшения производительности за счет оптимизации количества вызовов, сделанных в метастор?
...