崩壊現実-全てはvirtualに収束する-

この日記について|本棚|ブックマーク|Wiki|ついったー部日記
Twitter用人工無脳http://twitter.com/ha_ma寄付
crochet(凍結中)http://d.hatena.ne.jp/showyou/20000101
twitter bot アンケートhttp://d.hatena.ne.jp/showyou/20091225/1261712029

2011-12-31 日記移します このエントリーを含むブックマーク

今後はこちらを更新していきます

http://showyou.hatenablog.com/ やっぱりこっちで http://showyou41.dyndns.org/blog/

2011-12-30

今年一年を振り返る

去年も同じ事やってますが、今年も振り返ります


去年もいろいろ動きがあったけど今年もいろいろありました。というかありすぎました。でかいとこで言うと

  • 30になった
  • 転職した
  • 海外行った
  • 大地震食らって歩いて帰った
  • sinsai.infoに参加した

辺りです。


目標を去年、一昨年の結果と比較してみます

GAE
 一応サービス動かしてます。それ以降はあまり触ってないです。Kayは使いやすいのでWebサービスつくるならまた利用してもいいかもしれないですね
並列フレームワーク、KVS
 Hadoop, Cassandraあたり軽く触りますが、結局のとこTokyo Cabinetに落ち着いちゃってます。Kyoto tycoonは便利なのかな?Hadoopはなんか課長がノリ気?っぽいのと並列計算がそろそろ欲しくなってきたのでまた触る可能性高いです
「心」をもった人工無脳へ。連続性が重要
 このへんアバウト過ぎる目標ですが、PRMLに参加してHMMやCRFを知ったり、SIG-WI2でしましませんせいのおはなしを聞いて若干道を見つけたかなぁという気がします。モデルをきちんと作って学習するのがいいでしょうか
なんかしかけたい(仕事関係)
 別に仕掛けたわけじゃないですが無事に復帰できてフル勤務まで戻ってます。これが家族や友人に一番危惧されてた
さらによかったことを書いておきます。
 PRMLに参加したりして、LDAとかガウス分布の基礎とかを知りました
 今年後半はMySQLいじったりして、まだまだですが少し詳しくなりました
一方で今年残念なこともあります
 本の積ん読が多かったです。興味あるもんを少しずつ買っていったからなぁ
 まだ体調が全快はしてなくて、ちょくちょく休んではいます
 後半は仕事に注力してて、なかなかベイジアンとか数学とかに手が出せませんでした
 英語とかまだまだ不自由です。日本語もですが
 最近pythonばかり触ってて馬鹿なアルゴリズムになってて処理の無駄が多いです。後半勉強しようと思ってできてないですね

GAE全然触ってないです。前半AWSは触ってましたが(主にsinsai.info)。Hadoopは自宅でもちょくちょく動かしてましたが転職によりガチで使っています。Pigスクリプトもう見たくない・・人工無脳関連はやる時間あったのに進んでません。自主的にやるのはなかなか進まないですね。外部に発表とかで締め切り決めるかなぁ。仕事は仕掛けました。というかかけられた?年明け早々にエージェントに誘われて震災後に面接して決まりました。今更ですが経歴なんていくらでも偽れるしGithubとかにソース公開したほうが、エンジニア履歴書としてマシらしいです。アルゴリズムとか数学とかあまりやって・・AI-classはやりました。アメリカにも行って英語力上がったか・・と思ったらTOEIC落ちてました。まあ震災TOEIC延期になってそれ以来転職やらで全然勉強してなかったのもありますが。

それを踏まえて来年の目標を挙げます。
 積んでる本を片付ける。でもそれ以上にいろいろ買うだろうけど
 アルゴリズムを勉強する
 TOEICをとりあえず600点目指す其の次は700。できれば海外も行きたい。
しかしもっと全体的に目標立てるとこんな感じでしょうか。
 笑う。今年も比較的ポジティブよりに考えることで物事がいい方向にむかったので、これを続けます
 体調は引き続き気をつける
 もっと他人を信じる。というか少し期待と違ってても認めてあげる

本はまだ積んで読んで繰り返してます。ただ昨年積んでたHadoop本x2は今年やたら役に立ちました。アルゴリズムは考えずに富豪的に回しすぎたので来年は考えます英語TOEIC別にいいとして話したりはできたほうがいいですが、対面にアメリカ人いるので話せばいいだけですね。ポジティブ・・前半はよかったけど終盤はダメダメだったよ!


体調は一応気をつけてて土日は休むのに専念してて勉強会休んだり途中で帰ったりして維持してます。たまに風邪引いたりして寝込んだくらいです。他人を信じる・・ぜんぜんできてなかったなぁ。すいません。


来年目標

あと今年サンフランシスコ・シリコンバレー行きましたがまた海外行きたいです。長時間飛行機乗ると疲れるのでアジアくらいがいいです。台湾とか?北海道にもまた遊びに行きたいです。

2011-12-28

会社にHadoopを入れて、適切に使いこなすための方法

既に導入実績のある会社に転職する


・・は身も蓋も無いので少しまじめに考えますと、Hadoopを入れようと思った場合上司には2パターンの問題が出てきます。


1. 「Excelと何が違うの?」という上司

2. 「Hadoop最強!なんでもできるよ!」と過剰な期待を持ってる上司


Excelと何が違うの?という上司

計算時間の違いを説明するといいんじゃないでしょうか。まあ計算時間の説明するならその前にスクリプト言語が出てきそうですが。単発マシンだとどうしても処理できる件数に天井が出てくるので、その辺のデータがあればいいです(GB単位メモリに乗らないレベル)。ところで最近普通マシンでも32GBくらい2万で積めますね。


それと、一般にはあまり知られてないかもしれませんがBIツールを使うのも手かもしれません。


そもそも扱ってるデータ量がHadoopを必要としないのかもしれません。その場合は大量データを扱ってる会社に転職しましょう。


Hadoop最強!なんでもできるよ!」と過剰な期待を持ってる上司

上の上司よりタチが悪いです。自分も詳しくないですが、少なくとも並列で回せるものほど早く、Map->Suffle->Reduce->Mapを繰り返すとものすごく遅いでしょう。できることとできないことをHadoop原理でも交えて説明したほうがいいと思います。用途によってはJubatusなんかがMap繰り返すやつよりでは早いのかもしれません。まだ開発中だけど。


それでも無理やりHadoopねじ込もうとするかもしれません。そんな会社長くないんで転職しましょう。転職先とか下の広告に載ってそうですね。


それか、もしくはid:shiumachiせんせーにお願いすると説明とか行ってくれるかもしれません。


余談ですが、別に自分も軽くHadoop触ってる程度ですが、今のビッグデータの騒ぎ方が若干数年前のクラウドとおんなじような感じで変な印象をもちます。

ビッグデータ扱えてよろこぶ→扱いきれずにへこたれるっていう世界がもうすぐやってきそうです。

2011-12-27

Hadoop Advent Calendar 27日目 PigでJOINできない!

Hadoop Advent Calendarの27日目を担当ます、showyouです。今日自分Hadoopの1年でも書こうと思いましたが、誰もそんなの読みたいと思わないので軽いTipsでも書きます


自分は業務や趣味でPigとかHive(を少し)とExcelを(大量に)使っています。個人的に今まで触った感じを書いてみます主観に基づくので話半分に聞いてください。

Hive

まずHiveのいい点を書いておきます

  1. SQLっぽい言語で、SQLに慣れてれば割と書きやすい
  2. 実行時にエラーが出ている場所が(Pigと比べて)わかりやすい
  3. partitionで高速化できる
  4. クエリがでかいと途中でこける場合がある
  5. テーブル作るのが面倒。間違ったテーブル定義すると検索できなくてエラーになることもある

Pig

次にHiveに比べるとユーザ数が少なそうですが、PigのHiveと比べた特徴を書いときます

  1. クエリとは違った書き方なので、人によってはクエリより書きやすい
  2. 事前にテーブルを作る必要がない。
  3. カラムの一部がNULLのものをJOINすると強制排除。しかもエラー出して止まったりしない
  4. 実行中にうまくJOINできなくて終了する
  5. エラー場所がわかりにくい

特にPig側の3が結構くせもので値の整合性を取るときになってやっと気づくこともあります


例えば以下のようなpigを使って、JOINをしようとします

A = LOAD '$input' AS (
a:chararray,
b:chararray,
num:int
);

B = LOAD '$input2' AS (
a:chararray,
b:chararray,
num:int
);

C = JOIN A BY (a,b), B BY (a,b);
C = FOREACH C GENERATE
A::a as a,
A::b as b,
A::num as num_a,
B::num as num_b;

dump C;

データは以下の物を用意します

     a   1
     a b 2

     a     1
     a b 100

このデータでJOINをすると、

     a   1 1
     a b 2 100

と出てくるのが理想的ですが、

実行してみるとこうなります

> pig --param input=test_null1.txt --param input2=test_null2.txt join.pig
(中略)
2011-12-27 01:30:00,220 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!
2011-12-27 01:30:00,231 [main] INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2011-12-27 01:30:00,231 [main] INFO org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
(a,b,2,100)

1行足りない・・

ちなみにこれは対策として、nullになる要素に対して、事前に


(b is null ? "": b) as b


とかやっておくことで回避はできますが・・常にnullが出そうなとこって(特にデータが汚いと)有りうるんで、せめてエラーがを出して落ちるくらいしてほしいです。


この辺はid:a_bicky神がここで*1まとめているので、興味があるかたは見てみてください。


という訳でPigの利用者を遠ざけそうな話なのですが、かと言ってHiveも1つの処理で中間データの使い回しが出来なそうだし、残念な書き方するとMapがすぐに10000超えたりするので、正直どっちもどっち感はあります。かと言ってMap-Reduceも多段は面倒です。Pigで値チェックをする為にUnitTest入れたいとか言ったらそもそもJavaで書けやという話もありました。


ところで話は変わりますが、今ビッグデータと騒がれてるわけですが、最近Excelすごいです。100万行まで使えます。なので70000行のデータフィルタする為にHadoop入れたいと思ってる人はまず最新のExcel入れてピボット使いましょう。

終わり

2011-12-26

筆者:Showyou http://www3.to/showyou