この質問は簡単ですが、その背後にある実際の作業を理解することはできません。 私は人々が言うと知っている、512 Megsの塊に分解し、Map reduceを使用してマージソートを使うように並べ替えます。だからここ1GB RAMのマシンで1TBファイルをソート
は私が持っている実際の質問です:
私は512メグスチャンクにファイルを分割し、それらを並べ替えるために別のホスト・マシンに送信するとします。 これらのマシンでマージソートが使用されているとします。 今は、2000台のマシンにそれぞれ2000、512メガのチャンクを並べています。今私はそれらを元に戻すときに、どのように機能するのですか?サイズは再び増加し続けるでしょうか?たとえば、2つの512メガをマージすると1024メガバイトが作成されますが、これは私のRAMのサイズですので、どのように動作しますか?どのマシンでも512メガ以上のチャンクを別のチャンクとマージすることはできません。その理由はサイズが1GBを超えるからです。
2つの0.5 TBチャンクをもう1つの0.5 TBチャンクとマージすることができます。仮想メモリの概念はここで始まりますか?
私はここで基礎を明確にしています。私は、この非常に重要な質問を正しく(正しく)求めていることを願っています。また、誰がこのマージを(ソート後に)行うべきですか?私のマシンか、それらの2000台のマシンのいくつか?
メモリにファイルを保持しようとすると、メモリが不足するだけです。ファイルをチャンクして各チャンクをソートしたら、各ファイルをマージして新しいファイルに書き出す際に、各ファイルの1行をメモリに保存するだけで済みます。 –
マージソートは私のお気に入りのアルゴリズムの1つです。とてもシンプルで分かりやすく便利です。 –
ところで、これは、データセット全体で2回の読み取り/書き込みパスしか使用しない可能性があります。 (4 TBのI/O合計)これは非常に複雑なので詳細はスキップしますが、コア外FFTアルゴリズムと同じアプローチを使用します。 – Mysticial