gpt4 book ai didi

hadoop 将\r\n 转换为\n 并破坏 ARC 格式

转载 作者:可可西里 更新时间:2023-11-01 14:23:12 25 4
gpt4 key购买 nike

我正在尝试使用 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(重命名文件不是一个选项)或让它正确解压?如果可能的话,我宁愿不使用我必须装在 jar 里的特殊 InputFormat 类。

所有这些最终都将在 AWS ElasticMapReduce 上运行。

最佳答案

看起来应该归咎于 Hadoop PipeMapper.java(至少在 0.20.2 中):

在第 106 行附近,来自 TextInputFormat 的输入被传递到此映射器(在该阶段\r\n 已被剥离),PipeMapper 仅使用\n 将其写出到标准输出。

建议修改 PipeMapper.java 的源代码,检查此“功能”是否仍然存在,并根据需要进行修改(可能允许通过配置属性设置它)。

关于hadoop 将\r\n 转换为\n 并破坏 ARC 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com