Hiveとは何ですか? Archi構造とモード

⚡ スマートサマリー

HiveはHadoopエコシステムのSQLレイヤーであり、HiveQLステートメントをHDFS上に既に存在する構造化データを読み取る分散ジョブに変換することで、アナリストがMapReduceコードを自分で記述することなく、ペタバイト規模のテーブルを照会できるようにします。

  • 🐝 それは何ですか: HDFSに保存されたファイルの上にテーブル、行、列を追加するETLおよびデータウェアハウジングツール。
  • 🗂️ メタストア: スキーマ情報はリレーショナルメタストアに格納され、1 人のユーザーに対しては Derby によって、 MySQL 共有アクセス用。
  • 🆚 RDBMSに対して: Hiveは読み取り時にスキーマを検証し、水平方向に拡張可能で、データベースが処理する行レベルの更新よりも大規模なスキャンを優先します。
  • 🏗️ XNUMXつの層: クライアント、サービス、ストレージがアーキテクチャを構成し、ドライバがコンパイラ、メタストア、実行エンジンを調整する。
  • 🔀 2つのモード: ローカルモードは単一のデータノードと小さなファイルに適しており、MapReduceモードはマルチノードクラスタ全体に実行を分散させる。
  • 🔌 HiveServer2: ThriftベースのHS2インターフェースは、リモートセッションにおけるマルチクライアント同時接続と認証機能を追加します。

Hiveのアーキテクチャとモード

Hiveとは何ですか?

Hiveは、Hadoop分散ファイルシステム(HDFS)上に開発されたETLおよびデータウェアハウジングツールです。Hiveを使用すると、次のような操作を簡単に実行できます。

  • データのカプセル化
  • アドホッククエリ
  • 巨大なデータセットの分析

Hive の重要な特徴

以下の点は、Hiveが通常のMapReduceプログラムと異なる点を説明するものです。

  • Hive では、最初にテーブルとデータベースが作成され、次にデータがこれらのテーブルにロードされます。
  • Hiveは、テーブルに格納された構造化データのみを管理およびクエリするために設計されたデータウェアハウスです。
  • 構造化データを扱う場合、MapReduceにはUDFのような最適化機能やユーザビリティ機能は備わっていませんが、Hiveフレームワークには備わっています。クエリ最適化とは、パフォーマンスの観点から、クエリを効率的に実行する方法を指します。
  • HiveのSQLにインスパイアされた言語は、MapReduceプログラミングの複雑さからユーザーを切り離します。テーブル、行、列、スキーマなど、リレーショナルデータベースの世界で馴染みのある概念を再利用することで、学習の容易さを実現しています。
  • Hadoop のプログラミングはフラット ファイル上で動作します。そのため、Hive はディレクトリ構造を使用して "パーティション" 特定のクエリのパフォーマンスを向上させるためのデータ。
  • Hiveの重要な構成要素は、スキーマ情報を格納するために使用されるメタストアです。このメタストアは通常、リレーショナルデータベースに存在します。次のようなメソッドを使用してHiveとやり取りできます。
    • Web GUI
    • Java データベース接続 (JDBC) インターフェース
  • ほとんどの操作はコマンドラインインターフェース(CLI)を介して行われます。Hiveは、Hiveクエリ言語(HQL)を使用してHiveクエリを作成するためのCLIを提供しています。
  • 一般に、HQL 構文は次のようなものです。 SQL ほとんどのデータアナリストが使い慣れている構文です。以下のサンプルクエリは、指定されたテーブル名に含まれるすべてのレコードを表示します。
    • サンプルクエリ :*から選択してください
  • Hiveは4つのファイル形式をサポートしています。 TEXTFILE、SEQUENCEFILE、ORC、および RCFILE (円柱状ファイルを記録)。
  • シングルユーザーのメタデータストレージには、Hive は Derby データベースを使用し、マルチユーザーまたは共有メタデータには Hive は MySQL.

セットアップ用 MySQL データベースとしてメタデータ情報を保存するには、チュートリアルを確認してください。 Hiveメタストアの設定 MySQLこれは、 Hiveインストールガイド.

Hive に関する重要なポイントのいくつかは次のとおりです。

  • HQLとSQLの大きな違いは、Hiveクエリは従来のデータベースではなく、Hadoopのインフラストラクチャ上で実行される点です。
  • Hiveクエリの実行は、自動的に生成される一連のプロセスです。 MapReduce
  • Hiveは、クライアントがクエリを実行する際にデータを簡単に取得できるように、パーティションとバケットの概念をサポートしています。
  • Hiveはカスタムをサポートしています UDF(ユーザー定義関数) データクレンジング、フィルタリング、その他同様の作業に使用できます。プログラマーの要件に応じて、Hive UDFを定義できます。

Hive とリレーショナル データベース

Hiveは、リレーショナルデータベースでは不可能な機能を実行します。データ量がペタバイト規模になると、結果を数秒で返すことが重要になりますが、Hiveはこれを効率的に実現します。主な違いは以下のとおりです。

リレーショナルデータベースは 「読み取り時のスキーマと書き込み時のスキーマ」まずテーブルが作成され、次にそのテーブルにデータが挿入されます。リレーショナルデータベースのテーブルでは、挿入、更新、変更などの操作を実行できます。

Hiveは 「読み取り専用のスキーマ」そのため、初期リリースでは更新や変更などの機能は動作しませんでした。これは、一般的なクラスタの Hive クエリが複数の DataNode にまたがって実行されるため、複数のノード間でデータを更新および変更することが不可能だったためです (Hive バージョン 0.13 未満)。

Hive は、 「たくさん読んで、一度書く」 パターンにより、最近のバージョンでは、挿入後にテーブルを更新できます。

注: Hiveの新しいバージョンには、更新された機能が搭載されています。Hive 0.14ではUPDATEとDELETEが新機能として導入され、その後のリリースでは完全なACIDトランザクションサポートが追加されました。

以下の表は、その比較を簡潔にまとめたものです。

側面 リレーショナルデータベース ApacheHive
スキーマ検証 書き込み時 既読
標準的なデータ量 ギガバイトからテラバイトへ テラバイトからペタバイトへ
ワークロード 行レベルのOLTP読み取りと書き込み フルスキャンバッチ分析
クエリ言語 SQL HQLはSQLにヒントを得た言語である。
実行 データベースエンジン 分散クラスタジョブ

ハイブ Archi構造

下の図は、 アパッチ Hiveアーキテクチャの詳細。

Apache Hiveのアーキテクチャ図(クライアント、サービス、ストレージ、コンピューティングを示す)

Hiveは主に3つの主要部分で構成されています。

  1. Hiveクライアント
  2. Hiveサービス
  3. Hiveのストレージとコンピューティング

ハイブクライアント

Hiveは、さまざまな種類のアプリケーションとの通信のために、異なるドライバを提供します。Thriftベースのアプリケーションの場合、通信のためにThriftクライアントを提供します。

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する Java 関連アプリケーション向けにはJDBCドライバを提供し、その他のアプリケーション向けにはODBCドライバを提供します。これらのクライアントとドライバは、Hiveサービス内のHiveサーバーと通信します。

ハイブ サービス

クライアントとHiveとのやり取りは、Hiveサービスを介して行われます。クライアントがHiveでクエリ関連の操作を実行する場合、Hiveサービスを介して通信する必要があります。

CLIは、DDL操作のためのHiveサービスとして機能します。上記のアーキテクチャ図に示すように、すべてのドライバはHiveサーバーおよびHiveサービスのメインドライバと通信します。

Hiveサービスのドライバはメインドライバであり、JDBC、ODBC、その他のクライアント固有のアプリケーションと通信し、それらの要求をメタストアとファイルシステムに渡して、さらに処理を行います。

ハイブ ストレージとコンピューティング

メタストア、ファイルシステム、ジョブクライアントなどのHiveサービスは、Hiveストレージと通信し、以下の動作を実行します。

  • Hiveで作成されたテーブルに関するメタデータ情報はHiveに保存されます メタストアデータベース.
  • クエリ結果とテーブルにロードされたデータは、Hadoop クラスターに保存されます。 HDFS.

ジョブ実行フロー

下の図 tracユーザーインターフェースからデータノードへのクエリを1回実行し、データノードからユーザーインターフェースへ戻ります。

Hiveジョブ実行フロー図 tracユーザーインターフェースからデータノードへのクエリ

上記の図から、Hadoop を使用した Hive におけるジョブ実行の流れを理解できます。Hive におけるデータの流れは、以下のパターンで動作します。

  1. UI(ユーザーインターフェース)からクエリを実行する
  2. ドライバはコンパイラと連携して実行プランを取得します。(ここでいうプランとは、クエリ実行プロセスおよびそれに関連するメタデータ情報の収集を指します。)
  3. コンパイラは、実行するジョブのプランを作成します。コンパイラはメタストアと通信してメタデータ要求を取得します。
  4. メタストアはメタデータ情報をコンパイラに送り返す。
  5. コンパイラは、クエリを実行するための提案されたプランをドライバに伝達する。
  6. ドライバーは実行計画を実行エンジンに送信します
  7. 実行エンジン(EE)は、HiveとHadoop間の橋渡し役として機能し、DFS操作を含むクエリを処理します。
    • EEはまずNameNodeに接続し、次にDataNodeに接続して、テーブルに格納されている値を取得します。
    • EEはデータノードから必要なレコードを取得します。実際のテーブルデータはデータノードにのみ存在し、NameNodeからはクエリに必要なメタデータのみを取得します。
    • 指定されたクエリに関連するデータノードから実際のデータを収集します。
    • EEはメタストアと双方向通信を行い、次のようなDDL(データ定義言語)操作を実行します。 作成、削除、変更 テーブルとデータベースについて。メタストアには、データベース名、テーブル名、列名のみが格納されます。
    • EEは、NameNode、DataNode、ジョブなどのHadoopデーモンと通信します。 tracHadoopファイルシステム上でクエリを実行するためのker
  1. ドライバーから結果を取得しています
  2. 実行エンジンに結果を送信します。データノードから実行エンジンに結果が取得されると、実行エンジンは結果をドライバとUI(フロントエンド)に送り返します。

Hiveは実行エンジンを介してHadoopファイルシステムとそのデーモンと通信を維持します。図中の点線の矢印はその通信を示しています。

Hive のさまざまなモード

Hiveは、Hadoopのデータノードのサイズに応じて2つのモードで動作します。これらのモードは次のとおりです。

  • ローカルモード
  • MapReduceモード

ローカルモードを使用するタイミング

  • Hadoopが1つのデータノードを持つ擬似分散モードでインストールされている場合、このモードではHiveを使用します。
  • データサイズが小さく、単一のローカルマシンに限定できる場合は、このモードを使用できます。
  • ローカル マシンに存在する小さなデータ セットでは、処理が非常に高速になります。

MapReduceモードを使用するタイミング

  • Hadoopに複数のデータノードがあり、データが複数のノードに分散されている場合、このモードではHiveを使用します。
  • 大量のデータを処理し、クエリは並列で実行されます
  • このモードを使用すると、大規模なデータ セットをより優れたパフォーマンスで処理できます。

Hiveでは、Hiveがどのモードで動作するかを指定するプロパティを設定できます。デフォルトではMapReduceモードで動作しますが、ローカルモードの場合は次の設定を使用できます。

SET mapred.job.tracker=local;

Hive バージョン 0.7 以降では、MapReduce ジョブをローカルモードで自動的に実行するモードがサポートされています。Hive 4.x ではデフォルトのエンジンは Apache Tez なので、このプロパティは従来の MapReduce パスに適用されます。

Hive Server2 (HS2) とは何ですか?

HiveServer2(HS2)は、以下の機能を実行するサーバーインターフェースです。

  • リモート クライアントが Hive に対してクエリを実行できるようにします
  • これらのクエリの結果を取得します

現在のバージョンでは、Thrift RPC に基づく高度な機能が追加されています。例えば、以下のような機能です。

  • マルチクライアントの同時実行性
  • 認証

HS2はBeelineとすべてのJDBCまたはODBCセッションの背後に位置しており、そのためシングルユーザーのHive CLIに取って代わったのです。 HiveQLの演算子と組み込み関数 参考文献を参照することは、自然な次のステップである。

よくあるご質問

Hiveは、分散ジョブによって大規模なテーブルをスキャンするバッチクエリレイヤーです。HBaseは、単一行に対するミリ秒単位のランダム読み書きを実現するために構築されたNoSQLストアです。これらは正反対のアクセスパターンを解決するため、しばしば並行して実行されます。

HiveはMapReduce、Apache Tez、またはApache上で動作します。 SparkMapReduceは非推奨となり、Hive 4.xではデフォルトでTezが使用されます。Tezは、ステージ間で中間結果をディスクに書き込む代わりに、メモリに保持します。

管理テーブルは Hive にメタデータとファイルの所有権を与えるので、ping ウェアハウスディレクトリからデータを削除します。外部テーブルにはメタデータのみが格納され、削除されます。ping 基となるファイルはそのまま残されます。

学習済みのコストモデルは、実行統計情報をプランナーにフィードバックすることで、静的な推定値よりも正確にスキャン量、結合順序、パーティション剪定を予測します。クラウドプラットフォームは、圧縮やパーティションレイアウトの推奨事項として、同様のシグナルを提供します。

Copilot は HiveQL 結合、ウィンドウ関数、 Java コメントからUDFの骨組みを生成することで、定型コードの記述作業を削減できます。ただし、列名、パーティションキー、データ型は、まず実際のメタストアと照合して確認する必要があります。

はい。Hive 0.14でUPDATEとDELETEが追加され、その後のリリースではトランザクションテーブルに対する完全なACIDサポートが実現しました。Hive 4.xでは、スナップショット分離とスキーマ進化を備えたApache Icebergテーブルによって、この機能がさらに拡張されています。

3つすべてが同じファイルに対してSQLを公開する。Hiveは長時間のバッチ処理を優先し、他の3つが読み込むメタストアを所有している。 Spark SQLは混合パイプラインに適していますが、Trinoは複数のソースにわたる対話型クエリを対象としています。

はい、主にHive Metastoreを通じて行われており、これは依然としてカタログの標準となっています。 SparkTrino、Presto、Flinkはいずれも読み込みに対応しています。Hive自体は、スケジュールされたバッチ変換とデータウェアハウスへのロードを引き続き提供します。