Apache Hive

用語集のトップページへ

Apache Hive とは

Apache Hive は、Apache Hadoop 分散ファイルシステム (HDFS) から抽出された大規模なデータセットの読み取り、書き込み、および管理を行うために設計されたオープンソースのデータウェアハウスソフトウェアで、より規模の大きい Hadoop エコシステムの側面も持ち合わせています。

Apache Hiveの豊富なドキュメントと継続的なアップデートにより、Apache Hiveはアクセスしやすい方法でデータ処理に革新を起こし続けます。

Apache Hive の歴史

Apache Hive は、共同開発者の Joydeep Sen Sarma 氏と Ashish Thusoo 氏が Facebook 在籍中に考案されたオープンソースのプロジェクトです。Hive は、Apache Hadoop のサブプロジェクトとしてスタートしましたが、現在は単独のトップレベルプロジェクトに成長しています。Hadoop と MapReduce ジョブの制限が増え、2006 年には数 10 GB/ 日だったデータのサイズが 1 TB/ 日に増加し、さらに数年の間に 15 TB/ 日へと増加しています。Facebook のエンジニアが複雑なジョブを容易に実行できなくなったことにより、Hive が誕生しました。

Apache Hive は、2 つの目標を達成するために開発されました。まずは、SQL ベースの宣言型言語でありながら、SQL では不十分な場合にエンジニアが独自のスクリプトやプログラムを追加できるようにすることです。これにより、SQL のスキルを持つエンジニアのほとんどが、他の製品と比べて中断や再トレーニングを最小限に抑えて Hive を使用できるようになりました。

次に、組織内における全てのデータセットを Hadoop ベースのメタデータストアに一元化することです。Apache Hive は、Facebook 内部での開発が発端ですが、その後、Netflix などの他企業でも利用、開発されています。また、Apache Hive は、Amazon Web Services の Amazon Elastic MapReduce にも含まれており、Amazon はソフトウェアのフォークを維持しています。

Hive の特徴

Apache Hive は、HDFS や Amazon S3、Azure Blob Storage、 Azure Data Lake Storage、Google Cloud Storage、Alluxio といった Hadoop 互換のファイルシステムに格納された大規模データの分析をサポートします。

スキーマオンリードで HiveQL という SQL ライクなクエリ言語を提供し、クエリを Apache Spark、MapReduce、Apache Tez のジョブに透過的に変換します。その他の Hive の特徴は以下のとおりです。

  • Hive データ関数により、大規模なデータセットの処理やクエリをサポートします。これらの関数が提供する機能には、文字列操作、日付操作、型変換、条件演算子、数学関数などがあります。
  • リレーショナルデータベース管理システム(RDBMS)にメタデータを格納します。
  • Parquet、プレーンテキスト、RCFile、HBase、ORC(Optimized Row Columnar)といったさまざまなストレージタイプに対応しています。
  • Hadoop エコシステムに格納された圧縮データをアルゴリズムで操作します。
  • ユーザー定義関数(UDF)が組み込まれており、日付、文字列、その他のデータマイニングツールを操作します。Hive では、組み込み関数が用意されていないユースケースを処理するために、UDF セットの拡張をサポートしています。
  • SQL ライクなクエリ言語の HiveQL が、内部的に MapReduce や Tez、Spark のジョブに変換されます。

Apache Hive のアーキテクチャと主要な Apache Hive コンポーネント

Apache Hiveアーキテクチャの主要コンポーネントは、Hive Server 2、Hive Query Language(HQL)、外部 Apache Hive メタストア、および Hive Beeline Shellです。

Hive Server 2

Hive Server 2 は、ユーザーやアプリケーションからのリクエストを受け付け、実行プランを作成します。その後、YARN ジョブを自動生成し、SQL クエリを処理します。また、サーバーは Hive オプティマイザと Hive コンパイラをサポートし、データの抽出と処理を効率化します。

Hive Query Language

Apache Hive は、SQL を連想させるコードの実装を可能にすることで、非構造化データを分類するための大量の JavaScript コードを採用するのではなく、組み込みの Hive Query Language (HQL)を使ってクエリを作成できるようにしました。これらのステートメントは、大規模なデータセットを誘導し、結果を洗練化、そしてコスト効率と時間効率に優れた方法でデータを共有するために使用できます。

Hive メタストア

Apache Hive インフラストラクチャの中心的なリポジトリであるメタストアには、Hive のすべてのメタデータが保存されています。メタストアでは、メタデータを Hive テーブル とパーティションにフォーマットして、リレーショナルデータベース間でデータを比較することも可能です。メタデータには、テーブル名、カラム名、データ型、パーティション情報、HDFS 上のデータ位置などが含まれます。

Hive Beeline Shell

他のデータベース管理システム(DBMS)と同様に、Hive には独自のビルトインコマンドラインインターフェースがあり、ユーザーはHQLステートメントを実行することができます。また、Hive Shell は Hive JDBC および ODBC ドライバを実行するため、Open Database Connectivity または Java Database Connectivity アプリケーションからクエリを実行できます。

Apache Hive ソフトウェアの仕組み

Hive Server 2 は、ユーザーやアプリケーションからのリクエストを受け付け、実行プランを作成します。その後、YARN ジョブを自動生成し、SQL クエリを処理します。YARN ジョブは、MapReduce 、Tez 、Spark のワークロードとして生成される可能性があります。

このタスクは、 Hadoop で分散アプリケーションとして動作し、SQL クエリの処理後、結果はエンドユーザーやアプリケーションに返されるか、HDFS に戻されます。

Hive メタストアは Postgres や MySQL などのリレーショナルデータベースを利用してこのメタデータを保持し、Hive Server 2 はクエリ計画の一環としてテーブル構造を取得します。場合によっては、アプリケーションの基礎的な処理の一部として、メタストアに問い合わせることが可能です。

Hive のワークロードは、Hadoop のリソースマネージャである YARN で実行され、Hadoop ジョブを実行できる処理環境が提供されます。この処理環境は、Hadoop クラスタ内のさまざまなワーカーノードから割り当てられたメモリと CPU で構成されています。

YARN は、HDFS のメタデータ情報を活用し、必要なデータが存在する場所への確実な処理展開を試みます。MapReduce や Tez 、 Spark 、 Hive は、 SQL クエリのコードを MapReduce や Tez 、 Spark ジョブとして自動生成することができます。

Hive が MapReduce を活用するようになったのは最近のことですが、 Cloudera Hadoop のほとんどのデプロイメントでは、 Hive が MapReduce や Spark を使用するように設定されています。また、 Hortonworks(HDP)のデプロイメントでは、通常、実行エンジンとして Tez が設定されています。

Apache Hive で使用される5種類のデータ型とは

Apache Hive は、バッチ処理によりペタバイト規模のデータを高速に抽出し分析できるため、データ処理だけでなくアドホッククエリの実行にも最適です。

Apache Hive のデータ型は、数値、日付/時間、文字列、複合データ、その他の5つのカテゴリで構成されています。

数値データ型

その名前が示すとおり、このデータ型は整数データがベースとなっています。データ型の例としては、「TINYINT」や「SMALLINT」、「INT」、「BIGINT」があります。

日付/時間データ型

このデータ型は、時刻と日付を入力するもので、「TIMESTAMP」や「DATE」、「INTERVAL」などのデータを入力できます。

文字列データ型

このデータ型も非常にわかりやすく、入力されたテキストデータ、つまり「文字列」を処理するためのデータとして実装することができます。例えば、「STRING」や「VARCHAR」、「CHAR」などのデータを入力できます。

複合データ型

より高度なデータ型の一つである複合データ型は、より精巧なデータを記録し、「STRUCT」や「MAP」、「ARRAY」、「UNION」などのデータから構成されています。

その他のデータ型

他の4つのカテゴリーのどれにも当てはまらないデータ型をその他のデータ型と呼び、そこには「BOOLEAN」や「BINARY」などのデータを入力できます。

Hive Apache での Map Join の仕組み

Apache Hive では、 Map Join は MapReduce の段階を回避しながら、2つのテーブルからデータを結合することによって、クエリの速度と効率を向上させるために採用されている機能です。

リレーショナルデータベース管理システム(RDBMS)とは何で、 Apache Hive はそれをどのように利用するのか

リレーショナルデータベース管理システム(RDBMS)は、行または列ベースのテーブルストラクチャにメタデータを格納することで動作するデータベースモデルであり、異なるデータセットを接続して比較することができます。

RDBMS を利用することで、 Apache Hive はすべてのデータを安全、確実、かつ正確に保存、処理することができます。これは、役割ベースのセキュリティや暗号化通信などの統合機能により、抽出した情報へのアクセス権限が適切な人のみに付与できることにより実現します。

Apache Hive と従来の RDBMS の違い

Apache Hive と RDBMS には、いくつかの重要な違いがあります。

  • RDBMS の機能が何度も読み取り/書き込みを行うのに対し、Hive では一度だけ書き込み、何度も読み取りを行います。
  • Hive は、スキーマオンリードのルールに従っており、データのチェックやパース、検証は行わず、ファイルのコピーや移動のみを行います。一方、従来のデータベースでは、スキーマオンライトのルールに従って、テーブルにスキーマが適用されます。
  • Hive は Hadoop 上に構築されているため、Hadoop や MapReduce と同じ制限に準拠する必要があります。他の RDBMS は、その限りではありません。

Apache Hive vs Apache Spark

Apache Spark は、様々なデータセットの大量データを処理するために設計された分析フレームワークで、 R から Python まで様々な言語をサポートできる強力なユーザーインターフェースを提供します。

Hive は、データを行、列、データ型を持つテーブルとして表現し、HiveQL と呼ばれる SQL インターフェースを使ってクエリや分析を行うための抽象化レイヤーを提供します。また、Hive は、Hive LLAP による ACID トランザクションをサポートしています。トランザクションは、複数のユーザーやプロセスが同時にデータにアクセスし、CRUD(生成、読み取り、更新、削除)操作を行う環境において、データ表示の一貫性を保証します。

Databricks が提供する Delta Lake は、ACID トランザクションを保証するという点では Hive LLAP に似ていますが、オープンソースの Delta Lake には、データアクセス時の性能と信頼性を高める利点があります。Spark SQL は、行、列、データ型を持つテーブルとして表現される構造化データを操作するための Apache Spark のモジュールです。

Spark SQL は SQL 2003 に準拠しており、データ処理の分散エンジンとして Apache Spark を使用します。Spark SQL インターフェースに加えて、DataFrames API を使用して Java、Scala、Python、R を用いてデータを操作することが可能です。Spark SQL は、HiveQL に似ています。

どちらも ANSI SQL 構文を使用しており、Hive 関数の大部分は Databricks 上で実行されます。これらの Hive 関数には、日付/時刻の変換やパース、コレクション、文字列操作、数学演算、条件付き関数が含まれます。

ただし、Hive 特有の関数には、Spark SQL に相当するものに変換が必要な関数や、Databricks 上の Spark SQL には存在しない関数があります。ANSI SQL 構文を使用した全ての HiveQL は、Databricks 上の Spark SQL で動作すると考えてよいでしょう。

ANSI SQL の集計と分析関数も含まれます。Hive は、ORC ファイル形式に最適化されており、Parquet もサポートしています。Databricks は、Parquet と Delta に最適化されており、ORC もサポートしています。Databricks では、オープンソースの Parquet をファイル形式として使用する Delta の使用を推奨しています。

Apache Hive vs Presto

PrestoDB 、通称 Presto は、もともとFacebookで立ち上げられたプロジェクトで、ペタバイト規模のデータを高速に処理・分析できる分散型 SQL クエリエンジンです。Presto のインフラストラクチャは、 MySQL や Teradata から MongoDB や Cassandra まで、リレーショナルデータベースと非リレーショナルデータベースの両方の統合をサポートしています。

関連リソース


用語集のトップページへ