【问题标题】:Hadoop lzo single split after index索引后的 Hadoop lzo 单拆分
【发布时间】:2017-01-04 17:30:34
【问题描述】:

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

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

EDIT:根据this issue on GitHub自动推断索引文件,并根据文件大小进行拆分。仍然不知道为什么我得到一个拆分。

【问题讨论】:

  • 原始文件的大小是多少?压缩后呢?我希望您的文件大小大于“最小拆分大小”属性

标签: hadoop mapreduce lzo hadoop-lzo


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多