CWYAlpha

Just another WordPress.com site

Thought this was cool: Hadoop Map Reduce TextInputFormat的编码问题 (GZIP)

leave a comment »


最近在实现一些分布式算法,所以研究了一些hadoop,这里把一些遇到的问题纪录一下。

Map端的输入格式如果是TextInputFormat, 而你的输入文件是gzip格式,那么你的输入文件必须以.gz结尾,否则hadoop认不出来那是gzip格式,这是因为SB的hadoop居然是按照文件名判断编码的。

请见这一段代码 http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.2/org/apache/hadoop/mapreduce/lib/input/TextInputFormat.java.html

在createRecordReader函数(39行),它直接返回 new LineRecordReader()

再看LineRecordReader是怎么写的,http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.2/org/apache/hadoop/mapreduce/lib/input/LineRecordReader.java.html

找到第63行,发现如下代码 final CompressionCodec codec = compressionCodecs.getCodec(file);

getCodec函数就是按照file的扩展名来判断的。

而且基于现有的代码很难有很NB的方法解决这个问题,解决方案1就是重命名文件,如果不能重命名文件,只有自己写一个类继承LineRecordReader,重载initialize函数,实现自己想要的编码方式。

理论上,TextInputFormat应该让它的解码器可配置,如果不配置,则按照文件名来。

目前最新的代码还是这个样子 http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/lib/input/LineRecordReader.java?view=markup

您可能也喜欢:

汉字编码

UTF-8编码

Hadoop MapReduce for Netflix Prize

推荐系统的5个问题

排序的交换问题

无觅

from xlvector – Recommender System: http://xlvector.net/blog/?p=871

Written by cwyalpha

十二月 13, 2012 在 4:27 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: