このようなデヌタの皮類は それずも再びMapReduceの皋床

ゞョン・ポラックによっおビッグフィッシュ雑魚 あなたは、特にあなたのため、むンタヌネットなしで、そしお文明からの単離には、離島での最埌の10幎を費やしおいる堎合は、私たちは、MapReduceのの抂念に぀いお話を再詊行したす。 導入は、MapReduceの抂念むンタヌシステムズのCaché環境の実珟のために十分、小さいであろう。 あなたはあたりにも遠く、最埌の10幎間に陀去されない堎合は、我々は基瀎むンフラを䜜成しおいる第二郚、に進んでください。







-私はあなたが前の蚘事I /翻蚳から掚枬するかもしれないずしお、MapReduceのの倧ファンではない、ちょうど定矩しおみたしょう「Hadoopの岐路に立぀」 -マむケル・ストヌンブレヌカヌず「コマンドラむンナヌティリティが235倍高速あなたのHadoopクラスタを超えるこずはでき」であるために[か、私はHadoopのMapReduceののJava実装のファンではないが、これは個人的です]







いずれにせよ、これらすべおの予玄や匱点にもかかわらず、この䞻題ぞの埩垰を行い、異なる環境や異なる蚀語でのMapReduceを実装しようずする倚くの理由がありたす。 このすべおは、私たちは、埌に聞こえるが、それたでBigDataに぀いおの話を聞かせなければなら...







デヌタが倧きく、ずき少しするず



それはBigDataに倢䞭にし始めた数幎前、圌は少しデヌタが倧きくなり、どこの限界があるが、誰もがそれを行うにはファッショナブルな、若さず「間違った」こずを知っおいただったずき、誰もが本圓に知りたせんでした。 時が経぀に぀れ、䞀郚の人はBigData長い流行語それはかなり面癜いですが、ガヌトナヌず宣蚀し、実際に削陀決定し、決定BigData 2016のための圌のカヌブbazvordovずの甚語は、他の分割されたずいう事実によっお、それを正圓化したす。 かかわらず、ガヌトナヌ甚語BigDataぞの欲求の、ただ私たちの間で、非垞に生きお、そしお私は圌の理解を決定するためにそれの時間を考えたす。







䟋えば、我々は最埌たで知っおいれば、時に「ビッグデヌタ」をオンにする私たちの「非垞に倧きなデヌタではなく」







理由の最も特異デビッドキャンタヌ、䞀般的におよびx86 chastnosti1におけるアヌキテクチャプロセッサ䞊で最も尊敬専門家の䞀人によっお䞎えられた回答









FWIW、私はむンテルで働いおいた時に、ハヌドりェアチヌムは、「次䞖代プロセッサ»don'taskに取り組んで参加し、私は玄材料勉匷し始めたプロセッサアヌキテクチャ Nehalemのをオンラむンでない内郚ドック付きのデむビット・カンタヌを、およびMASを持っおいたす。 ダビデはより良く、より明確だったので。







぀たり あなたのデヌタの「テラバむトの倫婊のみ」なら、あなたはおそらく、すべおのデヌタは、お金ずモチベヌションのに十分であれば、もちろん、量は、サヌバヌ䞊のメモリに収たるこずを保蚌するのに十分であるサヌバマシンのハヌドりェア構成を芋぀けるこずができるようになりたす、そしお、あなたのデヌタがただありたす非垞に倧芏暡ではありたせん。







停止䜜業垂盎スケヌリングずアプロヌチ機械の「より良い」発芋するずきBigDataがあるため、開始したす デヌタの特定のサむズであなたは、任意の合理的なお金のために耇数の構成を賌入するこずはできたせん。 そしお、我々は広さに成長し始める必芁がありたす。







単玔に - 最高



[OK]を、私たちは甚語BigDataに成長しおいるデヌタの量を決定するために、我々は倧芏暡なデヌタのためにその仕事に近づくかを決定しなければなりたせん。 倧芏暡な倧芏暡なデヌタに䜿甚され始めた最初のアプロヌチの䞀぀だったMapReduce 。 倚くの代替゜フトりェアモデルは、より良いたたはより柔軟なMapReduceのよりかもしれないが、おそらく最も効率的ではないが、圌は間違いなく、最も単玔化するこずができビッグデヌタ、での䜜業、がありたす。







たた、できるだけ早く我々はサポヌトBigDataのための゜フトりェアプラットフォヌムやデヌタベヌスプラットフォヌムのいく぀かの皮類を怜蚎し始めずしお、我々は、MapReduceのシナリオは、内郚たたは倖郚のツヌルで、このプラットフォヌムでサポヌトされおいるこずをデフォルトで想定しおいたす。







蚀い換えれば-あなたはあなたのプラットフォヌムがBigDataをサポヌトしおいるこずを、䜕のMapReduceを蚀うこずはできたせん







ALARMは - あなたが月に10幎いなかったならば、あなたは安党のMapReduceアルゎリズムの基本に぀いお話を攟散させるこずができ、チャンスはあなたが既に知っおいるされおいたす。 䌑息のために、我々はそれがすべお始たった堎所、それをご玹介するために再びしようずするず、どのようにそれはすべお2016幎の終わりに䜿甚するこずができたす。 特に、MapReduceのは、カヌトンからサポヌトされおいないプラットフォヌム䞊で。







倚くの堎合、問題の最も簡単な方法は、私たちは最高の結果を取埗し、ただ長い時間のために、補品に䜏むこずを可胜にするこずに泚目されおいたす。 かかわらず、蚈画の原䜜者の。 堎合であっおも、その結果ずしお、それが最も効率的ではありたせんが、原因コミュニティが持っおいるずいう事実のために、それは広く知られおおり、党おが孊んだ、ず圌はちょうど良い十分ず解き問題でした。 このような効果は、MapReduceのモデルで芳察さに぀いお-した埌も基本的には非垞に単玔である、それはただ広く䜿われおいる原䜜者の䞡方が圌の死を宣蚀したした 。







キャッシュにズヌム



歎史的にむンタヌシステムズのCachéは、䞡方の垂盎および氎平方向のスケヌリングのための兵噚庫に十分なツヌルを持っおいたした。 我々 はすべおの 悲しい絵文字を知っおいるようにCachéは、デヌタベヌス・サヌバが、氎平方向のスケヌラビリティず高可甚性のためにECP゚ンタヌプラむズ・キャッシュ・プロトコルを䜿甚するこずができ、アプリケヌション・サヌバヌ、だけではありたせん。







特城ECPプロトコルは、 - 非垞に匷く、䞭倮ノヌド・デヌタベヌス・サヌバでの曞き蟌みデヌモン性胜に圓接し、クラスタの異なるノヌドで同じデヌタにアクセスするためのコヒヌレンシ・プロトコルを最適化されたす。 ECPは、曞き蟌みデヌモンぞの負荷が非垞に高くない堎合は、カりントプロセッサコアにノヌドを远加するこずができたすが、関䞎するノヌドの各レコヌドに、よりアクティブに生成した堎合、このプロトコルは、氎平にスケヌルするアプリケヌションを助けにはなりたせん。 サヌバヌのデヌタベヌス䞊のディスクサブシステムがボトルネックであり続けるだろう。







ビッグデヌタを扱うずきに実際には、最新のアプリケヌションは、別の䜿甚を必芁ずする、あるいはアプロヌチの䞊に聞こえた盎亀したす。 氎平アプリケヌションは、クラスタの各ノヌド䞊のディスクサブシステムを䜿甚しなければならないスケヌル。 デヌタがリモヌトノヌドに提䟛されおいるECPずは異なり、我々は逆に、コヌドサむズが小さいこずが想定されるもたらし、サむズがデヌタサむズに関する少なくずも非垞に倧きなものずする各ノヌドにおけるデヌタ。 将来的には、シャヌディングず呌ばれるパヌティショニングの同様のタむプは、 将来の補品の䞀぀でSQL゚ンゞンキャッシュ内に実装されたす。 しかし今日でも、 プラットフォヌムぞの利甚可胜な手段で、私たちは私たちが珟代の、「トレンディ、若さ」を利甚しお氎平にスケヌラブルなシステムを蚭蚈するこずができるようになる䜕かをシンプルに実装するこずができ近づきたす。 䟋えば、MapReduceのを利甚しお...







GoogleのMapReduceの



MapReduceの元の実装がで曞かれおいるGoogleのC ++ 、それは広範なパラダむムは、JavaだけであるApacheの、䞊のMapReduceの実装ず業界で始たっおいるこずが刀明したした。 いずれの堎合も、かかわらず、実装蚀語の、アむデアは、それが私たちの堎合のように、C ++、Javaの、移動、たたはのCachéObjectScriptの䞊に実装されおいるかどうか、同じたた。







[のCachéObjectScriptの実装のために、我々はずしお知られおいる倚次元配列を扱う堎合にのみ䜿甚可胜ですトリックのカップルの䜿甚、がグロヌバルを 。 ただ]我々は可胜性があるため













図1. IspolnenievsredeのMapReduce izstati "倧の簡易デヌタ凊理MapReduceのクラスタ"、OSDI- 2004







絵䞊蚘に描かれたアルゎリズムのMapReduceの手順、芋おいきたしょう







  1. 入り口で、私たちは、「ファむル」、たたは我々はデヌタのいく぀かの独立の郚分にpartitsionirovat砎るこずができるこずを、デヌタの朜圚的に無限ストリヌムのセットを持っおいたす。







  2. 我々はたた、我々は、入力デヌタ片のハンドラずしお割り圓おるこずができる䞊列歌手のセット持っおいるロヌカル・ノヌドの内郚を、たたは他のクラスタノヌド䞊で削陀するこずができたすステップ「衚瀺»/«マップ»







  3. これらの䞊列プロセッサは、入力デヌタストリヌムを読み取り、出力ストリヌムS「キヌ倀」のペアを出力したす。 出力ストリヌムは、出力ファむルに曞き蟌たれるか、どこか他のこずができたすたずえば、クラスタファむルシステムGoogleのGFSは、Apache HDFS、たたはクラスタ内の耇数のノヌド間で、他の「魔法の堎所」の耇補デヌタで。







  4. 呌ばれる次のステヌゞでは、「収瞮»/«我々は驚き...畳み蟌みに埓事しおいるハンドラの異なるセットを持っおいる»枛らしたす 。 圌らは䞎えられたキヌ、すべおのデヌタの収集、および出力の次の「キヌず倀」ずしお、結果デヌタのために、お読みください。 このステップの流出物は、前のステップのように、魔法のクラスタ化されたファむル・システムたたはその類䌌䜓で曞かれおいたす。


自然の䞭でのバッチ - 泚MapReduceのアプロヌチずいう。 あなたがパむプラむンにさらに進む前に、圌は、パケットの実珟の芳点から、入力デヌタの無限のストリヌムを凊理し、そのステヌゞのそれぞれの䜜品「衚瀺」たたは「瞮小」の完了を埅機したせん。 これは、䟋えば、䜿甚されるよりモダンなラむンのアルゎリズムずは察照的であり、圌らのデザむンで「無限」の入力ストリヌムを凊理するこずを目的ずしおいるApacheのカフカ、。







知識豊富な人は、私はただ混乱しお、考えお、このセクションをスキップし、無知。 䌝統的に異なるプログラミング蚀語であり、異なる環境でのMapReduceの実装の説明で䜿甚されおいるワヌド数デヌタ・ストリヌム内の単語数、叀兞的な䟋で芋おみたしょう。







だから、聞かせおのは、我々が入力コレクションかなり倧きいファむル内の単語の数をカりントしなければならない、ず蚀いたす。 明確にするために、その単語の定矩、我々は、空癜文字、すなわち間の文字列を想定したす 数字、句読点は、たた、それは、もちろん、非垞に良いではありたせんが、単語の䞀郚ず考えられるが、単玔な䟋の枠組みの䞭で、それは私たちを気にしたせん。







私はC ++の䟋を芋るず、圌の魂の奥にあるC ++開発者ずしお、私のためのアルゎリズムは、明確になりたす。 もし「あなた - ではない」すぐに我々が簡略化された方法でそれが衚瀺されたす、心配しないでください。







#include "mapreduce/mapreduce.h" // User's map function class WordCounter : public Mapper { public: virtual void Map(const MapInput& input) { const string& text = input.value(); const int n = text.size(); for (int i = 0; i < n; ) { // Skip past leading whitespace while ((i < n) && isspace(text[i])) i++; // Find word end int start = i; while ((i < n) && !isspace(text[i])) i++; if (start < i) Emit(text.substr(start,i-start),"1"); } } }; REGISTER_MAPPER(WordCounter); // User's reduce function class Adder : public Reducer { virtual void Reduce(ReduceInput* input) { // Iterate over all entries with the // same key and add the values int64 value = 0; while (!input->done()) { value += StringToInt(input->value()); input->NextValue(); } // Emit sum for input->key() Emit(IntToString(value)); } }; REGISTER_REDUCER(Adder); int main(int argc, char** argv) { ParseCommandLineFlags(argc, argv); MapReduceSpecification spec; // Store list of input files into "spec" for (int i = 1; i < argc; i++) { MapReduceInput* input = spec.add_input(); input->set_format("text"); input->set_filepattern(argv[i]); input->set_mapper_class("WordCounter"); } // Specify the output files: // /gfs/test/freq-00000-of-00100 // /gfs/test/freq-00001-of-00100 // ... MapReduceOutput* out = spec.output(); out->set_filebase("/gfs/test/freq"); out->set_num_tasks(100); out->set_format("text"); out->set_reducer_class("Adder"); // Optional: do partial sums within map // tasks to save network bandwidth out->set_combiner_class("Adder"); // Tuning parameters: use at most 2000 // machines and 100 MB of memory per task spec.set_machines(2000); spec.set_map_megabytes(100); spec.set_reduce_megabytes(100); // Now run it MapReduceResult result; if (!MapReduce(spec, &result)) abort(); // Done: 'result' structure contains info // about counters, time taken, number of // machines used, etc. return 0; }
      
      







このようなマスタヌノヌドの実装の詳现は、䜿甚されるクラスタリングテクノロゞヌの実装プロトコルに匷く䟝存したす。 珟圚の物語の括匧の倖にあるこの詳现な説明は省略したす。 今回の堎合、CachéObjectScriptの堎合、考慮されおいるアルゎリズムの䞀郚珟圚のWordCountなどに぀いおは、グロヌバルずその性質の䜿甚により、゜ヌトされたスパヌス配列ずしお、りィザヌドを簡単に実装できたす。 詳现は埌で。









C ++実装のこのような詳现な説明を読んでも、MapReduceが䜕であるかただ理解できない堎合は、よく知られおいる1぀のスクリプト蚀語のいく぀かの行でこのアルゎリズムを説明しおみたしょう。







 map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); 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));
      
      





この単玔化された䟋でわかるように、map関数の圹割は、䞀連の<key、value>ペアを発行するこずです。 これらのペアはりィザヌドで混合および゜ヌトされ、指定されたキヌの結果の倀のコレクションは、reduce畳み蟌み関数の入力に送信され、出力関数<key、value>を生成したす。 この堎合、<word、counter>になりたす







叀兞的なMapReduce実装では、<key、value>ペアのコレクションを個別のコレクション<key、valuess>に倉換するのが、時間ずリ゜ヌスを最も消費する操䜜です。 Caché実装の堎合、btree *リポゞトリずECPバむンディングプロトコルの実装の性質により、りィザヌドでの゜ヌトず集玄はそれほど倧きなタスクではなく、ほずんど「無料」でマシンに実装されたす。 これに぀いおは、次の蚘事で説明したす。







おそらくこれは入門郚分ずしおは十分です-どの蚀語でもMapReduceの実装を開始するのに十分な情報を提䟛したしたが、CachéObjectScript実装自䜓にはただ觊れおいたせん。 次の蚘事でMapReduceの実装に戻りたす。 行に滞圚








All Articles