私の仕事では、多くの履歴ログセットを解析する必要があります。個々の顧客 (数千人) は、日付ごとに分割された数百のログ サブディレクトリを持っている場合があります。例えば:
- ログ/Customer_One/2011-01-02-001
- ログ/Customer_One/2012-02-03-001
- ログ/Customer_One/2012-02-03-002
- ログ/Customer_Two/2009-03-03-001
- ログ/Customer_Two/2009-03-03-002
個々のログ セット自体が 5 ~ 6 レベルの深さで、数千のファイルが含まれている場合があります。
したがって、実際には、個々のマップ ジョブでサブディレクトリの移動を処理する必要があります。個々のファイルを単純に列挙することは、私の分散コンピューティングの問題の一部です。
残念ながら、ログのサブディレクトリのみを含むディレクトリを Hadoop に渡そうとすると、これらのサブディレクトリをマッパーに渡すことができないというエラーが表示されます。(繰り返しますが、サブディレクトリを入力として受け入れるように書いています):
$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .
[ . . . ]
12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003
Streaming Command Failed!
[cloudera@localhost ~]$
ディレクトリを作業項目として割り当てることを Hadoop ストリーミングに許可する簡単な方法はありますか?