崩壊現実-全ては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-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-22

StanfordのAI-classを終えました

AI Class Statement of Accomplishment」というメールが来て、Basicクラス合格っぽいメールが来ました。

もともと英語の練習にと自分興味本位で聞いてみたわけですが、印っぽいもの貰えてよかったです。


講義の内容とかどこまで書いていいかわからないんでまだあまり書きませんが、難しくはないけど結構大変でした。みっちり丁寧に教えてくれるって感じです。

TOEIC半分くらいしか取れない自分でも受けられたので、みなさんもどんどん受講しましょう!


https://www.ai-class.com/

2011-12-14

JIRA Advent Calendar 13?日目 APIについて

なんか急にmike_neckさんから話振られて「えっ?」と思ううちに日記の日になりまして。

JIRA Advent Calendar 2011 http://atnd.org/events/22899


ホントはもっとちゃんと作りたいものがあるんですが、なかなか急に作り出そうとしても難しいですね。


(ところで私は今年のはじめにプラグイン勉強会を開いた程度にはRedmine派なのですが、大人の都合でJIRAも使っていたりしてます最近はJIRAの方が多いです)


前フリは置いといてJIRAの話として、APIについてでも軽く書いておきます

JIRAにはRESTのAPIがあって、これ使ってデータが取得できますBasic認証とかでもいけるみたいですね。

http://docs.atlassian.com/jira/REST/latest/

例:


こんなチケットのタイトルを取ってみます

$ curl -u user:pass http://site/rest/api/2.0.alpha1/issue/TASK-1

結果

{"expand":"html","self":"http://site/rest/api/2.0.alpha1/issue/TASK-1","key":"TASK-1","fields":{"summary":{"name":"summary","type":"java.lang.String","value":"test1"},(以下略)

perlでも軽く取ってみます。ってかなりインチキなやり方ですが。

use JSON;
my $st=`curl -u sample:sample http://site/rest/api/2.0.alpha1/issue/TASK-1`;
my $data = decode_json($st);
print $data->{fields}->{summary}->{value}."\n";
yuki@squeeze-1:~/jira_api$ perl jira_api.pl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3120 0 3120 0 0 22425 0 --:--:-- --:--:-- --:--:-- 22446
test1

チケットのタイトルを取ることが出来ました。


これを使って、RedmineのWorktimeプラグイン*1みたいなものが作れないかと考えています


ここまで失敗したこと

・pythonでやる→なぜかBasic認証通らない。Realmの問題?

2011-12-08

大規模データ処理勉強会に参加してきました

y_benjoさんの日記
http://d.hatena.ne.jp/repose/20111209/1323361517

大規模=Hadoop ってわけではなくて。もちろんExcelでもない。


会場の雰囲気がまんま日本でのHadoopの利用状況って気がしないわけでもないです。HadoopはWeb企業で大量のApacheログを処理するか、バッチ処理を早くするものって認識な気がします。あとエンジニアどこも足りないですって。

あと個人的にはHadoopのシステムを作るのと、Hadoopの上で計算したり使っていくのはまた別のスキルかなぁと思っています。これについては後日。


うろ覚えHadoop


ところで日本人って特化が得意で、欧米人は汎化が得意な気がしますがいかがでしょうか。

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