GMOインターネット株式会社
ホーム > GMO最新ネット業界レポート一覧 > GMO最新ネット業界レポート

企業情報

GMO最新ネット業界レポート

第16回 テクノロジー編(後編)
前編では、Hiveの概要とインストールについてレポートした。後編では「GMOとくとくショップ」で実際に使っているHiveQLについて説明することにしよう。
1.HiveQLの構文

HiveQLはHiveでデータを操作するためのSQLに非常によく似た言語です。前編で述べた通り、Create table文、Load文、Insert文、Select文が基本構文になります。

  • Create Table文
  • 図4 HiveQL-Create table文サンプル

    カラム定義の部分については一般的なSQLのCreate table文とほとんど同じです(図4)。データ型は多くの場合string型かint型を選択します。MySQLにあるようなdateなどの日付型はありません。日付関数のようなものはありますが、基本的に日付はstring扱いになります。一般的なSQLと大きく異なるのは、CREATE直後のEXTERNALオプションと、カラム定義の後のROW FORMAT句などです。

    EXTERNALオプションは、前編で述べたようにHadoop(HDFS)上の既存データに対して後からテーブルを作る場合に必要なオプションです。EXTERNALオプションを付けると実体となるデータファイルをこのテーブルの操作と関係なく自由に置き換えられます。EXTERNALオプションを付けなければ、一般的なRDBと同じようにテーブル操作に影響されます。テーブルを削除すればHadoop(HDFS)上のデータファイルも消えてしまいます。

    ROW FORMAT句はデータの区切り文字を指定します(カンマ区切りやタブ区切りなど)。STORED句はデータの保存形式で、主にHadoopのファイル形式であるSEQUENCEFILEか、一般的なテキストファイルのTEXTFILEを指定します。LOCATION句は保存先のHadoop(HDFS)上のディレクトリを指定します。

  • Load文
  • 図5 HiveQL-Load文サンプル

    Load文はMySQLのLoad文に似ています(図5)。LOCALオプションを付けると、ローカルサーバー上のファイルをアップロードすることができます。OVERWRITEオプションを付けるとLoad先のデータが入れ替わります。OVERWRITEオプションがなければテーブルの既存データに追記されます。次に紹介するHiveのInsert文はこのOVERWRITE付きが前提になるため、データを追記するという点では、MySQLなどに実装されているバルクInsert文がこのLoad文に最も近いと思われます。

  • Insert文(Insert~Select文)
  • 図6 HiveQL-Insert文サンプル文(1)

    図7 HiveQL-Insert文サンプル文(2)

    HiveのInsert文はSelect文と組み合わせて、Insert~Select文の形で使います(図6, 図7)。Insert直後のOVERWRITEは任意ではなく必須です。そのため、HiveのInsert文は必ずデータ入れ替えになります。Insert文の主な使い方は、Select文で加工・集計して別のデータとして保存することです。Insert先にはローカルファイルを直接指定することもできます。

    加工・集計は一般のSQLと同じようにSelect文のWhere句やGroup By句、関数を使って行います。特徴的なのはWhere句のRLIKE演算子で、正規表現が使えるためSQLのLIKE演算子より強力です。また、正規表現を使ってカラム値を整形するregexp_replaceのような関数もあり、文字列の加工は強いです。

    Group Byで利用できる関数も、RDBほどたくさんありませんが、カウントやサム、アベレージなどの基本的な関数は用意されています。Hiveでカウントするにはcount(*)ではなく、count(1)と書かなくてはいけません。

    複雑な集計は、何段階かに分けてInsert~Select文を使用したり、サブクエリを使ったりすることで補うことができます。

  • Select文
  • Insert~Select文のSelect文と同じです。Select文はInsert文と組み合わせなくても単独で実行できます。

HiveQLを組み合わせれば、ほとんどSQLの知識だけでMapReduceのプログラムを一から作り込まなくても加工・集計ができるので、非常に便利です。

2.GMOとくとくショップでの利用

GMOとくとくショップでは、日々のサーバーログを使って「人気キーワード」や「人気商品」をHiveを使って自動集計しています。サーバーログを集計に適した形に整形してTSVファイルとしてHadoop上に毎日作成します。このTSVファイルをEXTERNALオプション付きのテーブルとして扱って集計を行っています。

また、HiveはHadoopのdfsコマンドをHiveクライアントから利用することができます。GMOとくとくショップでは最終的にローカルファイルとして結果を取り出すために、ローカルファイルに出力するInsert文ではなく、Hiveのクライアントからdfs -getコマンドを使う方法を採用しました。その方が簡単に取り出せるためです。

GMOとくとくショップでは、これらの処理をシェルスクリプト化して日々運用しています。

最後に…次世代システム研究室ではクラウドを作りたいエンジニアを募集しています。ご興味がある方はこちらからエントリーをお願いします。

2010.5.26


*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。

 

Copyright (C) GMO Internet, Inc. All Rights Reserved.