2012年12月27日木曜日

Huahin Manager 0.2.0 released

CDH4 と Apache 2.0.2-alpha対応でございます。
beta版から設定項目も増えてるので注意が必要です。
以下、主な出来事

  • Job関連のAPIは変わってない
  • YARN Application APIが追加
    • Job Kill だけじゃなくて Application Kill でもいけるよ!
  • それぞれのManager等が持っているREST APIにproxy接続
  • HiveQLの実行(HiveServer1 or 2対応)
    • 戻り値を返さない場合は、executeを使用
    • 戻り値を返す場合は、executeQueryを使用
      • 戻り値はストリームで返される
      • 実行時間がアレだとアレなのでタイムアウトには気をつけてね
  • Job の キュー登録にHiveが追加
    • キューでの実行なので出力先はテーブル、HDFSにする必要あり


たぶん、次はPigが入るかなと、0.1系もHiveなコードは入ってるんだけどpushをしてないのでそのうちにあれするかなと。

Huahin Framework

2012年11月22日木曜日

Huahin Manager 0.2.0-beta released

さて、皆さんお待ちかね Manager の CDH4 対応です。
存分にステマするが良いと思います。

今回、beta としてるのはCDH4のクラスタが無いのでクラスタでのテストが出来てないってこと...
なのでbetaとして出してクラスタ持ってる人にテストしてもらおうかなと思って。。

あとMRv1には対応してるけど、YARN対応はまだなのとApplication Masterとかに対応してないのでbetaが取れる時に入る感じで。まだCDH4しか対応してないのでApache版もその時に...



2012年10月19日金曜日

Huahin EManager 0.1.0 released

EManager、Managerと何が違うのかっていうと、Amazon Elastic MapReduce(EMR)に特化したManagerです。もちろん、EManagerのEはEMRのEです。

本当はManagerの中に入れちゃおうと思ったんだけど、いろいろ無理が出る感じがしたので、分けたしだいです。まぁ、内部での使用もEManagerとManagerがあって、インターフェースで切り替えて、オンプレHadoopとEMRを使い分けてる感じなので、同じっちゃ同じなんですけど。

EManagerができることは、基本Managerと同じで以下のとおり。
  • Job Flowの一覧取得
  • Job Flowの詳細取得
  • StepのKill
  • キューの一覧取得
  • キューの詳細取得
  • キューの登録
まず、Managerと違う点。
Jobの一覧等がJob FlowとStepという感じでEMRのものになってます。キューはManagerと同じだけど、Jobの実行できるものがHive, Pig, Streaming, Custom JarとEMRで使えるものは基本的に使えます。

EManager独自の機能。
まず、Stepのkill。現状、EMRはJobのkillを行うにはEMR自体をターミネートするか、マスターインスタンスにログインしてkillするしか方法がありません。EManagerはManagerと組み合わせることでこの機能を実現しています。

クラスタ数の指定。複数のHadoopクラスタ(EMR)を起動し制御することができます(複数起動する場合は、インスタンスの上限値に注意する必要あり)。

コスト管理。EC2は時間課金なので1時間使用しようが5分使用しようが料金は同じです。Jobが終了したらEMRをターミネートするのではなく、起動したままで次のキューが登録されたら、起動しているEMRにJobを割り振ります。1時間未使用のままであれば自動的にEMRがターミネートされます。

Job(step)の実行。EMRはS3に保存してあるスクリプトなりを指定して実行しますが、EManagerのREST API(APIしかないんだけど)のメソッドでPOSTを指定した場合にファイルをS3に送信することができるのでオンデマンドで実行する時に楽です。オプションの指定で、実行が完了したスクリプトは削除もできます。

などなど。

一応これで、内部のツール系ものは出し切った感。


2012年8月31日金曜日

Processing small data by Hadoop

ビッグデータ()が流行ってる昨今ですが、あえてスモールデータを処理する話題でも。

ビッグデータってさぞかしデカいデータでしょうって話がよく聞かれるわけですよ。
(最近はあんまり聞かないのでもうみなさんあきてきましたか?)
◯TB、◯PB、えぇ、確かにデカいです。こんなん処理するのにどのぐらい掛かるんですか?って話もあります。

んじゃ、逆を言えばこれらからみると数百MBぐらいのデータって小さいですね。
中身も100万件ほどしかなかったり。
単純に集計やる程度だったらHadoopとか必要ないですね。ってか、誰がそんなめんどかいことやるのかと。

じゃあ、ちょっと考えてみる。
100万件のデータがあります。全部1件ずつそれぞれ処理をしなければいけません。1件処理するのに大体0.1秒掛かったとします。

1,000,000(件) * 0.1(秒) / 60 / 60 = 27.77...時間

これ、スモールデータですか?1日じゃ処理しきれませんよ...
これをマルチスレッドで並行してやったとしても

約28時間 / 8(4コア X 2の想定) = 3.5時間

それでも3.5時間掛かるわけです。

まぁ、こんな話をしようと思ってたわけじゃないのでこの辺りでやめておいて本題。


上記のような処理をHadoopでやらせようと思った場合、単純にMapがネックになる。例えば、上記のものが300MBだったとする。HDFSのデフォルトのブロックサイズは64MB。Mapはブロック単位で処理されるので

300 / 64 = 5(約4.6)

ってことは、Mapは5個しか起動されないわけです。20ノードとか並べてもまったく意味がないわけですね。。。これを回避する方法としてInput部分を自分でアレするってのがありますが、正直そんなのめんどくせぇよってなるわけです。ってことでお手軽な方法として。

FileInputFormat.setMinInputSplitSize(job, 1048576);
FileInputFormat.setMaxInputSplitSize(job, 1048576);

とかやって処理するサイズをちっちゃくしてあげましょう。


次に数GB程度のファイルを成形する処理を考えてみましょう。
先に書いちゃうとローカルモードのHadoop速いです。速いです...
Hadoopのイニシャルコストって結構掛かるのですぐ起動するし速いです。

んでは、やり方。

普通(分散)のHadoop同様Mapがブロック単位で処理されます。ここでネックになってくるのがMapが1つずつ起動するってことです。ようするに一つ目のMapが終了すると次のMapが起動する。タスクの起動コストが高くとても効率が悪いです。。。

上記とは逆でsplitサイズをデカい値にしちゃってMapを一つしか起動しないようにしちゃいます。

FileInputFormat.setMinInputSplitSize(job, 2147483648);
FileInputFormat.setMaxInputSplitSize(job, 2147483648);

次に、これだとシングルスレッドになってしまうのでマルチスレッド化しちゃいましょう。

job.setMapperClass(MultithreadedMapper.class);
MultithreadedMapper.setMapperClass(job, Mapper.class);
MultithreadedMapper.setNumberOfThreads(job, 4);

MultithreadedMapperはMapperをマルチスレッド化してくれるので自分でマルチスレッドの処理を書かなくてすむのでとても楽ですね。
ただ、障害が起きると即死亡なのでそこは気をつけましょう。

ローカルで処理しきれないぐらいでかくなってきたらクラスタにしちゃえばいいので一粒で二度美味しい的な感じがあります(まさにビッグデータ、スモールスタート!)。

本当はここだけをメモ代わりに書いとこうと思ったんだけど、余計なことまで書いちゃったのはもういいや。

ということで、上記のファイルの処理だけやるヤツを公開しました。

Huahin Tools

まだ、ファイルを成形(デフォルトではデフォルトのApacheログを成形)する機能だけしかないですが、成形してからDBなんかにぶち込む感じで。
現在はローカルモードとAmazon Elastic MapReduceで動くようになってます。

注意としては、他のものとリリースをあわせようと思ってるので、まだ正式版ではないってこと。


2012年6月28日木曜日

Huahin Framework(wrapping Hadoop MapReduce) released

内部で使用しているフレームワークをOSS化することにしました。

Huahin Framwork (http://huahinframework.org/)

Huahin Manager (http://huahinframework.org/huahin-manager/)に関しては某所で求められてて先行でリリースしていたのですが、こちらはMapReduceをラップしたフレームワーク本体です。

Pig、Hiveじゃどうしてもできないことがあったためネイティブで書くしかなかったのですが、正直、Writableとかソートとか書くのにはウンザリしていたためこれが出来た感じです。

基本は、MapReduceをラップしてるだけなので足りないものは自分で実装できるようになってます。Key/Valueがレコードという概念になっていて、レコードに対してグルーピングするのかソートにするのかそれともただの値なのかといった感じで指定します。

ジョインに関して内部仕様からの切り出しに苦労してるため現在はサポートされてませんが(自分で実装するのであればできる)、次のリリースでサポートする予定です。

Huahinとは何かってことですが、タイのHua Hinから来ています。
ウチでつけるコード名はワインの産地から決めるって感じなのですが、ワイン産地、タイ=象ということでコード名がそのままフレームワーク名になった超適当な名前付けです。





OSS化って、内部仕様どっぷりだと結構てこずるますね。
去年のHadoop Conference Japanで話してから随分時間が掛かった。。

2012年5月2日水曜日

MRUnit 0.9.0 released (mavenでの取得方法)

ついでなんでメモがわりに書いておく。

MRUnitの0.8.1からHadoop 0.23を対応したことによりMavenでの
取得方法が変更になっている。

0.8.0までだと

<dependency>
  <groupid>org.apache.mrunit</groupid>
  <artifactid>mrunit</artifactid>
  <version>0.8.0-incubating</version>
  <scope>test</scope>
</dependency>

のような感じでよかったのだけど、0.8.1からHadoopのバージョンを指定してあげないといけない。
下記のような感じでclassifierにバージョンを指定してあげる。

<dependency>
  <groupId>org.apache.mrunit</groupId>
  <artifactId>mrunit</artifactId>
  <version>0.9.0-incubating</version>
  <classifier>hadoop1</classifier>
  <scope>test</scope>
</dependency>

ちなみに、hadoop1は1.0.2でhadoop2を指定すると0.23.1が指定されることになる。

Hadoop Hacks now on sale

ステマ的には遅いが一応書いとく。



が4/25に出ました。
まぁ、いろいろありました。

右の翻訳と一時期かぶってたりとか(結構キツかった)。
某氏が起業してベイエリアに行っちゃうとか。
代わりにuしんさんひっぱってきたりとか。

無事出てよかったですね。

2012年4月1日日曜日

HH2をOSSとしてリリースします

HadoopにかわるHH2の開発を進めてきましたがOSSとしてリリースすることにしました。






HH2はHadoopのJobTracker、TaskTrackerを置き換えるもので効率よくJobを実行することができます。まず、JobTrackerにかわるHumanTrackerがTaskTrackerにかわるHumanTaskerにタスクの割り当てを行います。


タスクの割り当てに使うのは特に難しいことはありません。メールによる通知となります。


この時、通常のHadoop同様にHumanTaskerがなんらのか障害により通達エラーが発生する場合があります。


この場合もHadoop同様に別Humanにタスクを割り当てます。ただし注意しなければいけないのは別Humanにタスクを割り当てる場合は、ボーナスの支給が必須となります。


最後に、やはりHumanTrackerはHadoopのJobTracker同様にSPOFになりえるということです。HumanTrackerの障害は様々ですがいずれこの問題は解消される予定です。


ここまで見てきたとおり通常のHadoopよりも効率的にJobが実行できることがおわかりいただけたでしょう。なお、HH2のOSSリリース予定は2045年5月を目標に着々と準備を進めているところです。

リリースが完了するまでしばらくお待ちいただけますと幸いです。

HH2開発チーム一同

2012年1月19日木曜日

Related Cassandra

自身のことでのCassnadra関連のことをいくつか書き留めておこうかなと。

その1。
ずっと、大谷さんと翻訳を続けてきた「Cassandra: The Definitive Guide」の翻訳本「Cassandra」が去年の年末に発売されました。



正直、バージョンはすぐあがるし翻訳を始めた時点でもうアウトなところとかいっぱいあるしこれは正直単なる翻訳だけでは済まなくコードの検証も入れつつだったのでかなり辛かったです。
原書と違うところは基本0.8ベースで「0.8からの新機能」は1からの書き起こしです。
やってる最中に1.0がリリースされてるとかでそれに合わせてると永遠に終わらないので0.8で打ち止めってことになりました。


その2。
以前からやっていた 「Cassnadra-GUIプロジェクト」 がGoogleとApacheが共同でホスティングしているApache関連のプロジェクト 「Apache Extras」 に移行しました。新しいURLは

http://code.google.com/a/apache-extras.org/p/cassandra-gui/

そろそろ、1.0を出さないとね。。。


その3。
去年の年末(ぐらい?)に、Brian O'Neill氏からお願いされて
Virgil(GUI & REST Layer for Cassandra w/ SOLR integration)」(ようするにCassandraの操作をRESTとかでやろうぜみたいな)
プロジェクトにcommiterとして参加しております(まだ手をつけられてないのは内緒)。


そして、これはCassandraとはまったく関係ないけど、去年の年末で終わったと思ってたもう一つ原稿が今週頭に終わったという。
というか、小出しに来たりするので終わったと思ったらまたお願いされたりw

今年もこんな感じで進むのでしょうか的な感じが。