索引

时间:2017-01-04 17:30:35

标签: hadoop mapreduce lzo hadoop-lzo

我有一个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

它正确执行但需要FOREVER。我注意到它只拆分文件一次(当我在非LZO文件上运行相同的工作时,它将它分割大约25次)

mapreduce.JobSubmitter: number of splits:1

我做错了什么?

hadoop-lzo文档有点缺乏。它说" 现在在新文件"上运行任何工作,比如wordcount。我首先想到我应该使用/data/mydata.lzo.index文件作为我的输入,但是在使用它时我得到一个空输出。该文档还说" 请注意,如果您忘记索引.lzo文件,该作业将起作用,但会在一次拆分中处理整个文件,效率会降低。&# 34;因此,无论出于何种原因,它都没有看到index文件。

传递索引文件的正确方法是什么?

编辑:根据this issue on GitHub自动推断索引文件,并根据文件大小进行拆分。仍然不确定为什么我会得到一个分裂。

1 个答案:

答案 0 :(得分:0)

试试这个:

hadoop jar myjar.jar -input /data/mydata.lzo -input /data/mydata.lzo.index