すべての行に対して二次的な並べ替えを行わずに、合計の並べ替え順序を探していると仮定します。通常、時間と空間の間にはトレードオフがあり、Hadoop では、時間に対して最適化された製品 (TeraData Hadoop で使用するためにデータベースをメモリに配置する機能があります)
あなたが言及した 2 つの可能なアプローチのうち、Hadoop インフラストラクチャ内で機能するのは 1 つだけだと思います。数値 2、Hadoop は1 つのジョブを実行するために多くのノードを活用するため、並べ替えの実装は少し難しくなります。また、分散並べ替えはプログラミング モデルの中心であるため、通常、MR の「シャッフルと並べ替え」フェーズで並べ替えを処理する必要があります。 .
59番目の変数が生成された時点で、その変数の分布をサンプリングして、フレームワークを介して送信し、前述のようにマージできるようにする必要があります。x の変数分布に値の 80% が含まれている場合を考えてみましょう。これにより、データの 80% が、ほとんどの作業を行う 1 つのレデューサーに送信される可能性があります。もちろん、これは、いくつかのキーがソートおよびシャッフル フェーズでグループ化されることを前提としています。キー配布をサンプリングして負荷を均等に分散するようにパーティショナーを設定するのは、プログラマ次第です。
一方、メモリ内でソートする場合は、reduce 中に同じことを達成できますが、ソートは現在ソートを実行しているノードで使用可能なメモリの量と同程度であり、すぐに消滅するため、固有のスケーラビリティの問題があります。メモリに収まらなかった残りのデータを探すために HDFS を使用し始めるとき。また、サンプリングの問題を無視した場合、すべてのキーと値のペアが均等に分散され、データ内のメモリ容量を理解していない限り、メモリが不足する可能性があります。