Apache Hiveのアーキテクチャとコマンド:モード、特性、アプリケーション
公開: 2021-06-30目次
ハイブとは何ですか?
Apacheハイブは、分散処理とデータ分析のためにFacebookによって開発されたオープンソースのデータウェアハウジングツールです。 これは、Hadoop分散ファイルシステム(HDFS)の上に開発されています。 Hadoopのデータに構造を投影するためのメカニズムは、Hiveによって提供されます。 HiveQL(HQL)と呼ばれるSQLに似た言語を使用して、そのデータをクエリします。 Hiveのテーブルとリレーショナルデータベースのテーブルには類似点があります。 Hiveクエリは、SQLに精通している人なら誰でも簡単に作成できます。
Hiveのいくつかの機能は次のとおりです。
- スキーマ情報をデータベースに保存し、処理されたデータをHDFSに保存します。
- OLAP用に設計されています。
- クエリ言語はHiveQLまたはHQLで、SQLに似ています。
- 高速で、使い慣れており、スケーラブルで、拡張性があります。
ハイブの使用
- これは、ApacheHive分散ストレージです。
- ユーザーがデータを簡単に抽出、変換、およびロードできるようにするツールが提供されています。
- 構造を提供するために、さまざまなデータ形式が提供されています。
- Hadoop分散ファイルシステム(HDFS)に保存されているファイルには、Hiveからアクセスできます。
ハイブのコマンド
ハイブコマンドは次のとおりです。
- データ定義言語(DDL):データベース内のテーブルおよびその他のオブジェクトは、これらのコマンドを使用して作成および変更されます。
- CREATE:テーブルまたはデータベースを作成するために使用されます。
- SHOW:データベース、テーブル、プロパティなどを表示するために使用されます。
- ALTER:既存のテーブルに変更を加えるために使用されます。
- DESCRIBE:テーブルの列について説明します。
- TRUNCATE:テーブルの行を永続的に切り捨てて削除するために使用されます。
- DELETE:テーブルデータを削除しますが、復元することはできます。
- データ操作言語(DML):データベース内のデータを取得、保存、変更、削除、挿入、および更新するために使用されます。
- LOAD、INSERTステートメントの構文
データ<LOCAL>インパス<ファイルパス>をテーブル[テーブル名]にロードします
- データのロード後、データ操作コマンドを使用してデータを取得します。
- 集計集計関数は、テーブル内のレコードの総数をカウントするために使用されます。
- 「createexternal」キーワードは、テーブルを作成するために使用され、テーブルが作成される場所を提供します。 EXTERNALテーブルは、ストレージのHDFSの場所を指します。
- 挿入コマンドは、データHiveテーブルをロードするために使用されます。 「挿入上書き」は既存のデータを上書きするために使用され、「挿入する」はデータを既存のデータに追加するために使用されます。
- テーブルは、「partitioned by」コマンドによってパーティションに分割され、「clusteredby」コマンドによってバケットに分割されます。
- 動的パーティションが有効になっていないため、データを挿入するとエラーが発生します。 したがって、Hiveシェルでは以下のパラメータを設定する必要があります。
set hive.exec.dynamic.partition = true;
動的パーティションを有効にするには、デフォルトではfalseです。
set hive.exec.dynamic.partition.mode = nonstrict;
- 「テーブルの削除」コマンドは、テーブルのデータとメタデータを削除します
- 集約:構文:
テーブル名からカウント(DISTINCTカテゴリ)を選択します。
このコマンドは、「cate」テーブルのさまざまなカテゴリをカウントします。
- グループ化:構文:
カテゴリ別のtxtレコードグループからカテゴリ、合計(金額)を選択します
結果セットは、1つ以上の列にグループ化されます。
- 結合操作:各列に共通の値を使用して、2つのテーブルのフィールドを結合するために実行します。
- 左外部結合:テーブルAおよびBの場合、左外部結合には、結合条件で「右」テーブル(B)に一致するレコードが見つからない場合でも、「左」テーブル(A)のすべてのレコードが含まれます。
- 右外部結合:「右」テーブル(B)のすべての行が、結合されたテーブルに少なくとも1回表示されます。
- 完全結合:結合されたテーブルには、両方のテーブルのすべてのレコードが含まれます結合されたテーブルには、両方のテーブルのすべてのレコードが含まれます。
ハイブアーキテクチャ
Apacheハイブのアーキテクチャを図1に示します。
主要コンポーネントのリスト
ハイブアーキテクチャの主なコンポーネントは次のとおりです。
1.ハイブクライアント
Java、Python、C ++などの言語で記述されたさまざまなアプリケーションは、Hiveが提供するさまざまなドライバーを使用して通信されます。 選択に応じて任意の言語で書くことができます。 クライアントとサーバーは、HiveサービスのHiveサーバーと通信します。
ほとんどの場合、それらは3つのタイプに分類されます。
- Thriftクライアント:Thriftクライアントからのリクエストを処理するのはApacheThriftに基づいています。 Thriftクライアントは、Thriftベースのアプリケーションの通信に使用されます。
- JDBCクライアント: JDBCは、Java関連のアプリケーション用に提供されています。 Javaアプリケーションは、JDBCドライバーを使用してHiveに接続されます。 さらに、Thriftを使用してHiveサーバーと通信します。
- ODBCクライアント: ODBCプロトコルに基づくアプリケーションは、ODBCドライバーを介してHiveに接続できます。 JDBCと同様に、Thriftを使用してHiveサーバーと通信します。
2.ハイブサービス
Hiveサービスは、Hiveとクライアントとのやり取りの手段を提供します。 クライアントが実行する必要のあるクエリ関連の操作は、Hireサービスを介して伝達する必要があります。 データ定義言語(DDL)操作の場合、CLIはHiveサービスとして機能します。
すべてのドライバーは、Hiveサーバーと通信してから、Hiveサービスのメインドライバーと通信する必要があります。 Hiveサービスのドライバーは、クライアント固有のアプリケーションおよびすべてのタイプのJDBC、ODBCなどと通信するメインドライバーを表します。さまざまなアプリケーションからの要求は、ドライバーによってメタストアおよびフィールドシステムに処理され、さらに処理されます。
Hiveが提供するサービスは次のとおりです。
- Beeline: Beelineは、ユーザーがクエリをシステムに送信できるコマンドシェルです。 HiveServer2でサポートされています。 これは、SQLLINECLIに基づくJDBCクライアントです。
- ハイブサーバー2:クライアントはハイブに対してクエリを実行できます。 HiveServer1の後継であり、複数のクライアントから複数のクエリを実行できます。 JDBCやODBCなどのオープンAPIクライアントに最適なサポートを提供します。
- Hiveドライバー:ユーザーは、コマンドシェルを介してHiveQLステートメントをHiveドライバーに送信します。 クエリをコンパイラに送信し、クエリのセッションハンドルを作成します。
- Hiveコンパイラ: Hiveコンパイラはクエリを渡すために使用されます。 Hiveコンパイラは、メタストアに格納されているメタデータを使用して、さまざまなクエリブロックと式に対してセマンティック分析とタイプチェックを実行します。 次に、DAG(Directed Acyclic Graph)であるコンパイラによって実行プランが生成されます。 DAGの各ステージは、メタデータ操作、HDFSでの操作、またはマップ/リデュースジョブです。
- オプティマイザー:オプティマイザーの主な役割は、実行プランで変換操作を実行することです。 タスクを分割することにより、効率とスケーラビリティが向上します。
- 実行エンジン:コンパイルと最適化の手順が完了した後、コンパイラーによって作成された実行プランを実行するのは実行エンジンの役割です。 プランは、依存関係の順にHadoopを使用して実行されます。
- メタストア:メタストアは通常、テーブルとパーティションの構造に関連するメタデータ情報を格納するリレーショナルデータベースです。 これは、列および列タイプの情報の格納も含む中央リポジトリです。 シリアライザーとデシリアライザーに関連する情報は、データを格納するHDFSファイルとともに読み取り/書き込み操作に必要なメタストアにも格納されます。 Thriftインターフェースは、Hiveメタデータを照会および操作するためにMetastoreによって提供されます。
メタストアは、次の2つのモードで構成できます。
- リモート:このモードはJava以外のアプリケーションに役立ち、リモートモードではメタストアはThriftサービスです。
- 組み込み:このモードでは、クライアントはJDBCを介してメタストアと直接対話できます。
- HCatalog: Hadoopのテーブルおよびストレージ管理レイヤーはHCatalogです。 Pig、MapReduceなど、グリッド上でデータを読み書きするためのさまざまなデータ処理ツールを利用できます。Hiveメタストアの上に構築されたHiveメタストアの表形式のデータは、他のデータ処理ツールに公開されます。
- WebHCat: WebHCatは、HCatalog用のHTTPインターフェースおよびRESTAPIです。 Hiveメタデータ操作を実行し、Hadoop MapReduce(またはYARN)、Pig、Hiveジョブを実行するサービスを提供します。
3.処理とリソース管理
クエリの実行は、内部のMapReduceフレームワークによって実行されます。
MapReduceフレームワークは、コモディティハードウェアの大規模なクラスターで大量のデータを処理するためのソフトウェアフレームワークです。 データはチャンクに分割され、map-reduceタスクによって処理されます。
4.分散ストレージ
Hiveサービスは、次のアクションを実行するためにHiveストレージと通信します。
- Hiveの「メタストレージデータベース」は、Hiveで作成されたテーブルのメタデータ情報を保持します。
- HDFS上のHadoopクラスターは、クエリ結果とテーブルにロードされたデータを保存します。
ハイブのさまざまなモード
データのサイズに応じて、Hiveは2つのモードで動作できます。
- ローカルモード
Hiveのローカルモードは次の場合に使用されます
- インストールされたHadoopには1つのデータノードがあり、疑似モードでインストールされます。
- 単一のローカルマシンのデータサイズは小さくなります。
- 存在するデータセットが小さいため、ローカルマシンでの高速処理。
- マップリデュースモード
HiveのMapReduceモードは次の場合に使用されます
- Hadoopには複数のデータノードがあり、さまざまなノードにデータが分散されています。
- データサイズが大きく、クエリの並列実行が必要です。
- 大規模なデータセットは、より優れたパフォーマンスで処理できます。
ハイブの特徴
- テーブルとデータベースが作成された後、データがテーブルにロードされます。
- Hiveで管理および照会できるのは、テーブルに格納されている構造化データのみです。
- Hiveフレームワークには、MapReduceに存在しない構造化データを処理する際の最適化と使いやすさの機能があります。
- 使いやすさのために、Hive SQLに触発された言語は、MapReduceの複雑なプログラミング言語と比較してより単純なアプローチです。 Hiveでは、テーブル、行、列などの使い慣れた概念が使用されています。
- クエリのパフォーマンスを向上させるために、Hiveはディレクトリ構造を使用してデータを分割できます。
- Hiveには、リレーショナルデータベースに常駐し、スキーマ情報を格納する「メタストア」と呼ばれる重要なコンポーネントが含まれています。 Hiveとの対話には、WebGUIとJavaDatabase Connectivity(JDBC)インターフェースの2つの方法を使用できます。
- ほとんどの対話には、コマンドラインインターフェイス(CLI)が使用されます。 CLIは、Hiveクエリ言語(HQL)を使用してHiveクエリを作成するために使用されます。
- HQL構文はSQL構文の構文に似ています。
- Hiveでは4つのファイル形式がサポートされています。 TEXTFILE、SEQUENCEFILE、ORC、およびRCFILE(レコード列ファイル)。
結論
Apache Hiveは、Hiveクライアント、Hiveサービス、処理フレームワークとリソース管理、分散ストレージなどの主要コンポーネントで構成されるオープンソースのデータウェアハウジングツールです。
構造および半構造化データを処理するために、Hadoopエコシステムの上に構築されています。 Hiveが提供するユーザーインターフェイスを使用すると、ユーザーはHiveクエリ言語(HQL)でクエリを送信できます。 これは、実行プランを生成するためにコンパイラに渡されます。 計画は最終的に実行エンジンによって実行されます。
ビッグデータについて詳しく知りたい場合は、ビッグデータプログラムのソフトウェア開発スペシャライゼーションのPGディプロマをチェックしてください。このプログラムは、働く専門家向けに設計されており、7つ以上のケーススタディとプロジェクトを提供し、14のプログラミング言語とツール、実践的なハンズオンをカバーしています。ワークショップ、トップ企業との400時間以上の厳格な学習と就職支援。
upGradで他のソフトウェアエンジニアリングコースを確認してください。