Несколько приложений Spark с HiveContext
наличие двух отдельных приложений pyspark, которые создают экземпляр a HiveContext
вместо SQLContext
позволяет одному из двух приложений сбой с ошибкой:
исключение: ("вы должны построить Spark с Hive. Экспорт 'SPARK_HIVE=true' и запуск сборки/Сборка СБТ", Py4JJavaError(ошибку Сиань произошла при вызове нет.орг."Апач".искры.для SQL.улей.HiveContext.Н', JavaObject ИД=o34039))
другое приложение завершит работу успешно.
Я использую Spark 1.6 из API Python и хочу использовать некоторые Dataframe
функции, которые поддерживаются только с HiveContext
(например,collect_set
). У меня была такая же проблема на 1.5.2 и ранее.
этого достаточно, чтобы воспроизводить:
import time
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
conf = SparkConf()
sc = SparkContext(conf=conf)
sq = HiveContext(sc)
data_source = '/tmp/data.parquet'
df = sq.read.parquet(data_source)
time.sleep(60)
на sleep
- это просто сохранить скрипт, пока я запускаю другой процесс.
если у меня есть два экземпляра этого сценария, вышеуказанная ошибка отображается при чтении паркет-файл. Когда я заменяю HiveContext
С SQLContext
все нормально.
кто-нибудь знает почему?
1 ответов
по умолчанию улья(контекст) с помощью встроенного дерби в качестве хранилища. Он предназначен в основном для тестирования и поддерживает только одного активного пользователя. Если вы хотите поддерживать несколько запущенных приложений, необходимо настроить автономное хранилище метастазов. На данный момент Hive поддерживает PostgreSQL, MySQL, Oracle и MySQL. Детали конфигурации зависят от бэкэнда и опции (local / remote), но в целом вам понадобится:
- работающий сервер СУБД
- метахранилища база данных, созданная с помощью предоставил скрипты
- настоящий улей конфигурация
Cloudera предоставляет исчерпывающее руководство, которое вы можете найти полезным:настройка хранилищу Hive.
теоретически должно быть также можно создать отдельные хранилища дерби с правильной конфигурацией (см. Hive Admin Manual-Локальная / Встроенная База Данных Метастор) или использовать дерби на сервере Режим.
для развития вы можете запускать приложения в разных рабочих каталогах. это создаст отдельный metastore_db
для каждого приложения и избежать проблемы нескольких активных пользователей. Предоставление отдельной конфигурации улья также должно работать, но менее полезно в разработке:
если сайт-улей не настроен.xml, контекст автоматически создает metastore_db в текущем каталоге