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

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アーキテクチャの詳細。
Hiveは主に3つの主要部分で構成されています。
- Hiveクライアント
- Hiveサービス
- 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回実行し、データノードからユーザーインターフェースへ戻ります。
上記の図から、Hadoop を使用した Hive におけるジョブ実行の流れを理解できます。Hive におけるデータの流れは、以下のパターンで動作します。
- UI(ユーザーインターフェース)からクエリを実行する
- ドライバはコンパイラと連携して実行プランを取得します。(ここでいうプランとは、クエリ実行プロセスおよびそれに関連するメタデータ情報の収集を指します。)
- コンパイラは、実行するジョブのプランを作成します。コンパイラはメタストアと通信してメタデータ要求を取得します。
- メタストアはメタデータ情報をコンパイラに送り返す。
- コンパイラは、クエリを実行するための提案されたプランをドライバに伝達する。
- ドライバーは実行計画を実行エンジンに送信します
- 実行エンジン(EE)は、HiveとHadoop間の橋渡し役として機能し、DFS操作を含むクエリを処理します。
- EEはまずNameNodeに接続し、次にDataNodeに接続して、テーブルに格納されている値を取得します。
- EEはデータノードから必要なレコードを取得します。実際のテーブルデータはデータノードにのみ存在し、NameNodeからはクエリに必要なメタデータのみを取得します。
- 指定されたクエリに関連するデータノードから実際のデータを収集します。
- EEはメタストアと双方向通信を行い、次のようなDDL(データ定義言語)操作を実行します。 作成、削除、変更 テーブルとデータベースについて。メタストアには、データベース名、テーブル名、列名のみが格納されます。
- EEは、NameNode、DataNode、ジョブなどのHadoopデーモンと通信します。 tracHadoopファイルシステム上でクエリを実行するためのker
- ドライバーから結果を取得しています
- 実行エンジンに結果を送信します。データノードから実行エンジンに結果が取得されると、実行エンジンは結果をドライバと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の演算子と組み込み関数 参考文献を参照することは、自然な次のステップである。


