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構造
上のスクリーンショットは、 アパッチ Hiveアーキテクチャの詳細
Hive は主に 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 のデータフローは次のパターンで動作します。
- UI(ユーザーインターフェース)からクエリを実行する
- ドライバーは、プランを取得するためにコンパイラーと対話します。 (ここでのプランとはクエリ実行を指します) プロセスとそれに関連するメタデータ情報の収集
- コンパイラは、実行されるジョブの計画を作成します。 メタデータ要求を取得するためにメタストアと通信するコンパイラー
- メタストアはメタデータ情報をコンパイラに送り返します
- コンパイラーは、クエリを実行するための提案されたプランを使用してドライバーと通信します。
- ドライバー 実行計画を実行エンジンに送信する
- 実行エンジン (EE) は、クエリを処理するために Hive と Hadoop 間のブリッジとして機能します。DFS 操作の場合。
- EE は、最初に名前ノードに接続し、次にデータ ノードに接続して、テーブルに格納されている値を取得する必要があります。
- EE はデータ ノードから必要なレコードを取得します。 テーブルの実際のデータはデータ ノードにのみ存在します。 ネームノードからはクエリのメタデータ情報のみをフェッチします。
- 言及されたクエリに関連するデータノードから実際のデータを収集します
- 実行エンジン (EE) は、Hive にあるメタ ストアと双方向に通信して、DDL (データ定義言語) 操作を実行します。ここで、テーブルやデータベースの作成、削除、変更などの DDL 操作が行われます。メタ ストアには、データベース名、テーブル名、列名に関する情報のみが保存されます。指定されたクエリに関連するデータがフェッチされます。
- 実行エンジン (EE) は、ネーム ノード、データ ノード、ジョブ トラッカーなどの Hadoop デーモンと通信して、Hadoop ファイル システム上でクエリを実行します。
- ドライバーから結果を取得する
- 結果を実行エンジンに送信します。 結果がデータ ノードから 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 と比較して、非常に多くの機能が提供されます。
クライアントの要件を満たすユーザー固有のロジック。
- カスタム定義スクリプトとユーザー定義関数を作成および展開するオプションが提供されます。
- さらに、ストレージ固有のロジック用のパーティションとバケットも提供します。


