2016-07-06 7 views
0

Я работаю над решением NRT, которое требует от меня часто обновлять метаданные таблицы Impala.Invalidate metadata/refresh imapala от искрового кода

В настоящее время это аннулирование выполняется после запуска моего искрового кода. Я хотел бы ускорить процесс, выполнив это обновление/аннулирование непосредственно из моего кода искры.

Какой был бы наиболее эффективный подход?

  • Oozie не слишком медленно (30 сек накладных расходов? Нет, спасибо)
  • SSH действие на (край) узел кажется правильным решением, но чувствует себя «хак»
  • я не вижу способ сделать это из контекста улья в Spark.
+0

О Spark 'HiveContext': он позволяет заданию взаимодействовать с Hive ** Metastore ** в режиме клиент/сервер. Но он совершенно не знает, что другие задания делают против Metastore одновременно, то есть другие задания Spark, задания Pig, запросы Impala, запросы CLI в Hive, запросы HiveServer2, сеансы просмотра Hue ... –

ответ

5

REFRESH и INVALIDATE METADATA команды относятся к Импале.
Вы должны быть подключены к демону Impala, чтобы запустить их, - которые запускают обновление кэша метаданных конкретной версии Impala (в вашем случае вам, вероятно, просто нужен REFRESH списка файлов в каждом разделе, а не оптовый INVALIDATE восстановить список всех разделов и все свои файлы с нуля)

Вы можете использовать Спарк SqlContext для подключения к Impala через JDBC и чтения данные - но не пробег произвольные команды. Черт. Таким образом, вы вернулись к основам:

  • скачать последние Cloudera JDBC driver for Impala
  • установить его на сервере, где выполняется искра работа
  • список всех JARs в ваших *.*.extraClassPath свойствах
  • разработать некоторый Scala код чтобы открыть сеанс JDBC против демона Impala и запускать произвольные команды (например, REFRESH somedb.sometable) - нелегкий путь

Надеюсь Google найдет так мне примеры кода JDBC/Scala, такие как this one