web-dev-qa-db-ja.com

Spark 2:SparkSession enableHiveSupport()が呼び出されたときの動作

私の質問はかなり単純ですが、どういうわけか、ドキュメントを読んでも明確な答えが見つかりません。

Spark2CDH 5.1クラスターで実行しています。 Hiveとメタストアもあります。

私はSparkプログラムで次のようにセッションを作成します。

_SparkSession spark = SparkSession.builder().appName("MyApp").enableHiveSupport().getOrCreate()
_

次のHiveQLクエリがあるとします。

_spark.sql("SELECT someColumn FROM someTable")
_

私は次のことを知りたいです:

  1. 内部的には、このクエリはHive MapReduceプリミティブに変換されます。
  2. hiveQLのサポートは構文レベルでのみ行われ、Spark SQLが内部で使用されます。

パフォーマンス評価を行っていますが、spark.sql([hiveQL query])で実行されたクエリの時間パフォーマンスを要求する必要があるかどうかわかりませんSparkまたはHiveを参照してください。

5

Sparkは、Hiveとインメモリーの2つのカタログを認識しています。 enableHiveSupport()を設定すると、_spark.sql.catalogImplementation_はHiveに設定され、それ以外の場合は_in-memory_に設定されます。したがって、Hiveサポートを有効にすると、spark.catalog.listTables().show()はHiveメタストアのすべてのテーブルを表示します。

ただし、これはHiveがクエリに使用されることを意味するわけではありません* sparkがHive-metastoreと通信し、実行エンジンが常にスパークすることを意味します。

*実際にはpercentileと_percentile_approx_のようないくつかの関数があり、これらはネイティブHive UDAFです。

1
Raphael Roth

enableHiveSupportを設定しても、そのクエリはHiveで計算されます。

それはHiveカタログに関するものだけです。 enableHiveSupportを使用すると、次のことができます。

  • hive永続メタストアへの読み書き
  • hiveのUDFを使用する
  • hiveのSerDeを使用する

すべては実行自体ではなく、カタログに直接接続されています

歴史的にも、Hive QL解析はHiveを使用して行われていましたが、現在SparkはHiveを呼び出さずにそれを実行します

Spark.sql([hiveQL query])で実行されたクエリの時間パフォーマンスは、SparkまたはHiveを参照)と主張する必要があります。

上記のように、それはスパークのパフォーマンスです

1
T. Gawęda

MapReduceTezおよびSparkの3つの実行エンジンがあります。

Hiveを使用してクエリを実行すると、上記のエンジンのいずれかを使用するように選択できます。通常、管理者はいずれかのエンジンをデフォルトエンジンとして設定する必要があります。

つまり.

set Hive.execution.engine=tez;

Sparkを使用してクエリを実行すると、sparkエンジンを使用してクエリが実行されます。

ただし、パフォーマンス分析を行っている場合、測定する必要があるのは時間だけではなく、メモリとCPUも測定する必要があります。

0
Gaurang Shah

「内部的にこのクエリはHive MapReduceプリミティブに変換されます。または、HiveQLのサポートは構文レベルでのみ行われ、Spark SQLは内部で使用されます。 "

私はspark SQL on Hive metastoreを使用しています。クエリがMap/Reduceに変換されるかどうかを確認する方法は、次のことを確認することです:a。Hiveコンソールを開き、フィルターを使用して単純なSELECTクエリを実行します。次に、YARNリソースマネージャーに移動します。クエリの実行結果として、いくつかのMap/reduceジョブが実行されます。b。HiveContextを使用してspark SQLを実行し、同じSQLクエリを実行します。Spark SQLはMap/ReduceジョブをトリガーせずにHiveのメタストア情報を利用します。YARNのResource Managerに移動してそれを確認してください。spark-Shellセッションが実行されているだけで、追加のMap /はありません/クラスターで発生するジョブを減らします。

0
Prashant