Apache Hiveとは

Hiveはペタバイト規模のオープンソースなコンピューティングフレームワークで、HDFS(Hadoop分散ファイルシステム)や互換性のある他のBLOBストア(Amazon S3など)に置かれている大規模なデータセットの読み込み、書き込み、管理を円滑に行います。

Hiveは当初、Tez上で稼働するHiveの最も新しい実装であるMapReduceジョブを書き込む目的で構築され、アーキテクチャとしてはSparkに類似しています。HiveはHiveQLというSQLに近い言語を用いた分析に対応し、拡張性、冗長性、巨大なデータセットとの適合性など、Hadoopの利点をすべて受け継いでいます。

膨大な量のユーザー生成データにクエリを実行する際の便利な方法としてFacebookが2008年に開発したHiveは、Hadoopエンジンで使えるSQLでも最も古く完成度の高いものです。そのためHiveは、Hadoopエンジンで最も安定したSQLを求める組織に人気の選択肢となっています。

Apache Hiveの考慮事項

安定性

2008年にリリースされたHiveは、5年にわたってHadoopエンジンにおける最も安定した完成度の高いSQLとしてのポジションを死守し、現在も開発と改善が続けられています。

クエリのスループット

Hiveは極めて大きなテーブル(10億行)を簡単に結合することが可能です。高速なインメモリSQLエンジンでは時に、超巨大なファクトテーブル間のクエリでエラーが生じますが、Hiveの処理エンジンならそんなテーブルも簡単に結合できます。Hive on Tezの現在のバージョンでも、高スループットと高速なクエリ処理のどちらかを犠牲にする必要はなくなりました。

しっかりした開発者コミュニティ

Hiveの大きな利点のひとつは、オープンソースのコミュニティにおける位置付けとコミュニティサボートの幅広い基盤です。このサポートの一例であるStinger Initiativeは、インタラクティブなクエリと追加機能をHiveに加えようとHive開発者コミュニティで立ち上がったムーブメントで、その結果、Hiveの新しい実行エンジンとなるTezが誕生しました。

Hiveの最適な使用例

バッチおよびETL処理

Yahoo! JAPANが2,000件のランダムなSQLクエリのバッチ実行をHiveとImpalaでテストしたところ、驚くべき結果が出ました。2,000件のクエリのほとんど(約1,800件)が20秒未満で返ってきた一方で、返信速度には広いばらつきが見られました。バッチ処理で膨大な並列処理に対応できたHiveが、このベンチマーク比較の明らかな勝者となりました。

Hiveのアーキテクチャ

Apache Hiveは当初、SQLクエリをMapReduceプロセスに変換するために構築されましたが、クエリの実行にMapReduceを使うことで大幅なレイテンシが発生するため、最新のHiveはTez上で動作しています。Tezは、中間作業のディスクへの書き込みを回避するアプリケーションフレームワークです。

SpryのチームがHive on MapReduceとHive on Tez、そして他の2つのSQL on Hadoopエンジンのベンチマーク比較テストを行ったところ、Hive on Tezは複数の種類のクエリで、最速のクエリエンジンと少なくとも同等か、時には上回る結果を示しました。

データの種類

Hiveは構造化、半構造化(JSON、XML、ログなど)、非構造化の各データを処理することができます。半構造化データまたは非構造化データの処理方法をHiveに指示するために、SerDe(シリアライザ、デシリアライザ)が必要な場合もあります。

行の範囲(量)

Hiveは、多大なクエリを記述して膨大な量のデータを取り扱えるよう設計されています。2014年の時点で、Facebookは300 PB以上のHiveデータを保存しており、毎日600TBのデータを生成していました

Hadoop Hiveの使用と管理

データがHDFSや他の分散ファイルシステムにロードされたら、そのデータのHiveテーブルを作成できます。Hiveのテーブルには外部テーブルと内部(マネージド)テーブルの2種類があり、データの読み込み、コントロール、管理の方法を制御できます。この2種類のテーブルの主な違いは、内部テーブルを削除するとメタデータと基礎データの両方が削除されることです。外部テーブルを削除してもメタデータが削除されるのみで、基礎データはHDFSに残ります。

CREATE TABLE文は、Hiveで新規テーブルを作成・定義します。CREATE文にPARTITIONED BY句を含めると、分割列を指定することができます。分割(パーティション化)によって、データストレージをどう構成するかHiveに指示します。分割を実行するたびに、それぞれのパーティションにデータ保管のためのサブディレクトリが作成されます。分割に加え、HiveではCLUSTERED BY句を使って、各パーティションのデータを複数のファイルに分けて整理するバケット化もサポートしています。バケット化は、特定のタイプの結合のパフォーマンスを高めることが可能です。特に、カーディナリティの高いフィールドで最も効果を発揮します。

テーブルを作成したら、LOAD DATAコマンドを使ってファイルからデータを直接ロードするか、INSERTでクエリから挿入できます。

メンテナンス

Hiveクラスタに関する最も簡単で有用なヒントは、まだであればApache Tezにアップグレードすることです。他の有効な手法には、異なる種類のファイルを用いて圧縮や読み取りを最適化する、テーブルのアーキテクチャをリファクタリングしてクエリのパフォーマンスを最大化する、などがあります。

アナリティクスを快適に

ビジネスインテリジェンス、ビッグデータ分析、顧客の360°ビュー。
Lookerはお客様のどんなニーズにもお応えします。当社のデータエキスパートにご相談ください。

デモをリクエスト