Java 在hadoop中使用mapreduce解析文件
我有一个日志文件名为2014-11-10.log,结构如下Java 在hadoop中使用mapreduce解析文件,java,parsing,hadoop,mapreduce,Java,Parsing,Hadoop,Mapreduce,我有一个日志文件名为2014-11-10.log,结构如下 头1,体1_a 头2,体2 头3,体3 头1,体1_b ... 标题相同的主体可能不相等,例如,主体1_a和主体1_b不相等 我想将每个主体解析为csv文件,其中每个csv文件对应一个头部 比如说,, 校长1,年龄:5,收入:1000,性别:男孩 标题2,电子邮件,something@gmail.com,年龄,20岁,性别,男孩 标题2,电子邮件,something@yahoo.com,年龄,20岁 第一类,年龄:5岁,收入:10
头1,体1_a
头2,体2
头3,体3
头1,体1_b
...
标题相同的主体可能不相等,例如,主体1_a和主体1_b不相等
我想将每个主体解析为csv文件,其中每个csv文件对应一个头部
比如说,,
校长1,年龄:5,收入:1000,性别:男孩
标题2,电子邮件,something@gmail.com,年龄,20岁,性别,男孩
标题2,电子邮件,something@yahoo.com,年龄,20岁
第一类,年龄:5岁,收入:1000
所有标题为1的行都可以解析为csv文件:
年龄、金钱、性别
5,1000,小子
51000,零
假设每个日志中有3个头,那么我将把它们解析为3个csv文件
我试图编写一个mapreduce程序来解析这样一个大数据集
我的mapreduce程序将一个日志文件传送到映射器,解析逻辑在映射器中完成,并使用映射器写入csv文件。在我的程序中,不需要减速器
例如,当遇到已处理行的head1时,映射程序在解析其主体后写入head1.csv。键是head,值是解析后的body(例如,“51000,boy”是值)
但是,这个程序比我预期的要慢(一个小时大约有一万个日志,每个日志不超过1MB)。即使我使用了一个空映射器(我删除了解析逻辑,只将常量字符串写入csv文件),它仍然运行了大约一个小时
为什么这样的程序设计太慢,我该如何改进呢
非常感谢 你能分享
Mapper
代码吗?