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

Hiveとは何ですか?

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

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

Hive の重要な特徴

  • Hive では、最初にテーブルとデータベースが作成され、次にデータがこれらのテーブルにロードされます。
  • Hive は、テーブルに格納されている構造化データのみを管理およびクエリするために設計されたデータ ウェアハウスです。
  • 構造化データを扱う場合、Map Reduce には UDF のような最適化機能やユーザビリティ機能がありませんが、Hive フレームワークにはあります。 クエリの最適化とは、パフォーマンスの観点からクエリを実行する効果的な方法を指します。
  • Hive の SQL にヒントを得た言語は、ユーザーを Map 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 とリレーショナル データベースの主な違いは次のとおりです。

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

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

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

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

ハイブ Archi構造

ハイブ Archi構造

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

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

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

ハイブクライアント:

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

ジョブ実行フロー:

ジョブ実行の流れ

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

Hive のデータフローは次のパターンで動作します。

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

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

Hive のさまざまなモード

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

これらのモードは、

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

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

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

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

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

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

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

SETmapred.job.tracker=local;

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

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

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

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

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

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

製品概要

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

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

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

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