Skip to content

Instantly share code, notes, and snippets.

@oza
Last active December 15, 2015 15:19
Show Gist options
  • Save oza/5281301 to your computer and use it in GitHub Desktop.
Save oza/5281301 to your computer and use it in GitHub Desktop.

GenericUDFHiveLogo リリース!

この記事は,2013年のエイプリルフール用に作成した記事です.

背景

2013年1月21日,Hadoop Conference Japan 2013 Winter にて, Hive Logo Lovers は恐らく世界初のHive T シャツを片手に,衝撃的なデビューを果たしました.今や,その愛くるしい T シャツは Cloudera や TreasureData のトップエンジニアにも愛用されていると言います.

あれから約2ヶ月半.Hive Logo Lovers は,Hive Logo の露出時間を1秒でも長くしようと活動してきました.

HiveLogo

問題

ある日,Hive Logo Lovers は,Hive のクエリ(HiveQL)を実行しながら1つの事実に気がつきました.

Hive Logo は,そのキュートな見た目にも関わず,クエリ実行中にはひとときもその姿を現さないのです.HiveQL を見たら Hive Logo が思い浮かぶ…Hive Logo Lovers はそんな世界を望んでいました.

解法 - GenericUDFHiveLogo -

そこで,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 に置換されているのが分かりますね.

HiveLogo

まとめ

Hive Logo Lovers は,クエリ実行中に Hive Logo を拝むことができないという技術的課題に直面しました.この問題を解決するため,Hive の実行中に渡されたクエリを Hive Logo に変換する GenericUDFHiveLogo を作成しました. GenericUDFHiveLogo を用いることによって,HiveQL を実行する度に愛くるしい Hive Logo を見ることができるようになりました.

GenericUDFHiveLogo は,Apache License Version 2 の下で配布されています.本 UDF は,サンプルプログラムとしても有用かもしれません.

ソースコードは,github に公開されています

Have a good life with hive logo!

Author: Tsuyoshi Ozawa

Date : 2013/4/1

@kumagi
Copy link

kumagi commented Apr 1, 2013

みさわ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment