2015-11-12 10 views
37

Jakie są różnice między Apache Spark SQLContext i HiveContext?Jaka jest różnica między Apache Spark SQLContext a HiveContext?

Niektóre źródła podają, że ponieważ HiveContext jest nadzbiorem konstruktorów SQLContext, powinien zawsze używać HiveContext, który ma więcej funkcji niż SQLContext. Ale obecne API każdego kontekstu są w większości takie same.

  • Jakie są scenariusze, które SQLContext/HiveContext jest bardziej przydatne?.
  • Czy HiveContext jest bardziej użyteczny tylko podczas pracy z Hive?
  • A może SQLContext jest wszystkim, czego potrzeba do wdrożenia aplikacji Big Data przy użyciu Apache Spark?

Odpowiedz

29

zapłonowe 2.0+

Spark 2.0 zapewnia natywne funkcje szyb (SPARK-8641) i zawiera kilka dodatkowych ulepszeń w parsowanie i znacznie lepszą zgodność SQL 2003, więc jest znacznie mniej zależne od Hive, aby osiągnąć podstawowy Funkcjonalność i z tego powodu HiveContext (SparkSession z obsługą Hive) wydaje się być nieco mniej ważne.

Spark < 2,0

Oczywiście jeśli chcesz pracować z Hive trzeba użyć HiveContext. Poza tym największą różnicą jak na razie (Spark 1.5) jest wsparcie dla window functions i możliwość dostępu do UDF Ula.

ogólnie mówiąc funkcji okna są całkiem fajne cecha i mogą być wykorzystane do rozwiązywania bardzo złożonych problemów w zwięzły sposób, bez wchodzenia w tę iz powrotem między RDD i DataFrames. Wydajność wciąż jest daleka od optymalnej, zwłaszcza bez klauzuli PARTITION BY, ale to naprawdę nic nie jest specyficzne dla Sparka.

Jeśli chodzi o UDF UM, nie jest to teraz poważny problem, ale przed Spark 1.5 wiele funkcji SQL zostało wyrażonych za pomocą UDF UM i wymaga od pracy HiveContext.

HiveContext zapewnia również bardziej niezawodny analizator składni SQL. Zobacz na przykład: py4j.protocol.Py4JJavaError when selecting nested column in dataframe using select statetment

Na koniec wymagane jest uruchomienie HiveContext w celu uruchomienia serwera Thrift.

Największy problem z HiveContext polega na tym, że jest wyposażony w duże zależności.

+0

Z Twojego komentarza, wydaje Jedynym minusem HiveContext są duże zależności. Poza tym, jest to bezpieczny zakład, aby zawsze używać HiveContext zamiast SqlContext. Używam środowiska SparkR 1.6. –

+0

From https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-SparkSession.html "SparkSession połączył SQLContext i HiveContext w jednym obiekcie w Spark 2.0." –

3

Programując Spark SQL mamy dwa punkty wejścia w zależności od , czy potrzebujemy wsparcia Hive. Zalecanym punktem wejścia jest HiveContext do zapewniający dostęp do HiveQL i innych funkcji zależnych od Hive. Bardziej podstawowy SQLContext zapewnia podzbiór obsługi Spark SQL, który nie jest zależny od gałęzi użytkownika .

- Separacja istnieje dla użytkowników, którzy mogą być w konflikcie z włączeniem wszystkich zależności zależnych od gałęzi.

-Dodatkowe funkcje HiveContext, które nie występują w SQLContext, obejmują możliwość pisania zapytań przy użyciu bardziej kompletnego parsera HiveQL, dostępu do Uli Ula i odczytywania danych z tabel Hive.

-Używanie HiveContext nie wymaga istniejącej konfiguracji Hive.

+0

do dalszego czytania patrz https://spark.apache.org/docs/1.6.1/sql-programming-guide.html – BigDataScholar

+0

nawet kontekst sql nie wymaga konfiguracji ula – anubhav

3

HiveContext nadal jest rozszerzeniem SqlContext, zawiera pewne dodatkowe właściwości, takie jak można odczytać konfigurację z ula-site.xml, w przypadku gdy masz ula korzystanie inaczej po prostu użyć SqlContext

Powiązane problemy