14

私は小さな開発者チームを管理しており、常にいくつかの進行中の (1 回限りの) データ プロジェクトがあり、それらは「恥ずかしいほど並列」と見なすことができます。これらは通常、1 台のコンピューターで 1 台のスクリプトを数日間実行することを伴います。たとえば、数千の PDF ファイルを処理して重要なテキストを抽出し、後でデータベースに挿入できるように CSV ファイルに配置します。

現在、これらのタイプのタスクを十分に行っているため、RabbitMQ を使用していくつかの予備サーバーを使用して単純なジョブ キュー システムの開発を調査し始めました (より大きなスケーリングが必要なプロジェクトで Amazon SQS/S3/EC2 を使用することを視野に入れています)。

これを行っている他の例を探していると、古典的な Hadoop New York Times の例に出くわします。

The New York Times は、100 個の Amazon EC2 インスタンスと Hadoop アプリケーションを使用して、4 TB の生の画像 TIFF データ (S3 に保存) を処理し、24 時間で 1,100 万個の完成した PDF を生成しました。計算コストは​​約 240 ドル (帯域幅を含まず) でした。

どちらが完璧に聞こえますか? そこで、Hadoop と Map/Reduce について調べました。

しかし、私が解決できないのは、彼らがどのようにそれをしたかです? またはなぜ彼らはそれをしたのですか?

TIFF を PDF に変換することは、Map/Reduce の問題ではありませんか? 単純なジョブ キューの方が優れていると思いませんか?

もう 1 つの古典的な Hadoop の例は、 Yahoo Hadoop チュートリアルの「wordcount」です。これはMap/Reduce に完全に適合するように思われます。これがビッグ データにとって非常に強力なツールである理由がわかります。

これらの「並外れた並列」タスクがどのように Map/Reduce パターンに組み込まれるのか理解できません。

TL;DR

これは非常に概念的な質問です。基本的に、「数千の PDF ファイルを処理していくつかの重要なテキストを抽出し、CSV ファイルに配置する」というタスクを Map/Reduce パターンにどのように適合させるかを知りたいですか?

完璧な例を知っていれば、それを書くように頼んでいるわけではありません。

(注: 私たちは PDF を処理するためのコードを持っています。私はそれを求めているわけではありません。これは単なる例であり、任意のタスクである可能性があります。そのようなプロセスを Hadoop Map/Reduce パターンに入れることについて尋ねています。タスクへの明確な「マップ」または「削減」要素はありません。)

乾杯!

4

2 に答える 2

5

あなたの考えは正しいです。

あなたが言及した上記の例は、hadoop が提供するソリューションの一部のみを使用しました。彼らは間違いなく、Hadoop と分散ファイル システムの並列コンピューティング機能を使用していました。reduce ステップが常に必要である必要はありません。実行される並列プロセス間にデータの相互依存性がない場合があります。その場合、reduce ステップを省略します。

あなたの問題もhadoopソリューションドメインに当てはまると思います。

膨大なデータがあります - 膨大な数の PDF ファイルと実行時間の長いジョブ

HDFS にファイルを配置し、MapReduce ジョブを実行することで、これらのファイルを並行して処理できます。処理時間は、理論的には、クラスターにあるノードの数によって改善されます。個々のスレッドによって生成されるデータ セットを集約する必要がない場合は、reduce ステップを使用する必要はありません。それ以外の場合は、reduce ステップも設計する必要があります。

ここで重要なことは、reduce ステップが必要ない場合は、hadoop の並列計算機能を活用しているだけであり、それほど高価ではないハードウェアでジョブを実行できるようになっているということです。

于 2013-04-01T13:47:33.117 に答える
1

もう 1 つ追加する必要があるのは、エラー処理と再試行です。分散環境では、ノードの障害はかなり一般的です。私は、一度に数百のノードで構成される EMR クラスターを 3 ~ 8 日間定期的に実行しており、その間に 3 つまたは 4 つの障害が発生する可能性が非常に高いことがわかりました。Hadoop JobTracker は、失敗したタスクを (一定の回数まで) 別のノードに適切に再送信します。

于 2015-01-22T00:15:30.167 に答える