hadoop-logo
ようこそ Tech blogへ!
「これからHadoopを勉強しよう」という方はまず下記のページから

サイトの移行に伴って画像が表示されないなどの不具合が生じています

2014年版 Hadoopを10分で試す(3) まずはHiveから(前編)

Hadoop関連(全部俺) Advent Calendar 2014:11日目の記事です
Cloudera Quickstart VMによりHadoopの環境が用意できました。HadoopのコアはHDFS(Hadoop分散ファイルシステム)とMapReduce(分散処理)ですが、今回はHadoopに関するところは無視して、まずは10分(ぐらい)で Hiveとはどんなものか、使いながら把握していきましょう。かなり大雑把なので、正確な情報は書籍やウェブでご確認下さい。
HDFSやMapReduceについては以前書いた記事などを参考にして下さい(めざせ!hadoopエンジニア(開発者編)Hadoopを40分で理解する

Hiveとは

hive_logo_mediumです。愛くるしい(笑)。見れば見るほど愛着がわいてきます(笑)。なお、こんな非売品&限定のHiveTシャツもあります。

SQLを知っている人は多い

 
HiveはApacheプロジェクトのOSS(オープンソースソフトウェア)で、元々Facebookで開発されたプロジェクトです。ユーザーは、Javaなどの言語でMapReduceのコードを記述するのではなく、SQLライクな構文でクエリを記述します。HiveはSQLライクなクエリをMapReduceのジョブとして実行してくれるのです。
Hadoop(HDFS)にはデータベースに収まらないような量のデータ、データベースでは扱いにくい非構造データ(例:ログ)などを格納できるので、Hadoopのことをあまり知らなくても、Hiveを使ってこれらのデータの処理や分析ができるわけです。

例: Hadoop (HDFS) に格納したデータをクエリするクエリ

 

SELECT * FROM sample_07 ORDER BY salary DESC;

#SQLライクですね。
なお、Javaで同等の処理を行う場合、通常はmap処理、reduce処理、ドライバーを記述する必要があります。記述するソースコードの量はそれほどでもありませんが、MapReduceの仕組みを理解する必要があります。一方でSQLで書きにくいような処理には有利です。
それに対して、SQLの知識があるユーザーは多いので、SQLライクなクエリが書けるHiveは生産性が高く、メンテナンスなども比較的容易です。

Hiveを使ってみよう

何はともあれHiveのクエリを使ってみたい、という方は、Hueのインストール時にセットアップされる、サンプルの sample_07とsample_08 テーブルを使ってみましょう。Hueでメタデータを確認し、クエリをしてみます。(前提条件として、HDFSとMapReduceが動作していることが必要です)
Hueの一番上のメニューの[Query Editor]でHiveを選択して、左のペインから現在登録されている sample_07 テーブルをクリックしてみましょう。
hive_sample07左側のペインにsample_07テーブルの列情報が表示されます。
詳細を確認するには、sample_07の横にある、目のようなアイコンをクリックしましょう(マウスカーソルを重ねると、Metastore Browserで表示、と表示されます)。なお、データを確認したい場合は、その横にあるアイコン(同、サンプルデータをプレビュー)をクリックします。
metastore_managerMetastore Managerは、テーブルの詳細情報を表示します。Metastoreについては次回補足します。
さて、先ほどの画面(Hive Editor)に戻り、何かクエリしてみましょう。クエリエディタに入力中、Ctrl+Spaceを押すと、候補をポップアップしてくれるので便利です。
hive_editor入力したら[実行]ボタンを押して実行してみましょう。MapReduceのジョブが開始し、しばらく待つと下のペインに結果が表示されるはずです。
hive_result簡単ですね!
このデータでは足りない、という方は「HueでCSVデータからHiveのテーブルを作る」を参考に、Hueを使ってデータを取り込んでみましょう。
今回クエリしたデータはテキストでTSV(タブ区切り)の構造化データですが、Hiveはテキスト以外のフォーマット(RCFile, Parquetなど)にも対応しており、むしろ別形式で保存してあるデータを使った方がパフォーマンスが良い場合が多いのですが、今回は割愛します。
このようにHiveはSQLを知っている方に取って非常に便利ですが、クエリにはそれなりの時間がかかります。複雑なクエリ、テーブルを結合するようなクエリになると、数時間もかかることがあります。MapReduceはバッチ処理であり、リアルタイムな結果を求めるには適していません。データの分析にはニアリアルタイムで検索できるImpalaも検討して下さい。
多分(?)次回に続きます。
 

コメント