この記事は,2013年のエイプリルフール用に作成した記事です.
2013年1月21日,Hadoop Conference Japan 2013 Winter にて, Hive Logo Lovers は恐らく世界初のHive T シャツを片手に,衝撃的なデビューを果たしました.今や,その愛くるしい T シャツは Cloudera や TreasureData のトップエンジニアにも愛用されていると言います.
あれから約2ヶ月半.Hive Logo Lovers は,Hive Logo の露出時間を1秒でも長くしようと活動してきました.
ある日,Hive Logo Lovers は,Hive のクエリ(HiveQL)を実行しながら1つの事実に気がつきました.
Hive Logo は,そのキュートな見た目にも関わず,クエリ実行中にはひとときもその姿を現さないのです.HiveQL を見たら Hive Logo が思い浮かぶ…Hive Logo Lovers はそんな世界を望んでいました.
そこで,Hive で処理した全てのタプルを,容赦なく Hive Logo で置換する GenericUDFHiveLogo を作成しました.GenericUDFHiveLogo は,その名の通り GenericUDF として実装されており,どんな型のデータが渡されてきても,容赦なく Hive Logo に変換します.
なお,GenericUDFHiveLogo は,Hive 0.10.0 で動作確認をしています.
まず,maven を用いてコンパイルを行います.
$ git clone https://github.com/HiveLogoLovers/udfhivelogo.git
$ cd udfhivelogo
$ mvn package
$ cp target/hivelogo-0.0.1-SNAPSHOT.jar ~/
次に,hive を起動して,ADD JAR コマンドと CREATE TEMPORARY FUNCTION コマンドを用いて UDF をロードします.
$ bin/hive
hive (default)> ADD JAR /home/ozawa/hiveudf-0.0.1-SNAPSHOT.jar;
Added /home/ozawa/hivelogo-0.0.1-SNAPSHOT.jar to class path
Added resource: /home/ozawa/hivelogo.jar
hive (default)> CREATE TEMPORARY FUNCTION hivelogo AS 'org.apache.hadoop.hive.contrib.udf.GenericUDFHiveLogo';
OK
さて,早速実行…してみる前に,普通のクエリを実行して,どんなデータが入っているかを見てみます.
hive (default)> describe employees;
OK
col_name data_type comment
name string
salary float
subordinates array<string>
deductions map<string,float>
address struct<street:string,city:string,state:string,zip:int>
name と salary の column を持っているようなので,これに対して select 文を発行してみましょう.
hive (default)> select name, salary from employees;
MapReduce Jobs Launched:
Job 0: Map: 1 Cumulative CPU: 1.29 sec HDFS Read: 1003 HDFS Write: 109 SUCCESSTotal MapReduce CPU Time Spent: 1 seconds 290 msec
OK
name salary
John Doe 100000.0
Mary Smith 80000.0
Todd Jones 70000.0
Bill King 60000.0
Boss Man 200000.0
Fred Finance 150000.0
Stacy Accountant 60000.0
このテーブルには7行のレコードが保持されているようです. 前準備はここまでです.では,hivelogoコマンドを select 文のカラムを選択する箇所で実行してみましょう.
hive (default)> select hivelogo(name,salary) from employees;
実行結果は,↓に表示されているhivelogo.png のようになります.select 文で選択したカラムは無視され, 各タプルが Hive Logo に置換されているのが分かりますね.
Hive Logo Lovers は,クエリ実行中に Hive Logo を拝むことができないという技術的課題に直面しました.この問題を解決するため,Hive の実行中に渡されたクエリを Hive Logo に変換する GenericUDFHiveLogo を作成しました. GenericUDFHiveLogo を用いることによって,HiveQL を実行する度に愛くるしい Hive Logo を見ることができるようになりました.
GenericUDFHiveLogo は,Apache License Version 2 の下で配布されています.本 UDF は,サンプルプログラムとしても有用かもしれません.
Have a good life with hive logo!
Author: Tsuyoshi Ozawa
Date : 2013/4/1