Spark SQLアプリケーションを開発していますが、いくつか質問があります。
Spark-SQLがHiveメタストアを隠蔽して使用していることを読みましたか?これは本当ですか?私は、Hiveインストールに明示的に接続しない純粋なSpark-SQLアプリケーションについて話しています。
Spark SQLは、内部でHiveメタストアを使用しません(逆のことを行うin-memory
にいない限り、デフォルトでspark-Shell
非Hiveカタログになります)。
デフォルトの外部カタログ実装は、spark.sql.catalogImplementation内部プロパティによって制御され、次の2つの可能な値のいずれかになります:Hive
およびin-memory
。
SparkSession
を使用して、使用中のカタログを確認します。
scala> :type spark
org.Apache.spark.sql.SparkSession
scala> spark.version
res0: String = 2.4.0
scala> :type spark.sharedState.externalCatalog
org.Apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener
scala> println(spark.sharedState.externalCatalog.unwrapped)
org.Apache.spark.sql.Hive.HiveExternalCatalog@49d5b651
Hive対応のSparkSession
を開始するspark-Shell
を使用したため、オフにするには--conf spark.sql.catalogImplementation=in-memory
で開始する必要があることに注意してください。
Spark-SQLアプリケーションを起動していますが、Hiveを使用する必要はありません。 Hiveを使用する理由はありますか?私が理解していることから、Spark-SQLはHiveよりもはるかに高速です。そのため、Hiveを使用する理由はわかりません。
これは非常に興味深い質問であり、さまざまな回答が得られる可能性があります(主に意見ベースであるため、特に注意してStackOverflowルールに従う必要があります)。
Hiveを使用する理由はありますか?
番号。
しかし...Spark 2.2の最新機能、つまりコストベースのオプティマイザーを使用する場合は、コスト統計がかなり高価になる可能性があるため、ANALYZE TABLE
と見なすことができます。異なるSparkアプリケーションの実行で何度も使用されるテーブルに対してこれを1回実行すると、パフォーマンスが向上する可能性があります。
Spark SQL without Hiveでも可能ですが、ローカルのデフォルトメタストアはシングルユーザーアクセス用であり、で送信されたSparkアプリケーション全体でメタデータを再利用するため、いくつかの制限があります。同時には機能しません。
Hiveを使用する理由はわかりません。
私はブログ投稿を書きました なぜSpark SQLはHiveに夢中になっているのですか?!(Hiveを1日だけ使った後) 同様の質問をしたところ、驚いたことに今だけです(2016年4月9日にブログ投稿を投稿してからほぼ1年後)Hiveメタストアの概念がなぜそれほど重要なのか理解できたと思うとき、特に。マルチユーザーのSparkノートブック環境。
Hive自体はHDFS上の単なるデータウェアハウスであるため、Spark SQLがある場合はあまり使用されませんが、Sparkで非常に役立つHiveがかなりうまく行った概念がまだいくつかあります。 _ SQL(Hiveのようなメタストアで完全に自立するまで)。
HiveContext()オブジェクトまたはspark-Shellを初期化するときに、Hiveメタストアに接続するか、何も見つからない場合はインスタンス化します。
Hiveを使用する主な理由は、Hiveの管理対象テーブルからHDFSデータを読み込む場合、または外部テーブルから簡単に選択できるようにする場合です。
Hiveは、HDFSファイルを読み書きするための単なるレンズであり、それ自体が実行エンジンではないことを忘れないでください。