質問

データ・フローの観点からのMapReduceとHBaseの組み合わせを見ると、私の問題が合うようです。私は、マップ結合し、削減したい文書の大規模なセットを持っています。私の以前のSQLの実装では、累積テーブルに地図の結果がどうなるか保存してから減らすのと同等の実行、バッチ操作にタスクを分割することでした。これは、実行(または実行の間)中の任意の時点で、私はその時点で地図の結果を持っていた利点を持っています。

私の理解では、MapReduceのように、このジョブを実行するたびに実行するために地図機能のすべてを必要とする。

マイマップ機能(および実際には任意の関数)は常に与えられた入力に対して同じ出力を提供します。私が持っていない場合は、再計算の出力にはポイントは、単純にありません。私の入力(文書の集合)が継続的に成長するだろうと私はデータ上で定期的に私のMapReduceの操作を実行します。処刑の間に私は本当に新しく追加された文書に地図機能を計算している必要があります。

私のデータは、おそらくHBaseのだろう - >のMapReduce - > HBaseの。 Hadoopの全体生態系であることを考えると、与えられた関数は、指定されたアイデンティティを持つ行に適用されていることを知ることができるかもしれません。私は、HBaseのテーブル内の不変のエントリを想定しています。 / Hadoopのできるこのを考慮していますか?

私は(潜在的に冗長データの)再計算が持続し、Hadoopのは、のために使用されている問題のクラスに取り出すよりも速くすることができドキュメンテーション(特にClouderaのビデオ)から知らされています。

すべてのコメント/回答は?

役に立ちましたか?

解決

あなたが地図を実行しないように探している場合は、

、毎回ステップ独自のステップとして、(どちらかIdentityReducerを使用するか、または0にジョブの減速の数を設定することで)それを破るとの出力を使用して、後の手順を実行します地図のステップます。

このたびは、ボリュームや形状入力データの対出力データに依存した生データから再計算するよりも、実際に高速であるかどうかは、あなたのマップのステップがどのように複雑な、など。

新しいデータセットであなたのマッパーを実行すると、以前の実行に追加しないことに注意してください - しかし、あなたは、日付の出力フォルダを使用することによってこの問題を回避することができます。これは、あなたがmy_mapper_output/20091101my_mapper_output/20091108内のファイルの最初のバッチ、そして来週のバッチをマッピングの出力を保存することができると言うことです、などあなたがセット全体にわたり軽減したい場合は、としてmy_mapper_outputに渡すことができるはずです入力フォルダ、および出力セットのすべてをキャッチします。

他のヒント

なぜ、あなたのSQLのワークフローは、異なる環境で適用されませんか?つまり、あなたの入力テーブルに「処理」列を追加します。時間が要約を実行するようになると、同じようなものだパイプラインを実行します:

(!によって処理フィルタリングされた入力テーブル)上の

マップ(map_function)。 HDFS HBaseの中で、または単にいずれかmap_outputsに保存します。

(map_outputs)に

マップ(関数を減少させます)。 HBaseのに保存します。

あなたは、あなたがどこかに成功した要約ランのタイムスタンプを記録した場合、挿入日付順のHBaseであなたのデータを保存し、後で最後に成功した要約よりも日付されている入力にフィルタを開いていると仮定すると、生活が少し楽に行うことができます - あなたには、いくつかの重要なスキャン時間を節約できます。

ここで(彼らはHBaseのを使用していないが)一つの会社が彼らのワークフローを設計さを示し興味深いプレゼンテーションがあります: ます。http://www.scribd。 COM / DOC / 20971412 / Hadoopの世界プロダクション・ディープ・ダイブ - と - 高可用性

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top