2010年8月28日土曜日

MapReduceを勉強しよう - Java

MapReduceというのは、最近注目されているGoogleの分散処理アルゴリズムです。
最近って言っても2年以上前ですけどね…ww


始めに、MapReduceの処理はMapフェーズとReduceフェーズに分かれます。
Mapフェイズで、入力データを分割して処理。
Reduceフェイズで、処理したデータをまとめます。


まずはMapReduceの理解を深めるために、
ある小銭の束の合計金額をMapReduceの考え方を使って求めてみましょう。
1. Mapフェイズ
小銭を1,5,10,50,100,500円のグループに分けてそれぞれの枚数を数えます。そして、グループごとの合計金額を計算します。
2. Reduceフェイズ
グループごとの合計金額を全て足して、小銭の束の合計金額が求まります。

しかし、これだけだとMapReduceのすごさはちょっとわかりずらいですね。
じゃあもう少しスケールアップしてみましょう。

さて、小銭の数がもし50枚程度なら一人でもこの合計金額を計算することは簡単でしょう。
しかし、もし小銭が10000枚あったらどうでしょうか?

一人では大変ですよね。

じゃあ、6人でやりましょう。

私は1円、君は5円、ユーは10円、あなたは50円、お前は100円、あんたには500円をそれぞれ数えてもらいます。

最後に、みんなの求めた金額を足せば合計金額が求まります。
わかったかな?
このような分散処理の考え方がMapReduceというわけです。




さて次は、このMapReduceをJavaを使って体験してみましょう。

参考文献1を見て体験してください。


個人的には参考文献1のMapReduceはなんか違うなーって思ったんだけど
まあいいか、
一応、自分なりの解釈でメモ書きしておきます。


「ある文字列の英字をカウントする」プログラムについて考えます。

1. 準備
ある文字列は「abcaba」とします。
値を保持するためのMapEntryクラスを用意します。
MapEntry
char key;
int value;
2. Mapフェイズ
文字列を一文字ずつ読み取り、keyが文字、valueが1であるMapEntryオブジェクトを生成して、LinkedListに格納していきます。
abcaba
111111
MapEntryオブジェクトをソートします。
aaabbc
111111
このリストをa,b,cのグループに分けてさらに別のリストに格納します。 (入力データを分割)
  a  | b |c
aaa|bb|c
111|11|1

あとはa,b,cの要素ごとにカウント。

3. Reduceフェイズ
カウントした数をデータ保存用の配列に格納。そして、必要とあらば出力。


こんな感じかな。
MapとReduceの境目が微妙だけど…


参考文献
1. @IT「GoogleのMapReduceアルゴリズムをJavaで理解する」

2010年8月19日木曜日

近況 - 雑談

最近、勉強していませんでした。

なぜかって夏休みですからね、アニメ見たり、マンガ読んだり、ラノベ読んだりしてました。あとお盆のお墓参りで5日ほど帰郷していました。

しかし、いくら夏休みと言っても遊びすぎは良くありませんね。
そろそろ勉強とか再開しないと。
そして、いいかげん卒研も進めないとヤバそうです。


話は変わりますが、最近不景気ですね。
どうして不景気になってしまったのか自分なりに考えていました。
暇だったので…いや、別に勉強のやる気が起きないからじゃないよ。
あと、足りない知識は想像で補っています。

まず不景気とは、
別に世の中のお金が減っているわけではないんですね。売買や取引が少なくなってお金が回らなくなっているということなんです。といっても稼いでる人はたくさん稼いでるわけなのですが、その人たちがお金を使わずためこむからお金が回らなくなり不景気になるわけですね。

じゃあどうすれば景気が良くなるのでしょうか?
お金をたくさん稼いでる人が、たくさん稼いだ分だけお金を使えばいいのです。
しかし、さすがに人にお金を使わせるのはなかなか難しいことです。
というわけで、たくさん稼いでる人や企業からはたくさん税金を取って国民に還元(経済対策)すれば解決しそうなきはするのですが、なかなかうまくいかないみたいですね。

しかしなぜ景気が回復しないのでしょうか?
それは、国単位での景気対策でしかないからでしょう。一つの国で景気対策してお金をばらまいても他の国のほうにお金が回ってしまえばたいして意味が無いのです。
そして、そんな中で稼いでる国はちゃっかり稼いでいるんですね。ということは、お金をたくさん稼いでる国が、たくさん稼いだ分だけお金を使えばいいのです。しかし、さすがに国にお金を使わせるのは本当に難しいことです。

さて、どうしようか。

2010年8月7日土曜日

昨日の見たサマーウォーズについて - 雑談

ネタバレ注意。


っといってもストーリーはスルーで、ITネタだけ拾ってきます。

・OZ
イメージとして、セカンドライフ+グーグル+マイクロソフト+…
ってかんじかな。独占禁止法に引っかかるしww 

・暗算で、年月日をから曜日を算出
やり方は、ツェラーの公式 を使うようです。日付を代入するだけなので3分もあれば私でも出来る気はするのですが、暗算は無理そうです。

・健治が解いた暗号
2056桁(10進数の羅列)の暗号ですね。
紙とペン使って解ける暗号って何だよww
そして、最後は暗算とかwww
よっぽど暗号が簡単なのか、健治のスペックが神がかってるのか。
まあ、僕は暗号については詳しくないんで、よくわかりませんでした。

・ラブマシーン
いかにも悪者っぽいけど、額にハートマークがついているというシュールな敵です。
知識欲を持ったハッキングAIということですが、プログラムですよね。ってことは、どっかのパソコン上で動いてるのだろうから、そのパソコンをネットワークからはずせば解決するんじゃないのか?
もしくは、ハッキングAIというわけだから、ウイルスみたいに不特定多数のパソコンに感染してボットネットワークみたいなのを形成し、グリッドコンピューティングみたいな感じで動いてるのかな?
よくわかりませんね。

・でっかいパソコン
あんなでっかいの需要あるのかなー?


感想
ITネタを扱っていたこともあり、そこそこ楽しめました。

2010年8月1日日曜日

近況 - 雑談

・OverlayWeaverでGUIアプリを作成中

まだできてないので、これについてはそのうち書く予定です。一応、概要だけ書いておくと、DHTShellを改造してチャットプログラムみたいなのを作ろうと計画中。


・ここ一週間で、ラノベを4冊読破しました

読んだのは以下の4つ。

  1. 不気味で素朴な囲われた世界
  2. きみとぼくが壊した世界
  3. 不気味で素朴な囲われたきみとぼくの壊れた世界
  4. フルメタルパニック 「せまるニック・オブ・タイム」
1~3は、西尾維新さんの世界シリーズですね。
世界シリーズは、一巻目の「きみとぼくの壊れた世界」を5年前ぐらいに読んで以来、触れていなかったのですが市の図書館で偶然見つけてしまい一気に読んでしまいました。
あと、これの続編で「ぼくの世界」と言うのがあるらしいのですが、楽しみです。


4つ目は、最近発売されたフルメタの最新刊。まちに待った最新刊です。
何年待ったことか、3年ぐらいかなー
そして、ついにクライマックスですね。
どうクライマックスなのかは、読んでみてのお楽しみ!!
そしてそして、終に次巻で完結です。
はやく、読みたいよー!!


さてさて、それではネタバレでも


なんてしたら、怒られそうなので、
ネタバレはせずに、

心に残ったセリフだけ紹介してみようかな。うる覚えだけど…



  1. 「 デスノートで悪いやつを全員殺すのと、ドラゴンボールで悪いやつ以外を生き返らせるって言うの思考は、同じなのかどうか…」
  2. 「ほら、確か冒頭でさ、お兄様、お兄様って連呼されてるじゃん。…」
  3. 「疑わしきは罰せずとか言って、疑われた時点で既にそれが罰なんですよ。…」
  4. 「イエス、アイ、マム」
 このセリフにグッときたら、今すぐ書店へゴーですよ。