「ほっ」と。キャンペーン

<   2009年 02月 ( 2 )   > この月の画像一覧

Hadoop Streaming 試行錯誤

Hadoop Streaming を使ってみている。
まだあんまりドキュメントがないので、
試行錯誤するしかない。
なわけで、今日の試行錯誤のメモ。

インストールや環境設定については、
書いてあるページがそこそこあるから
そっちを見てください。

※exblogに怒られないように、
ところどころ大文字になっているので、
コピペするときは気をつけてね

前提:
(1) input.txt を hdfs に送っておく。
> $HADOOP_HOME/bin/hadoop hdfs -put input.txt

(2) -output の temp ディレクトリは毎回削除する。
> $HADOOP_HOME/bin/hadoop hdfs -rmr temp

ちなみに
>hadoop dfs -rmr temp[1234]

とか
>hadoop dfs -rmr temp*

とかも可能

【1】perlモジュールを読み込んでみる:成功
モジュールがカレントになくても、
mapper にはカレントにあるものとして指定してOKっぽい

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -reducer /bin/ls
  -file /tmp/mymodule.pm


test.pl
require "mymodule.pm";
while(<>) { print $_; }


【2】reducer を省略してみる:成功
-reducer は省略してもOK
reduce をしない代わりに -jobconf mapred.reduce.tasks=0 を指定する

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -jobconf mapred.reduce.tasks=0

test.pl
while(<>) { print $_; }


【3】引数のファイルを色々読んでみる
-file でファイルを指定して色々してみる。
hdfs 上に送らなくても色々できるかの実験。
test.pl の中を色々変えながら、実行してみる。

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -jobconf mapred.reduce.tasks=0
  -file input2.txt


test.pl : 失敗
-input のファイルは必ず読まないとダメみたい?
open(IN, "input2.txt");
while(<IN>) { print $_; }
close(IN);


test.pl : 失敗
# 複数行出力しても、最後の出力しか採用されない?
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1), "行¥n"; # この行は出力されないみたいだ
  print $_;
}


test.pl : 失敗
# 関係ないものを出力してみる
# ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1), "行¥n";
}


test.pl : 失敗
# -input から読み込んだ行も出力してみたのだが...
# ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1) , "¥t", $_;
}


test.pl : 失敗
# これも ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1) , "¥t", ($_."¥n");
}


test.pl : 成功
# ($#all + 1) を print 中で計算させるのがいけないのか?
open(IN, "input2.txt");
@all = <IN>;
close(IN);
$ls = $#all + 1;
while(<>) {
  # これはちゃんと出力された
  print "${ls}行¥n";
}


test.pl : 成功
# ($#all + 1) を print 中で計算させてもOKな場合がある
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  s/[¥r¥n]+//g;
  # これもちゃんと出力された
  print $_, "¥t", ($#all + 1), "¥n";
}

[PR]
by xiaoxia | 2009-02-27 18:15 | ソフトウェア | Comments(0)

5周年

ウチも5周年になりました。
半分以上、開店休業中なんですが。

「インターネットの静止する日」 Googleがない55分間

私はこの事件を月曜日のお昼になるまで知らなかった。
お昼はインターネットのページを見て回るが、それ以外はあまり接続していない。
コードを書くときは、
客先なので使い慣れたマニュアルが手元にないので、
そのために検索することはあるけれども。

google が止まった日は、
日本時間では1月31日23時30分から2月1日0時25分
だそうだから、土曜の真夜中であり、
私が仕事をしていない時間帯だからだろう。
土曜の夜だから、多分、オケの帰りに遅めの夕食を取って岐路についている頃か、
もしくは帰宅して本や漫画を読んだり、ビデオを見たりして、
就寝前のダラダラした時間を過ごしている頃だと思う。

googleでも意外にまだ人手作業が残っているのだな。
コンピュータは「意図されないミス」はしない
(ミスした場合は、人間が意図していなかっただけ)。
ミスはほとんどの場合人間の仕業だ。
この時間を、日本のユーザはどのように過ごしたのだろう。
もし仕事をしていた人がいたら、どのような代替手段を講じたのだろう。
大変興味深い。

微妙な思い - finalventの日記

うーんなるほどなー。
でも、私に関して言えば、
ダンコーガイのあれは、広告だと思っているよ。
本人は広告の意図がなくて書いたものについて、
あとから広告料を払いたいと言われた場合も、
言われなかった場合も、
彼に関しては、いずれにしろ商品だと思うな。
商品を陳列している感じ?
売れるか売れないかはわからない、みたいな。
だって、彼は自他共に認めるアルファブロガーなんだもの。
そして、こんな風にオファーが来ると書いているんだもの。

で、消費者はどうなんだろう。
彼のあの文を読んで、広告とは思わないのかな。
彼に限らず、アルファブロガー全般なんだけど。
惹句に「ダンコーガイ」とあって、
おお!彼がそう言うなら買っちゃおうかな!という人は多いのかな。
多いのか。
だからアルファブロガーなのか。
そうだよな。

ごめんオチないわw

twitterでは日常茶飯事なのかもしれないけど

支離滅裂なことを twitter に垂れ流している私が通りますよw
面白くないなら remove してくれればいいのに。
我慢して発言読むことないんだってば。
つか、follow 返しする前に、その人の発言とか、
そこからわかる人となりとか読むでしょ常考。
まぁ protect な人もいるから、一概には言えないんだけど。

むしろ私は、支離滅裂発言な人の方が面白い。
発言内容は全然面白くなくていい。
@多い人は follow しない。
だって、それだけ読んでも面白くないんだもん。
会話相手も follow するのはヤだし。
あと、鬱発言が多い人も remove する。
体調悪いときに読むと、もらいウツしちゃうから。
社会学なのか哲学なのか、
なんかそっち系の理屈っぽい長文発言ばっかりの人も remove。
基本 140bytes っつてんだから、そのあたりにおさめてよねっと思う。
すべての発言が 300bytes 超だったりすると、
マナーを守れない人なのかしらぷんぷんと思うのよ。

まそんなわけだから(?)、
気にしないでばんばん remove しちゃえばいいと思うよ。
[PR]
by xiaoxia | 2009-02-09 12:17 | ネット | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞