私はGenericOptionsParser
さん-files
フラグを使用して実行しているジョブに小さなファイルを渡すためにしようとしている:Hadoop Map/ReduceジョブでDistributedCacheにアクセスするにはどうすればよいですか?
$ hadoop jar MyJob.jar -conf /path/to/cluster-conf.xml -files /path/to/local-file.csv data/input data/output
これは私のクラスタにジョブを送信し、ローカルファイルを添付することになっています。 csvを必要に応じてMapper/Reducerで利用できるようにします。これを擬似分散モードで実行したときにうまくいったのですが、クラスタでジョブを起動するとファイルが見つからないようです。私はそうのように私のマッパーのsetup
方法でファイルを読んでいる:
public static class TheMapper extends Mapper<LongWritable, Text, Text, Text> {
@Override
public void setup(Context context) throws IOException, InterruptedException {
URI[] uriList = DistributedCache.getCacheFiles(context.getConfiguration());
CsvReader csv = new CsvReader(uriList[0].getPath());
// work with csv file..
}
// ..
}
ジョブが実行されている場合、私は次の例外を取得:
java.io.FileNotFoundException: File /hdfs/tmp/mapred/staging/hduser/.staging/job_201205112311_011/files/local-file.csv does not exist.
at com.csvreader.CsvReader.<init>(Unknown Source)
at com.csvreader.CsvReader.<init>(Unknown Source)
at com.csvreader.CsvReader.<init>(Unknown Source)
at MyJob$TheMapper.setup(MyJob.java:167)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
...
任意のアイデアを私が間違ってやっていますか?ありがとう。
は素晴らしい仕事 - 感謝を! – sa125