0

EMR クラスターのパス「hdfs:///logs」に多数のログ ファイルがあります。各ログ エントリは複数行ですが、2 つのエントリを区別するための開始マーカーと終了マーカーがあります。今、

  1. ログ ファイルのすべてのエントリが役立つわけではありません
  2. 後で出力ログを (Hive を使用して) 効率的にクエリできるように、有用なエントリを変換し、出力を出力ファイルに保存する必要があります。

ログファイルを取得して一部を実行できるPythonスクリプトがあります。そしてb。上で述べましたが、私はマッパーやリデューサーを書いていません。

Hive は、そのクエリのために Mapper と Reducer を処理します。Python スクリプトを使用してすべてのログに対して実行し、出力を 'hdfs:///outputlogs' に保存することが可能かどうか、またその方法を教えてください。

私は Map Reduce を初めて使用し、Word カウントの例をいくつか見てきましたが、それらはすべて 1 つの入力ファイルを持っています。複数の入力ファイルを持つ例はどこにありますか?

4

3 に答える 3

1

ここで、2 つの問題があることがわかります。

于 2012-12-21T09:22:42.223 に答える
1

ロジックが既に記述されていて、EMR および/またはバニラ Hadoop を使用して並列処理を行いたい場合は、Hadoop ストリーミングを使用できます: http://hadoop.apache.org/docs/r0.15.2/streaming.html。簡単に言えば、データを stdin に取り込み、stdout に出力するスクリプトは、マッパーになることができます。
したがって、コードを再パッケージ化する必要なく、クラスターを使用して HDFS でデータの処理を実行します。

于 2012-12-23T11:23:52.573 に答える
1

これを行うための長期的な正しい方法は、Amar が述べたように、それを行うための MapReduce ジョブを作成することです。

ただし、これが 1 回限りのことであり、データがそれほど大きくない場合は、Python スクリプトが既にあるため、単純な bash スクリプトを使用してこれを行うのが最も簡単で簡単な場合があります。

hadoop fs -text /logs/* > input.log
python myscript.py input.log output.log
hadoop fs -copyFromLocal output.log /outputlogs
rm -f input.log output.log

これが繰り返されるプロセスである場合 (信頼性と効率性を高めたい場合)、または単に MapReduce の使用方法を学びたい場合は、Amar の回答に固執してください。

于 2012-12-21T22:40:38.250 に答える