ハイブとは何ですか? アーキテクチャとモード

Hiveとは何ですか?

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

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

Hive の重要な特徴

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

MySQL をデータベースとして設定し、メタデータ情報を保存するには、チュートリアルを確認してください。 「HIVE と MYSQL のインストールと構成」

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

  • HQL と SQL の主な違いは、Hive クエリが従来のデータベースではなく Hadoop のインフラストラクチャで実行されることです。
  • Hive クエリの実行は、自動的に生成された一連の Map Reduce ジョブのようになります。
  • Hive は、クライアントがクエリを実行するときにデータを簡単に取得できるように、パーティションとバケットの概念をサポートしています。
  • Hive は、データ クレンジング、フィルタリングなどのためのカスタム固有の UDF (ユーザー定義関数) をサポートしています。プログラマーの要件に従って、Hive UDF を定義できます。

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

Hive を使用すると、リレーショナル データベースでは実現できないいくつかの独特な機能を実行できます。 ペタバイト単位の膨大な量のデータの場合、クエリを実行して数秒以内に結果を取得することが重要です。 そして、Hive はこれを非常に効率的に実行し、クエリを高速に処理し、数秒で結果を生成します。

Hive がなぜこれほど高速なのかを見てみましょう。

Hive データベースとリレーショナル データベースの主な違いは次のとおりです。wing;

リレーショナルデータベースは「読み取り時のスキーマと書き込み時のスキーマ”。 まずテーブルを作成し、次に特定のテーブルにデータを挿入します。 リレーショナル データベース テーブルでは、挿入、更新、変更などの機能を実行できます。

ハイブは「読み取り専用のスキーマ”。 したがって、これではアップデートや変更などの機能は動作しません。 一般的なクラスターの Hive クエリは複数のデータ ノードで実行されるためです。 したがって、複数のノードにまたがってデータを更新および変更することはできません。(Hive バージョン 0.13 未満)

また、Hive は「何度も読んで、一度だけ書く" パターン。 つまり、テーブルを挿入した後、最新の Hive バージョンでテーブルを更新できます。

注意: ただし、Hive の新しいバージョンには更新された機能が付属しています。 Hive バージョン (Hive 0.14) には、新機能として更新オプションと削除オプションが追加されました。

ハイブのアーキテクチャ

ハイブのアーキテクチャ

上のスクリーンショットは、 アパッチ ハイブアーキテクチャの詳細

Hive は主に 3 つのコア部分で構成されます

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

ハイブクライアント:

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

Java 関連アプリケーションには、JDBC ドライバーが提供されます。 あらゆる種類のアプリケーション以外には、ODBC ドライバーが提供されます。 これらのクライアントとドライバーは、Hive サービスの Hive サーバーと再び通信します。

ハイブサービス:

クライアントと Hive の対話は、Hive サービスを通じて実行できます。 クライアントが Hive でクエリ関連の操作を実行したい場合は、Hive サービスを通じて通信する必要があります。

CLI は、DDL (データ定義言語) 操作の Hive サービスとして機能するコマンド ライン インターフェイスです。 上のアーキテクチャ図に示すように、すべてのドライバーは Hive サーバーおよび Hive サービスのメイン ドライバーと通信します。

Hive サービスに存在するドライバーはメイン ドライバーを表し、あらゆる種類の JDBC、ODBC、およびその他のクライアント固有のアプリケーションと通信します。 ドライバーは、さまざまなアプリケーションからメタ ストアおよびフィールド システムへのリクエストを処理して、さらなる処理を行います。

Hive ストレージとコンピューティング:

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

  • Hiveで作成したテーブルのメタデータ情報は、Hiveの「メタストレージデータベース」に保存されます。
  • クエリ結果とテーブルにロードされたデータは、HDFS 上の Hadoop クラスターに保存されます。

ジョブ実行フロー:

ジョブ実行の流れ

上のスクリーンショットから、Hadoop を使用した Hive でのジョブ実行フローを理解できます。

Hive のデータ フローは次のように動作します。wing パターン;

  1. UI(ユーザーインターフェース)からクエリを実行する
  2. ドライバーは、プランを取得するためにコンパイラーと対話します。 (ここでのプランとはクエリ実行を指します) プロセスとそれに関連するメタデータ情報の収集
  3. コンパイラは、実行されるジョブの計画を作成します。 メタデータ要求を取得するためにメタストアと通信するコンパイラー
  4. メタストアはメタデータ情報をコンパイラに送り返します
  5. コンパイラーは、クエリを実行するための提案されたプランを使用してドライバーと通信します。
  6. ドライバー 実行計画を実行エンジンに送信する
  7. 実行エンジン (EE) は、Hive と Hadoop の間のブリッジとして機能し、クエリを処理します。 DFS 操作用。
  • EE は、最初に名前ノードに接続し、次にデータ ノードに接続して、テーブルに格納されている値を取得する必要があります。
  • EE はデータ ノードから必要なレコードを取得します。 テーブルの実際のデータはデータ ノードにのみ存在します。 ネームノードからはクエリのメタデータ情報のみをフェッチします。
  • 言及されたクエリに関連するデータノードから実際のデータを収集します
  • 実行エンジン (EE) は、Hive に存在するメタ ストアと双方向に通信して、DDL (データ定義言語) 操作を実行します。 ここでは、テーブルやデータベースの CREATE、DROP、ALTERING などの DDL 操作が実行されます。 メタ ストアには、データベース名、テーブル名、列名に関する情報のみが保存されます。 言及されたクエリに関連するデータを取得します。
  • 実行エンジン (EE) は、ネーム ノード、データ ノード、ジョブ トラッカーなどの Hadoop デーモンと通信して、Hadoop ファイル システム上でクエリを実行します。
  1. ドライバーから結果を取得する
  2. 結果を実行エンジンに送信します。 結果がデータ ノードから EE にフェッチされると、結果がドライバーと UI (フロントエンド) に送信されます。

Hive 実行エンジンを介して Hadoop ファイル システムおよびそのデーモンと継続的に通信します。 ジョブ フロー図の点線の矢印は、実行エンジンと Hadoop デーモンの通信を示しています。

Hive のさまざまなモード

Hive は、Hadoop のデータ ノードのサイズに応じて XNUMX つのモードで動作できます。

これらのモードは、

  • ローカルモード
  • マップリデュースモード

ローカル モードを使用する場合:

  • Hadoop が疑似モードでインストールされ、データ ノードが XNUMX つある場合は、このモードで Hive を使用します
  • 単一のローカル マシンに限定されるという観点からデータ サイズが小さい場合は、このモードを使用できます。
  • ローカル マシンに存在する小さなデータ セットでは、処理が非常に高速になります。

マップ削減モードを使用する場合:

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

Hive では、このプロパティを設定して、Hive が動作できるモードを指定できます。 デフォルトでは、Map Reduce モードで動作し、ローカル モードでは次のようにすることができます。wing 設定。

Hive がローカル モードで動作するように設定

SETmapred.job.tracker=local;

Hive バージョン 0.7 からは、マップ リデュース ジョブをローカル モードで自動的に実行するモードがサポートされます。

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

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

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

最新バージョンからは、Thrift RPC に基づいたいくつかの高度な機能が追加されています。

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

まとめ

Hive は、Hadoop 上の ETL およびデータ ウェアハウス ツールです ecosシステムであり、構造化データおよび半構造化データの処理に使用されます。

  • Hive は Hadoop に存在するデータベースです ecosystem は DDL および DML 操作を実行し、データのクエリと処理を改善するための HQL などの柔軟なクエリ言語を提供します。
  • 特定の制限がある RDMS と比較して、非常に多くの機能が提供されます。

クライアントの要件を満たすユーザー固有のロジック。

  • カスタム定義スクリプトとユーザー定義関数を作成および展開するオプションが提供されます。
  • さらに、ストレージ固有のロジック用のパーティションとバケットも提供します。