LZO 圧縮ファイルが/data/mydata.lzo
あり、これを MapReduce コードで実行したいと考えています。最初に、次のコマンドでhadoop-lzoパッケージを使用してインデックス ファイルを作成します。
>> hadoop jar hadoop-lzo-0.4.21.jar \
com.hadoop.compression.lzo.DistributedLzoIndexer \
/data/mydata.lzo
これは正常に実行されます
17/01/04 11:06:31 INFO mapreduce.Job: Running job: job_1472572940387_17794
17/01/04 11:06:41 INFO mapreduce.Job: Job job_1472572940387_17794 running in uber mode : false
17/01/04 11:06:41 INFO mapreduce.Job: map 0% reduce 0%
17/01/04 11:06:52 INFO mapreduce.Job: map 86% reduce 0%
17/01/04 11:06:54 INFO mapreduce.Job: map 100% reduce 0%
17/01/04 11:06:54 INFO mapreduce.Job: Job job_1472572940387_17794 completed successfully
ファイルを作成します/data/mydata.lzo.index
。これを他のHadoop Javaコードで実行したい
hadoop jar myjar.jar -input /data/mydata.lzo
正しく実行されますが、永遠にかかります。ファイルが 1 回だけ分割されることに気付きました (LZO 以外のファイルに対してこの同じジョブを実行すると、約 25 回分割されます)。
mapreduce.JobSubmitter: number of splits:1
私は何を間違っていますか?
hadoop-lzo のドキュメントが少し不足しています。「新しいファイルに対して、ワードカウントなどのジョブを実行します」と表示されます。ファイルを入力として使用する必要があると最初に考えましたが、それを使用/data/mydata.lzo.index
すると空の出力が得られます。ドキュメントには、「.lzo ファイルのインデックス作成を忘れた場合、ジョブは機能しますが、ファイル全体を 1 回の分割で処理するため、効率が低下することに注意してください。」と記載されているため、何らかの理由でindex
ファイルが表示されません。
インデックスファイルを渡す適切な方法は何ですか?
編集: GitHub のこの問題によると、インデックス ファイルは自動的に推測され、ファイル サイズに応じて分割されます。なぜ私が単一の分割を取得しているのかはまだわかりません。