2010-12-03 4 views
1

私は少しのグーグルの後でもこれに対する答えを見つけられませんでした。私の入力ファイルは、ファイルが1GBに触れたときにそれらをチャンクするプロセスによって生成されます。さて、dfsの入力ディレクトリを処理するmapreduceジョブを実行する場合、hadoopジョブの実行中にこのジョブが同じ入力ディレクトリに追加されたファイルを確実にピックアップするようにするにはどうすればよいですか?Apache Hadoop:「時変」入力を行うことはできますか?

hadoopジョブが実行されたときにこれが不可能に近いと感じました。それは残りの時間とすべてのものを計算します。したがって、入力が積み重なったり、それを管理する方法を知っている - これは私の推測です。私はあなたにこのことについて、またこれに対する最良の可能な代替方法についても知りたいと思います!あなたの助けに感謝。

答えて

1

構造的に言えば、Hadoopはこれを処理できますが、フロントエンドをいくつか(またはオープンソースのいくつかを使用して)動作させ、Hadoopがその仕事をすることを可能にする必要があります。

良いシステムと同じように、Hadoopはすべてを行うことはできませんし、すべきではありませんが、いくつかの選択肢があります。

データベース(またはキュー)の後ろに少し時間を費やしてスクリプトを開発すると、この問題を自分でかなり迅速に解決できます(RubyやPythonで何かを書くことができ、時にはbashスクリプトこれは非常に簡単で、たとえJavaを使用していても、複雑さはbashスクリプトをRubyやPythonのレイヤーと混ぜるだけではありません)。

手順1:ファイルは[あなたのパラメータ(1GBなど)に基づいてディレクトリ/保留になり、「ローリング」されているファイルの挿入がテーブル(またはキュー)に挿入されます...挿入できない場合(cronを介して)ディレクトリをスキャンし、ファイルを新しいディレクトリに移動し、dbに名前と場所を挿入することができます。

ステップ2:cron(1時間に1回)データベース(またはキュー)に行き、MapReduceにするすべてのファイルを取得する別のスクリプト

ステップ3:ステップ2のスクリプトで、見つかったファイルと複数のスレッドRubyを使ってフォークする方が良いです)、これらのファイルをプッシュしますHadoopへメソッドが単純な "hadoop df -put"(RubyやPythonスクリプトから呼び出すbashスクリプトを使うことができる)であるか、必要なものに応じていくつかのカスタムjarファイルローダーができるからです。別のテーブルでファイルをいくつかの仕事に関連したものにしておきたいかもしれませんが、私はあなたに任せます。

ステップ4:ファイルをHadoopにプッシュした後、テーブルにイベントのコンセプトがあり、最後の行がシンプルになるような3番目のスクリプトから実行して、必要なものを出力します。

オープンソースのオプション

あなたはあまりにもいくつかの使用を見つけるかもしれないヤフーによってソースHadoopのオープンのためのワークフローソリューションですが、それはすべてあなたが努力しますから抜け出すことがどのくらい依存Oozie http://yahoo.github.com/oozie/releases/2.2.1/を使用することができますあなたのワークフローを自動化する方法はカスタムスクリプトセットの中のいくつかの努力のように聞こえますが、Oozieを見てください。

Hadoopのための別のワークフローがアズカバンhttp://sna-projects.com/azkaban/

最後にある、あなたがHDFSにファイルを移動するためにストリーミング・アーキテクチャを使用することを検討することができます...今日の3つの方法(カフカがあります新しく、わずか数を発表しました。バック他の2つよりもそのコアアーキテクチャの背後よりqueingと日間)

1)水路https://github.com/cloudera/flume/wiki

2)スクライブHDFS http://hadoopblog.blogspot.com/2009/06/hdfs-scribe-integration.html

3)カフカhttp://sna-projects.com/kafka/

+0

Oozieが役立つと思います。私はそれを働かせることができました。 – Jay

3

Hadoopが処理できないユースケースについて説明します。 Hadoopは入力ディレクトリをスキャンし、map/reduce関数が実行される前でも分割を決定します。したがって、分割が決定された後にさらに多くのデータが追加された場合、あなたは不運になります。

もっとリアルタイム処理システムが必要なようです。 Hadoopはバッチ指向のプロセス用に設計されています。データ処理の要件が正確かどうかはわかりませんので、ソリューションを推薦するのは難しいです。たぶん、マイクロバッチ処理やHadoopジョブをより少ないデータ量で実行するほうが助かりますか?

+0

ok ..あなたの答えは非常に有効です。しかし、マイクロバッチ処理と、より少ないデータ量でより頻繁にHadoopジョブを実行することは、この問題に対する良いアプローチだと思いますか?それは私にハックのようなものです... – Jay

+0

もしあなたがHadoopを使い続けるなら、IMHOのマイクロバッチ処理は完全に良いアプローチです。必要に応じてレイテンシがまだ高い場合は、Hadoopのバッチジョブの他に、おそらく他のものが必要になるでしょう – bajafresh4life

関連する問題