Google MapReduceを初めて知りました


今年、クラウドコンピューティングは人気があり、「プログラマー」誌は11月にクラウドコンピューティングをテーマに、異なる概念、異なるメーカーの方案、異なる技術の大牛の分析と予測を総合し、収益が多い.山雨が降りそうな感じがします.
プログラマーとして、多少知っていても、時代に追いつくことができます.ほほほ.
GoogleのMapReduceテクノロジーはさらに注目されています.しかし、「プログラマー」やネット上の中国語の文章の紹介は概念的に多く、見終わった後、大体理解しているような気がしますが、まだ霧の中にあります.公式文書を直接見たほうがいいです.
GoogleエンジニアのDean、Jeff and Ghemawat、Sanjayを見たことがあります.の論文MapReduce:Simplified Data Processing on Large Clusters,http://labs.google.com/papers/mapreduce-osdi04.pdfああ、雲の中の足を踏むのは少し地面に落ちたが、これまで好奇心を持っていたいくつかの技術の細部にやっと答えが出た.
以下は私が初めて知ったMapReduceの認識です.
例を挙げると直感的です:100ページの内容に対して、出現するwordごとの周波数を統計します.
    
1.MapReduceは大規模なデータ(large scale data set)、平行計算(paralle computation)の技術案である.
    
2.MapReduceの基本的な運行環境は何百台もの普通のPC機からなるクラスターであり、各PC機はLinuxシステムを運行し、MapReduceはクラスターの各ノードを制御してデータストレージ、論理計算を行う.ストレージとコンピューティングはMapReduceクラスタの2つのコア機能です.
    
3.MapReduce基本アーキテクチャMaster-Slaveモデル、Masterはタスク(Task)とデータと演算の切り分け、配布、クラスタの各ノードに配布する.SlaveはここでWorkerと呼ばれ、Masterが配布したタスクを実行します.
Masterはまた、Worker死亡モニタリングやフォールトトレランスなどの総制御を担当する必要がある.
       [img]http://code.google.com/intl/zh-CN/edu/parallel/img/mrfigure.png"alt="[/img]
    
4 Map Reduceの演算過程は先分後合である.
Mapは直訳してマッピングを意味しますが、「分治」と理解したほうが分かりやすいです.データと演算を分割し、クラスタノードに配布することである.
Reduce(本来は減少を意味するので、名前を初めて見たときから減少を理解していなかったのが合意)は、この語のもう一つの意味として理解されるべきであり、「集計」は、別々に実行される多くの計算タスクとデータを統合し、最終的な出力結果を形成することである.
    
5.プログラマーがMapReduceに基づいて開発するのはeasyです.
Google MapReduceはプログラミングモデルと環境(C++)を提供し、プログラマーが少量のコードだけでビッグデータの計算を実現することができ、プログラマーはカスタムMap FunctionとReduce Functionに関心を持つだけである.ワード定義のMap関数は多くのWorker上で原子タスクを実行し、Reduce関数は一部のWorker上で関連するMapWorker上の中間結果を連結し、最終的に最終的な出力結果を形成し、一般的に出力ファイル(Output file)である.
詳細:
     6. タスク分割(Partition)と配布(Distribution).以前に挙げた100ページのword語周波数統計を例に、M=100個のTaskで切り分け、Worker PCごとにURLページの語周波数を統計する.連結(Reduce)Worker数Rは、ユーザによって指定される.
タスクの配布方法(Distribute Task)?Mapタスクの配布、urlハッシュコードによってその機械に配布することを決定します:hash(url)mod M;Reduceタスク配布,同理hash(url)mod R.
     7. Map関数の擬似コード(コードはgoogleのこの論文に由来する)は、文章の語周波数統計を担当しています.
    
   
 map(String key, String value):
// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");

       
Reduce関数の疑似コード、複数の文章の中間統計結果を統合します
  
 
 reduce(String key, Iterator values):
// key: a word
// values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));

8許容誤差.Googleによると、クラスタはあるPCが死んだり、ハードディスクが壊れたりしやすく、MapReduceは自動フォールトトレランスメカニズムを採用しているという.原理はRe-excutionを繰り返し実行し、Masterはpingによって機械の監視状況を周期的に監視し、使用できないことを発見した場合、彼に割り当てられたタスクを他のノードに転送して実行する.
9バックアップタスク(Backup Task).MapReduceプログラム全体がもうすぐ実行されると、いくつかのtaskに対して、Masterはバックアップバージョンを実行するように手配し、メインタスクとバックアップタスクのいずれかが実行されると、Taskタスクが実行されたことを示し、その後の作業を行う.Googleによると、これにより、一部のtaskがネットワークIO、ディスクIOなどの理由で実行が遅く、全体の進捗を遅らせることを避けることができるという.たとえば、テストでバックアップ・タスク・メカニズムを有効にすると、タスクの完了時間を30%短縮できます.
10 Google MapReduceハードウェア環境
1800 PCクラスタ、
各2 GHz Xeonプロセッサ、4 Gメモリ、160 G IDEハードディスク、1000 Mイーサネット.
グループネットワーク:これらのマシンは、2層、3方向(tree-shaped、翻訳の正確さを知らない、ほほほ)交換ネットワーク、ルートノードの集約帯域幅100-200 Gbpsに組織されています.
     
これは2004年のGoogleの1つのMapReduceアプリケーションクラスタの構成状況であるべきで、今構成の推定は少し高いです.しかし、私たちにとって組織も難しくないのではないでしょうか.何台かのPC機はやはり見ることができて、ほほほ.興味のある友達も遊びに来てもいいです.
     11. またGoogleにはクラスタのマシンを管理したり、ソフトウェアクライアントをインストールしたりするCluster管理システムがありますが、この論文ではあまり言及されていません.もっと理解しなければなりませんが...
  
参考資料:
Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters  2004