Apache Hiveは、Hadoopを基盤とするデータウェアハウス構築環境であり、大規模なデータセットに対する集約、クエリ、分析を効率的に行うためのツールです。元々は
Facebookによって開発されましたが、その後、
Netflixをはじめとする多くの組織が開発と利用に携わっています。また、
Amazon Web ServicesのAmazon Elastic
MapReduceにも組み込まれています。
特徴と機能
Apache Hiveは、Hadoop互換のファイルシステム(例えばAmazon S3)に保存された大規模なデータセットを分析するために使用されます。データ操作には、
MapReduceを完全にサポートした
SQLライクな言語である「HiveQL」を利用します。
主な機能
HiveQL: SQLに似たクエリ言語であり、データの抽出、変換、分析を容易にします。内部的にはMapReduceジョブに変換され実行されます。
インデックス機能: クエリの高速化のために、ビットマップインデックスを含むインデックス作成をサポートしています。
メタデータ管理: 標準設定では組み込みのApache Derbyデータベースにメタデータを格納しますが、MySQLなどの外部クライアント・サーバデータベースを使用することも可能です。
多様なファイルフォーマット: TEXTFILE、SEQUENCEFILE、RCFILEといった複数のファイル形式をサポートしています。
ストレージタイプ: プレーンテキスト、RCFile、HBaseなど、さまざまなストレージタイプに対応しています。
RDBMSへのメタデータ格納: クエリ実行時のセマンティックチェック時間を短縮するために、メタデータを関係データベース管理システムに格納できます。
圧縮データの処理: Hadoop環境に格納された圧縮データを扱うことができます。
組み込みUDF: 日付型や文字列型を扱うための組み込みユーザー定義関数(UDF)を提供します。また、ユーザーがカスタムUDFを作成して機能を拡張することも可能です。
HiveQLの詳細
HiveQLは
SQLをベースにしていますが、
SQL-92の完全な互換性はありません。例えば、
SQLにはない複数テーブルへのインサートや、SELECT結果を元にしたテーブル作成(create table as select)が可能です。しかし、インデックスに関しては限定的なサポートに留まり、
トランザクションやマテリアライズドビュー、副問い合わせのサポートも限られています。
HiveQLのクエリは、
コンパイラによって
MapReduceジョブの
有向非巡回グラフに変換され、Hadoopに渡されて実行されます。
関連技術
Apache Pig: 大規模データ分析のための別のプラットフォーム。
Apache Sqoop: RDBMSとHadoop間のデータ転送ツール。
Jaql: データ処理のためのクエリ言語。
参考資料
公式ウェブサイト:
https://hive.apache.org/
VLDB 2009での[Facebook]]によるオリジナル論文: [Hive A Warehousing Solution Over a MapReduce Framework
AWSエンジニアによるAmazon Elastic MapReduceでのApache Hiveの利用に関するYouTubeビデオ:
Part 1
Part 2