【发布时间】:2012-01-25 08:32:35
【问题描述】:
我正在尝试使用 hadoop 流解析来自 commoncrawl.org 的数据。我设置了一个本地 hadoop 来测试我的代码,并有一个使用流式 ARCfile 阅读器的简单 Ruby 映射器。当我像自己一样调用我的代码时
cat 1262876244253_18.arc.gz | mapper.rb | reducer.rb
它按预期工作。
似乎 hadoop 会自动看到文件具有 .gz 扩展名并在将其交给映射器之前对其进行解压缩 - 但是在这样做的同时它将流中的 \r\n 换行符转换为 \n。由于 ARC 依赖于标题行中的记录长度,因此更改会破坏解析器(因为数据长度已更改)。
为了仔细检查,我将映射器更改为期望未压缩的数据,然后:
cat 1262876244253_18.arc.gz | zcat | mapper.rb | reducer.rb
而且它有效。
我不介意 hadoop 自动解压缩(尽管我可以很高兴地处理流式传输的 .gz 文件),但如果确实如此,我需要它以“二进制”形式解压缩,而无需进行任何换行转换或类似操作。我相信默认行为是将解压缩的文件提供给每个文件一个映射器,这是完美的。
我怎样才能要求它不要解压缩 .gz(重命名文件不是一个选项)或让它正确解压缩?如果可能的话,我宁愿不使用必须装在罐子里的特殊 InputFormat 类。
所有这些最终都将在 AWS ElasticMapReduce 上运行。
【问题讨论】:
-
这方面有什么更新吗?这是否与:github.com/hayesgm/common_crawl_types 相关?
标签: hadoop mapreduce elastic-map-reduce