0

Cassandraデータベースに文字列のリストを入力し、Hadoopを使用して処理したいと思います。私がやりたいことは、Hadoopクラスターを使用してすべての文字列を順番に実行し、最長の共通部分文字列を見つけるために各文字列間にどれだけのオーバーラップがあるかを記録することです。

私の質問は、InputFormatオブジェクトを使用すると、データを並べ替えられた順序で読み取ることができますか、それとも、クラスター内のすべてのマシン全体で文字列を「ランダムに」(Cassandraがデータを配布する方法に従って)読み取ることができますか?MapReduceプロセスは、私が求めているように2つの行を連続して見ることを意図せずに、各行を単独で処理するように設計されていますか?

4

1 に答える 1

1

まず、マッパーはInputFormatから取得した順序でデータを読み取ります。私はカサンドラの専門家ではありませんが、それがソートされた順序になるとは思いません。

並べ替え順序が必要な場合は、出力キーが文字列自体であるIDマッパー(何もしないもの)を使用する必要があります。次に、reduceステップに渡される前にソートされます。ただし、複数のレデューサーを使用できるため、少し複雑になります。レデューサーが1つしかないため、すべてがグローバルにソートされます。複数の場合、各レデューサーの入力はソートされますが、レデューサー間の入力はソートされない場合があります。つまり、隣接する文字列は同じレデューサーに移動しない可能性があります。これを処理するには、カスタムパーティショナーが必要になります。

最後に、最も長い共通の部分文字列を実行しているとおっしゃいましたが、文字列の各ペアの中で最も長い部分文字列を探していますか?文字列の連続したペアの中で?すべての文字列の中で?これらの可能性はそれぞれ、MapReduceジョブを構造化する必要がある方法に影響を与えます。

于 2012-12-31T22:14:52.180 に答える