2017-02-23 1 views
0

私は約170GBのデータを持っています。私はhadoop 2.7.3を使って分析しなければなりません。 14人の労働者がいる。各ドキュメントの一意のMIMEタイプの合計を見つける必要があります。 text/htmlタイプのドキュメントの総数。私がmapreduceジョブ(Pythonで書かれています)を実行すると、Hadoopは、私が期待している単一のファイルではなく、多くの出力ファイルを返します。これは、あるデータを一度に処理して出力する多くの作業者によるものだと思います。私は単一の出力を取得したい。問題はどこだ。どのように私は、(すべての小さな出力ファイルを組み合わせることによって)単一の出力を与えるためにhadoopを制限することができます。単一の結果を得るためにhadoopマッパーの出力を結合する方法

+0

setnumreducetasks(1)を設定して、単一の出力を得ることができます。私は – Bhavesh

+0

を具体的にすることはできますか?希望の出力形式はどうですか?あなたは何を得ていますか? – vefthym

答えて

1

あなたの仕事はマッパーごとに1ファイルを生成していますが、これを行うには1レデューサーを使用してレデューサーフェーズを強制する必要があります。これにより、すべてのマッパーで同じキーを発行できます。

2

あなたがHDFSからデータを取得するときは、Hadoopのgetmergeコマンドを使用して、エンドファイルをマージすることができます

hadoop fs -getmerge /output/reduce/ /localcatalog/mergedresult.txt 

を各マッパーと減速は、別のファイルを生成し、あなたは意志マッパーと減速の数を減少させることによってしますあなたの仕事の並行性のレベルを下げる。私は、単一の出力に減速機を制限するのではなく、提供されたコマンドを使用してhdfsからマージされた結果を得ることが最善の方法だと思います。

+0

マージすると重複が発生すると思います。各出力ファイルにキーtext/htmlが存在します。最終的な出力では、すべての合計でなければなりません。 – Shafiq

+1

@Shafiq Reducerはキーでデータをグループ化して、減速器のジョブに順番にこれを配布するので、重複はありません。したがって、重複がなく交差しない範囲を持つことになります。 getmergeはそれらを1つのファイルにまとめます。 – Alex

+0

@Shafiqアレックスの答えは、現在の問題のステートメントには正しいです。あなたがコメントしたことは、元の質問とは異なります。 "各文書のユニークなMIMEタイプの合計を見つけなければならない"というメッセージは明確ではありません – vefthym

1

処理されたドキュメントごとにマッパーを発光させます。(doc-mime-type, 1)このようなペアはすべて縮小フェーズでカウントアップされます。基本的には、マッパーが各docのMIMEタイプごとに1を出力することを除いて、標準的な単語カウントの練習です。

設定するレデューサーの数について:レデューサーの結果をマージするアレックスの方法は、削減段階ですべてのワーカーノードを使用できるため、望ましい方法です。しかし、ジョブが1-2のノードで実行される場合、ただ1つの減速機がうまく動作するはずです。

関連する問題