我有一个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
它执行正确,但需要永远。我注意到它只拆分一次文件(当我在非lzo文件上运行同一个作业时,它拆分了大约25次)
mapreduce.JobSubmitter: number of splits:1
我做错什么了?
hadoop lzo文档有点缺乏。它说“现在在新文件上运行任何作业,比如wordcount”。我首先想我应该使用 /data/mydata.lzo.index
文件作为我的输入,但我得到一个空的输出时使用。文档还说“请注意,如果您忘记索引一个.lzo文件,作业将工作,但将处理整个文件在一个单一的分裂,这将是效率较低的。”因此,无论出于何种原因,它没有看到 index
文件。
传递索引文件的正确方法是什么?
编辑:根据github上的这个问题,索引文件将自动推断出来,并将根据文件大小进行拆分。我还是不知道为什么我要分开。
1条答案
按热度按时间sf6xfgos1#
试试这个: