- 浏览: 292531 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zh554275855:
1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定 ...
抽象类和接口的区别,使用场景 -
MeowPass:
[color=red][size=xx-large][alig ...
java 字符串split有很多坑,使用时请小心!! -
jayzc1234:
讲的很好 看头像还是个女的 真是牛逼
WEBX学习总结 -
wodexiang:
写的什么狗屎
jetty启动以及嵌入式启动 -
繁星水:
很好,感谢分享与总结,谢谢!
jetty启动以及嵌入式启动
分享聚合dump的是评价的数据库,由于数据量超大且经常超时所以进行了数据源的切换,即从数据库dump切换为云梯dump,整个工作就是由一个mr的job去云梯读取数据然后进行一系列转化最后输出数据到文件的过程。
对于MapReduce编程模型,网上有很多文章,自己去学习哈,在这里不再赘述啦~,此处就这次mr的代码进行讲解。
MR的核心一共三个类,Mapper,Reduce和Submitter,其余的都是做一些数据转换的类。
首先来看Mapper类:
Map类中map方法的分析:
Map类继承自MapReduceBase,并且它实现了Mapper接口,此接口是一个规范类型,它有4种形式的参数,分别用来指定map的输入key值类型、输入value值类型、输出key值类型和输出value值类型。mapper的输入数据类型由InputFormat控制,默认的输入格式是TextInputFormat,它会以(LongWritable,Text)键值对的方式加载数据。long值表示某一行在文件中的偏移量,Text对象则保存某一行的字符串内容。在本例中map的输入类型为<LongWritable,Text>,(其实map的输入key没啥作用,它表示在一行中的偏移量),在这个日常中需要输出<userId,淘单对象>这样的形式,因此输出的key值类型是LongWritable,输出的value值类型是IndexMatrixtaodanWriter(输出的淘单对象)。
实现此接口类还需要实现map方法,map方法会具体负责对输入进行操作,在本例中,map方法对输入的行以空格为单位进行切分,然后使用OutputCollect收集输出的<userId,IndexMatrixtaodanWriter>,OutputCollector 由 Hadoop 框架提供, 负责收集 Mapper 和 Reducer 的输出数据,实现 map 函数和 reduce 函数时,只需要简单地将其输出的 <key,value> 对往 OutputCollector 中一丢即可,剩余的事框架自会帮你处理好。
Reduce中reduce方法的分析:
Reduce类也是继承自MapReduceBase的,需要实现Reducer接口。Reduce类以map的输出作为输入,因此Reduce的输入类型是<userId,IndexMatrixtaodanWriter>。而Reduce的输出用户id和对应的淘单对象,因此,它的输出类型是<LongWritable,Text>。Reduce类也要实现reduce方法,在此方法中,reduce函数将输入的key值作为输出的key值,然后将获得多个value值加起来,作为输出的值。
提交任务,运行:
main方法是整个mr任务的入口,在 Hadoop 可以通过一个 JobConf 对象设置如何运行这个 job,此处定义了job的名字,map输出的 key 的类型是 LongWritable, value 的类型是 IndexMatrixtaodanWriter, 指定FullIndexMatrixtaodanReduce作为 Reducer 类, 任务的输入路径和输出路径由命令行参数指定,这样 job 运行时会处理输入路径下的所有文件,并将计算结果写到输出路径下。
然后将 JobConf 对象作为参数,调用 JobClient 的 runJob, 开始执行这个计算任务。
如果作业中涉及到对不同的数据集进行连接(join),即定义多个不同的数据输入源时,可用MultipleInputs.addInputPath(JobConf conf, InputPath, TextInputFormat.class, Mapper.class) 这个方法原理是多个数据源就采用多个map来处理,以上任务中只涉及一个数据源,没有多表join,故可用 FileInputFormat.addInputPath(conf, new Path(inputPath));
对于MapReduce编程模型,网上有很多文章,自己去学习哈,在这里不再赘述啦~,此处就这次mr的代码进行讲解。
MR的核心一共三个类,Mapper,Reduce和Submitter,其余的都是做一些数据转换的类。
首先来看Mapper类:
Map类中map方法的分析:
public class FullIndexMatrixtaodanMapper extends MapReduceBase implements Mapper<Writable, Text, LongWritable, IndexMatrixtaodanWriter> { private final LongWritable auctionId = new LongWritable(0); private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void map(Writable key, Text value, OutputCollector<LongWritable, IndexMatrixtaodanWriter> output, Reporter reporter) throws IOException { String line = value.toString(); // 评价表 String[] records = this.splitRecords(line); long userId = NumberUtils.toLong(records[1], 0l); if (userId == 0l) { return; } auctionId.set(userId); IndexMatrixtaodanWriter record = this.buildFeedToTaodanWriter(records); if (null != record) { output.collect(auctionId, record); } } }
Map类继承自MapReduceBase,并且它实现了Mapper接口,此接口是一个规范类型,它有4种形式的参数,分别用来指定map的输入key值类型、输入value值类型、输出key值类型和输出value值类型。mapper的输入数据类型由InputFormat控制,默认的输入格式是TextInputFormat,它会以(LongWritable,Text)键值对的方式加载数据。long值表示某一行在文件中的偏移量,Text对象则保存某一行的字符串内容。在本例中map的输入类型为<LongWritable,Text>,(其实map的输入key没啥作用,它表示在一行中的偏移量),在这个日常中需要输出<userId,淘单对象>这样的形式,因此输出的key值类型是LongWritable,输出的value值类型是IndexMatrixtaodanWriter(输出的淘单对象)。
实现此接口类还需要实现map方法,map方法会具体负责对输入进行操作,在本例中,map方法对输入的行以空格为单位进行切分,然后使用OutputCollect收集输出的<userId,IndexMatrixtaodanWriter>,OutputCollector 由 Hadoop 框架提供, 负责收集 Mapper 和 Reducer 的输出数据,实现 map 函数和 reduce 函数时,只需要简单地将其输出的 <key,value> 对往 OutputCollector 中一丢即可,剩余的事框架自会帮你处理好。
Reduce中reduce方法的分析:
public class FullIndexMatrixtaodanReduce extends MapReduceBase implements Reducer<LongWritable, IndexMatrixtaodanWriter, Text, Text> { private final Text outContent = new Text(); @Override public void reduce(LongWritable key, Iterator<IndexMatrixtaodanWriter> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { String rowIndex = null; while (values.hasNext()) { IndexMatrixtaodanWriter taodanWriter = values.next(); MatrixtaodanSearchSchemaDo taodanSchemaDo = adaptoTaodanSchemaDO(taodanWriter); try { rowIndex = taodanSchemaDo.unmarshall(); outContent.set(rowIndex); output.collect(null, outContent); } catch (MarshallRateException e) { } } } }
Reduce类也是继承自MapReduceBase的,需要实现Reducer接口。Reduce类以map的输出作为输入,因此Reduce的输入类型是<userId,IndexMatrixtaodanWriter>。而Reduce的输出用户id和对应的淘单对象,因此,它的输出类型是<LongWritable,Text>。Reduce类也要实现reduce方法,在此方法中,reduce函数将输入的key值作为输出的key值,然后将获得多个value值加起来,作为输出的值。
提交任务,运行:
public class FullIndexTaodanJobSubmitter { public static void main(String[] args) throws Exception { String jobName = JOB_NAME_FULLINDEX_MATRIXTAODAN; // 任务结束后,时间文件路径放在数据文件路径中,文件名为tsearcher.ok,内容为yyyyMMddHHmmss JobConf conf = new JobConf(FullIndexTaodanJobSubmitter.class); conf.setJobName(jobName); // 中间结果输出格式 默认和output一致 conf.setMapOutputKeyClass(LongWritable.class); conf.setMapOutputValueClass(IndexMatrixtaodanWriter.class); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(Text.class); conf.setReducerClass(FullIndexMatrixtaodanReduce.class); // 重新分配reduce任务数 90 conf.setNumReduceTasks(FULL_INDEX_REDUCE_COUNT); // reduce 最后输出结果格式。 conf.setOutputFormat(TextOutputFormat.class); // 评价数据源mapper MultipleInputs.addInputPath(conf, new Path(args[0]), TextInputFormat.class, FullIndexMatrixtaodanMapper.class); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } }
main方法是整个mr任务的入口,在 Hadoop 可以通过一个 JobConf 对象设置如何运行这个 job,此处定义了job的名字,map输出的 key 的类型是 LongWritable, value 的类型是 IndexMatrixtaodanWriter, 指定FullIndexMatrixtaodanReduce作为 Reducer 类, 任务的输入路径和输出路径由命令行参数指定,这样 job 运行时会处理输入路径下的所有文件,并将计算结果写到输出路径下。
然后将 JobConf 对象作为参数,调用 JobClient 的 runJob, 开始执行这个计算任务。
如果作业中涉及到对不同的数据集进行连接(join),即定义多个不同的数据输入源时,可用MultipleInputs.addInputPath(JobConf conf, InputPath, TextInputFormat.class, Mapper.class) 这个方法原理是多个数据源就采用多个map来处理,以上任务中只涉及一个数据源,没有多表join,故可用 FileInputFormat.addInputPath(conf, new Path(inputPath));
发表评论
-
多线程重要方法的使用
2013-09-21 22:08 1434首先讲一下进程和线程的区别: 进程:每个进程都有 ... -
jetty启动以及嵌入式启动
2013-08-18 21:47 25112首先得下载jetty http:/ ... -
iBATIS 对 SQL 语句的解析过程
2013-07-01 22:32 2869总体来说 iBATIS 的系统 ... -
最容易被忽视的基础异常
2013-04-19 15:23 0result = getShopGroupDOList(req ... -
用java处理事务
2013-03-15 09:58 993[size=medium]数据库的事务平时很少用到,只有评价线 ... -
servlet的单例多线程
2013-03-13 17:19 4152因为我们平时编程用到了servlet,而servlet的容器默 ... -
泛型的几个注意点!
2013-03-03 20:45 5275[size=medium]上周代码里碰 ... -
hive的join操作
2013-01-28 15:43 3115Join的语法规则: join_table: tabl ... -
记录下执行MapReduce的过程
2013-01-08 14:37 1323在把把代码迁移到淘单 ... -
hive原理(未完。。)
2013-01-06 22:46 1941hive就是一个将hiveql(其实是sql的子集或者说一点点 ... -
java 字符串split有很多坑,使用时请小心!!
2012-12-19 11:13 84214System.out.println(":ab: ... -
开启mapReduce
2012-12-18 10:53 1080用最简短的语言解释MapReduce: We wa ... -
SimpleDateFormat多线程问题
2012-12-12 11:04 968之前在写控制双12开关的函数时遇到了SimpleDateFor ... -
删除单条分享理由的日常总结
2012-08-15 14:32 1082上周总算把这个简单蕴 ... -
Apache 中RewriteRule 规则参数
2012-08-15 11:33 2011Apache 中RewriteRule 规则 ... -
Memcached installation under Windows and Java client calls
2012-07-23 00:42 12781、What is Memcached? Free & ... -
WEBX学习总结
2012-07-15 22:51 16299把对webx的学习总结搬到iteye上来 一、 WEBX框架的 ... -
webx框架之RundataService
2012-07-12 22:37 1347之前对webx的学习都是有关响应和处理请求的流程和源码实现,配 ... -
一个简单的test
2012-06-25 21:46 1025public class UrlTest { publ ... -
java.io学习总结
2012-06-18 00:33 9629我将按照基类的顺序:InputStream、OutPutStr ...
相关推荐
HBase在淘宝主搜索的Dump中的性能调优
DumpTool主要用来在用户机器上对目标进程生成dump文件,定位“卡死”、Crash等问题。 (1)MiniDump: 表示生成一个包含必要信息的dump文件,文件大小约200-500k,具体Flag =MiniDumpNormal|...
Dump文件编辑中文版 分析DUMP文件数据 修改数据
dump转换到txt文件
GDB之在线调试与Coredump分析,通过gdb一步步分析coredump文件。
dumptxt互转
C++ windows工程中 简单生成 dump文件,以便问题定位
有关weblogic dump的介绍,辅助监控weblogic性能
dump_src.js是原版的(网上找的)回弹出一个页面显示调试 显示效果比较好,但是比较卡(对象成员太多的情况),有的环境不适合弹出页面. 示例: dump(变量); dump.js 是我修改的,返回一个字符串(类似于php的dump) 示例: ...
Dump文件转txt
Dump转txt.exe工具
DumpTxt互转工具
dump命令用于备份文件系统 ,dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。 语法格式:dump [参数] 常用参数: -0123456789 备份的层级 -b 指定区块的大小,单位为KB ...
通过heapdump工具分析服务器堆分配问题
高通core dump解析工具。仅自己上传做个备份。
c++捕获内存相关的错误,生成dump文件
使用方法如下: ...python native_heapdump_viewer.py --symbols symbols 00.txt >00.log python native_heapdump_viewer.py --symbols symbols 01.txt >01.log 对比00.log和01.log,查看内存增长的点
如果说要讲dump的原理,那么我们最简单的办法就是自己写一个象LordPE那样的dump程序。下面我就来详细说明一下,一个dump程序是如何工作的,如何把内存中的数据保存到文件中的。 对于dump来说,他的英文翻译就是...
Linux Core Dump 权威书籍
用于分析dump文件,很好用的一款内存分析工具,可以用来分析OOM等问题