たごもりすメモ

コードとかその他の話とか。

Hadoop Conference Japan 2011 Fall に行ってきた&しゃべってきた

なんかすごいイベントだった。User Group主催のイベントなのに2ホールを1日貸し切り(というか施設まるごと貸切)でキャパシティ1400人のイベントとかどういうこと。しかも無料参加なのにランチボックスとか飲み物とか出てた。意味がわからん。カネのあるところは違うということかー?
ともあれとりあえず主催者の方々はお疲れさまでした!

内容のサマリが読みたい人はこんなエントリを読んでないで、他の人がまとめてるものがあるのでそっちに行きましょう。

しゃべってきた

こっちを先に片付ける。ライトニングトークで時間もらったので、ライブドアHadoopをこんなことに使ってるよ、そのためにこんなツールが欲しかったから作って使ってるよ、という話をしてきた。

動画の様子はあとでUstream等で公開されるんだと思う。多分。されないと自分が見てなかったトラックとか見たくて悶死するし。実はあれが自分がプレゼンしたときの聴衆数最大だった気がする。ちょっとビビり気味でしゃべってたので他の人からどう見えてたか不安……。

10分にちょっと詰めすぎた気もするけど、現状の端的な紹介ができたと思う。内容について細かく知りたいという人は個別に声をかけるなりしていただければいくらでも出てくると思います。scribelineについてはこのblogに書いてるけどshibはまだ書いてなかったと思うので、続けてエントリを起こす予定。Beeswaxとの違いとかリクルートさんのWebHiveとの違いとかあるんじゃないかなー、目的特化のツールなんで用途にハマれば便利なんじゃないかなー。

行ってきた

10時のオープニングで参加登録時のアンケートの内容が一部紹介されていたけど、なんとHadoop使ったことない人が半数。うわー、という気分にちょっとなった。まあ冷静に考えてマシン複数台と分散処理対象のデータがないと実際に試せもしないフレームワーク*1なんだから、1000人以上とか集まる方がおかしいという気もする。そこから考えると半数が使ったことないってのもおかしくはないのかな。事例を知りたいんでしょうねきっと。スーツ率高かったし。*2

午前中は Cloudera, HortonWorks, MapR の3社のKeynoteっぽいお話。たいへんビジネス臭のする世界で良いですね。技術的な話はあんまりなくて正直ちょっと退屈。特にClouderaとHortonWorksがパッケージングについて綱引きしてたけど、個人的には本家OSSプロジェクトからrpm/debが出る方が嬉しいなーと思ってる。まあ最終的には、バージョン不整合の問題のないパッケージがどっかから出てくるんならそれでいいやという気分だけど。どうせ頻繁にアップデートとかしないし。MapRは惹かれる話が満載だけど、ミドルウェアにおカネかけてられないからパス。技術的には興味があるけどなあ。
で、ビジネス上の話で綱引きはしつつ、Hadoop関連コンポーネントではClouderaもHortonWorksもそれぞれにコードを提供して進めていっているし、なんかいい関係ですね。フルスタックが完成するまで黙ってて、いきなりドカっと出して「これでいこうぜ!」とか言いだす企業よりはるかに好感が持てる。

午後は正直自分のプレゼンが終わるまでは他人事どころではないので上の空に近かった。が、自分のが終わったらそれなりに落ち着いてふらふら。
で、結局問題になるのはHadoopそのものというよりも、データの収集と変換であったりとか、クエリをどう発行するかとか、そういうことなのかなーとは思った。データがきちんと整備された状態でHDFSに入ってれば、それを処理するロジック自体は生MapReduceでもPigでもHiveでもよくて*3、その処理をどうkickするか、データの整備はどうやってやるのか、に注力せざるをえない。Hadoop上で動くロジックの効率だのなんだのはノード増やせば済むしね。うーむ。
HortonWorksのOwenのプレゼンは来たるべきHadoop 0.23について。次期stableで、2011Q4に出るらしい。アーキテクチャの変更とか解説があったが、いろいろと良い改良が行われるように見える。楽しみ。HadoopMapReduce専用基盤ではなくて汎用の分散処理基盤のようになる、という理解でいいと思う。ストリーム処理用のアプリケーションとかもやってみれば展開できそうに見えたけど、どうかなあ。

懇親会、二次会

いろんな人といろんな話をしてた。楽しかった。なんかもういろいろあるけど省略。
とりあえず stream processing framework ほしい。という話をけっこうしてた。ClouderaのToddに「なんでFlumeじゃダメなの?」とか言われて、いやあれは too heavy だと思うんだよね、とか言ってもあんまし理解してもらえなかった。OwenがKAFKAはScalaで良さそうだったとか言ってたのでそのうち調べる。あとはJVM上で動くってのは諦めて受け入れるとして、JRubyで書くとかかなあ。flumeかfluentで。

全体的に超楽しかったです。おつかれさまでした!

*1:もちろん動かすだけなら1台でもできるけど、普通に考えてなーんにも嬉しくないよねそれ。

*2:でもHortonWorksのOwenが懇親会二次会で「Tシャツが多かった」と言ってたのを考えるとアメリカではHadoopの集まりはより強烈なスーツの集団なんだろうなきっと。

*3:そういえばPig使ってるって話は自分が聞いたセッションではひとつも出てこなかったなーという気がする。

Hive Client Webアプリケーション shib をつくった

(2013/04/02追記 see: http://d.hatena.ne.jp/tagomoris/20130402/1364898063 )

まだ完成度がいまいちだからなーと思ってエントリ書いてなかったんだけどLTでしゃべっちゃったので、ちゃんと書いておく。

Hiveにクエリを発行して結果を確認するためのWebアプリケーションを社内用途で作ってるんだけど、普通に他でも使えると思うので公開してあります。

tagomoris/shib · GitHub

シブ と読みます。
セットアップ方法はドキュメントを参照のこと。起動してブラウザでアクセスするとこんな画面が出てくる。

使いかたは見ればわかる、と思う。たぶん。クエリは参照専用(SELECTのみ)。 __KEY__ とか __KEY1__ とかがプレースホルダですよってくらいかな。エディタ内でプレースホルダを書くとプレースホルダを置換する値のボックスが出現する。PRIMARY KEYWORD は特別扱いされて、履歴リストに出現する。など。ただし複数のキーワードを使うのはちょっとUIの動作が不安定な気がする。

そういえばChromeでしか動作を確認してない気もする。SafariFirefoxでも多分動くんじゃないかなー。IEは死ね。

できること

  • クエリの実行
    • ただしSELECTクエリに限る
    • 一度にひとつのクエリのみで、セミコロンが入ってたらエラー
      • サブクエリは通る(はず)
  • 実行されたクエリの結果はいつでも取り出せる
    • 取り出しはTSVもしくはCSV
    • あんまりデカい結果の場合はCSVだと重いorエラーになる、かも
  • 過去履歴からのクエリ参照&実行
    • 既に実行したクエリのリラン可能
      • ただし取り出せる結果は最新のもののみ(過去のも取り出せるようにしてもいいけど、めんどい上に用途がない)
    • 過去のクエリをコピーして新しいクエリとして編集できる
      • コピペベースのクエリ再利用

基本的にはお手軽カンタンにHiveクエリを実行できる、というのが最優先の作り。人を迷わせるような機能類はすべて排除。あとHTML5なブラウザなら「そのブラウザで実行したクエリ」の履歴が出る。

できないこと

  • 認証およびアクセスコントロール
  • 結果のグラフやチャート表示
    • これはそのうちできるようにする予定
  • hive 0.7.0以降の新機能の対応
    • データベース対応や認証など
    • 新しい関数なんかは問題なく使えるはず
  • クエリの進行状況や対象データのサイズ表示
  • 賢いクエリエディタ

そのうちやりたいけどできないのがこのあたり。不要不急なので放置してあるだけで、手をつけられるようになったらやるはず。

なんでつくったの

MapReduceってなんですか? という人がHiveクエリを叩けるようにするには既存のツールだといろいろ問題あるなーと思ったから。既存ツールというのは Beeswax のことだけど。
前にも書いたとおり、お手軽カンタンというのが最優先。MapReduceって何ですか、というディレクターにBeeswaxの画面を見せれば拒否反応しか起こさないと思う。どうしても使う必要があるならやらせれば覚えるかもしれないけど、今のところウチではそこまでこのオペレーションは重要じゃない。ある人がある日にふとある数字が見たいと思ったとき、できるだけ拒否感なく使ってもらえるように、と思ってる。コピペベースのクエリ再利用はそのため。

破壊的操作はできないようになってるんだと不便すぎないか、と言われたら、そうかも。でもそれで不便なようだったらBeeswax使えるように立てればいいし、特に問題ない。

クエリエディタの高機能化はちょっとしたい気がするけど、やりたいことに対して自分のUIエンジニアリング力が足りなさすぎる、というかjavascript力が足りなさすぎる。正直誰かに作ってほしい。おれ無理。UDFの補完くらいならそこまで苦労せずにやれるかなあ。

実装は?

アプリケーションはNode.jsで書いて、データ保存はKyoto Tycoonでやってる。RDBいらなかったし、クエリの結果が数MB以上になる可能性が充分にあったので統一してぶちこめるストレージを選んだ。Kyoto Tycoon(というかKyoto Cabinet)のファイルハッシュデータベースはこういう用途に非常に便利だと思う。Node.jsであることの利点はこのエントリに前に書いた。
Node.jsなWebアプリでJobQueueなしにラクラク巨大処理を実行 - tagomorisのメモ置き場

UIはHTMLとしては1枚で、あとは全部Ajaxで叩いて表示を更新するような形になっている。だからHTTPリクエストの詳細を見て外部から叩くようにすれば、バッチ用スクリプトからshibを介してクエリを実行することもできる。結果の保存をやってくれるからそういう使いかたも便利かもね。

shib(シブ) ってなに?

渋峠 - Wikipedia

まとめ

用途がハマる人にとっては便利なんじゃないかなーと思います。お好きにどうぞ。