2016-01-10 9 views
7

posiadającej dwa oddzielne wnioski pyspark że instancji HiveContext zamiast SQLContext pozwala jednym z dwóch aplikacji niepowodzeniem z błędem:Wiele aplikacji zapłonowe z HiveContext

Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o34039))

Druga aplikacja kończy się pomyślnie.

Używam Spark 1.6 z API Pythona i chcę korzystać z niektórych funkcji Dataframe, które są obsługiwane tylko przez(np. collect_set). Miałem ten sam problem w wersji 1.5.2 i wcześniejszych.

To wystarczy, aby odtworzyć:

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 jest tylko, aby zachować skrypt działa, a ja uruchomić inny proces.

Jeśli mam dwa wystąpienia tego skryptu, powyższy błąd pojawia się podczas odczytu pliku parkietu. Po zamianie HiveContext na SQLContext wszystko jest w porządku.

Czy ktoś wie, dlaczego tak jest?

Odpowiedz

5

Domyślnie Hive (kontekst) używa osadzonych Derby jako metastore. Jest przeznaczony głównie do testowania i obsługuje tylko jednego aktywnego użytkownika. Jeśli chcesz obsługiwać wiele uruchomionych aplikacji, powinieneś skonfigurować samodzielny metastore. W tej chwili Hive obsługuje PostgreSQL, MySQL, Oracle i MySQL. Szczegóły konfiguracji zależą backend i opcji (lokalny/zdalny), ale ogólnie rzecz biorąc trzeba:

Cloudera udostępnia wyczerpujący przewodnik, który może okazać się przydatny: Configuring the Hive Metastore.

Teoretycznie powinno być również możliwe utworzenie oddzielnych metastorów Derby o odpowiedniej konfiguracji (patrz Hive Admin Manual - Local/Embedded Metastore Database) lub użycie Derby in Server Mode.

Do programowania można uruchamiać aplikacje w różnych katalogach roboczych. This will create separate metastore_db for each application i unikaj emisji wielu aktywnych użytkowników. Zapewnienie oddzielnej konfiguracji Hive również powinno działać, ale jest mniej przydatne w opracowaniu:

When not configured by the hive-site.xml, the context automatically creates metastore_db in the current directory

Powiązane problemy