- 浏览: 295763 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1477首先讲一下进程和线程的区别: 进程:每个进程都有 ... -
jetty启动以及嵌入式启动
2013-08-18 21:47 25185首先得下载jetty http:/ ... -
iBATIS 对 SQL 语句的解析过程
2013-07-01 22:32 2958总体来说 iBATIS 的系统 ... -
最容易被忽视的基础异常
2013-04-19 15:23 0result = getShopGroupDOList(req ... -
用java处理事务
2013-03-15 09:58 1040[size=medium]数据库的事务平时很少用到,只有评价线 ... -
servlet的单例多线程
2013-03-13 17:19 4196因为我们平时编程用到了servlet,而servlet的容器默 ... -
泛型的几个注意点!
2013-03-03 20:45 5324[size=medium]上周代码里碰 ... -
hive的join操作
2013-01-28 15:43 3180Join的语法规则: join_table: tabl ... -
记录下执行MapReduce的过程
2013-01-08 14:37 1384在把把代码迁移到淘单 ... -
hive原理(未完。。)
2013-01-06 22:46 1982hive就是一个将hiveql(其实是sql的子集或者说一点点 ... -
java 字符串split有很多坑,使用时请小心!!
2012-12-19 11:13 84363System.out.println(":ab: ... -
开启mapReduce
2012-12-18 10:53 1127用最简短的语言解释MapReduce: We wa ... -
SimpleDateFormat多线程问题
2012-12-12 11:04 1035之前在写控制双12开关的函数时遇到了SimpleDateFor ... -
删除单条分享理由的日常总结
2012-08-15 14:32 1125上周总算把这个简单蕴 ... -
Apache 中RewriteRule 规则参数
2012-08-15 11:33 2043Apache 中RewriteRule 规则 ... -
Memcached installation under Windows and Java client calls
2012-07-23 00:42 13361、What is Memcached? Free & ... -
WEBX学习总结
2012-07-15 22:51 16400把对webx的学习总结搬到iteye上来 一、 WEBX框架的 ... -
webx框架之RundataService
2012-07-12 22:37 1387之前对webx的学习都是有关响应和处理请求的流程和源码实现,配 ... -
一个简单的test
2012-06-25 21:46 1066public class UrlTest { publ ... -
java.io学习总结
2012-06-18 00:33 9682我将按照基类的顺序:InputStream、OutPutStr ...
相关推荐
DumpTool主要用来在用户机器上对目标进程生成dump文件,定位“卡死”、Crash等问题。 (1)MiniDump: 表示生成一个包含必要信息的dump文件,文件大小约200-500k,具体Flag =MiniDumpNormal|...
标题 "dump1090-win.1.10.3010.14_dump1090win_dump1090_eastixg_" 指的是一个针对Windows平台的dump1090软件的特定版本。这个软件主要用于接收和处理航空雷达数据,特别是与RTL-SDR(低成本软件定义无线电)设备...
MTK(MediaTek)系统DUMP之Crash-8.0.1工具是专为基于MediaTek芯片的Android设备设计的故障排查和日志收集工具。这个工具主要用于当设备遇到崩溃或异常情况时,帮助开发者或者技术人员分析并解决系统问题。在Android...
标题中的“dumptxt转换工具”指的是一个程序或软件,其主要功能是将特定格式的“dump”文件转换成常见的文本文件(txt)。在IT领域,dump文件通常是指系统崩溃时产生的内存转储,或者数据库的备份文件,它们包含了...
现在,我们来详细讲解如何在C++ Windows工程中生成dump文件。 首先,我们需要包含相应的头文件。在`main.cpp`中,引入`windows.h`和`dbghelp.h`,这两个头文件分别提供了Windows API和用于处理dump文件的API: ```...
C++ 自动dump,也称为自动崩溃转储(Automatic Dump),是编程中一种常见的调试技术。当应用程序出现异常或者崩溃时,系统会自动保存当前进程的状态,包括内存映射、堆栈信息、线程状态等,形成一个dump文件。这个...
在WebLogic的日常运维中,监控和问题排查是非常重要的环节,而dump文件是分析WebLogic运行情况、排查问题的有力工具之一。本文档将围绕WebLogic dump进行详细介绍,并辅助监控WebLogic的性能。 ### 1. WebLogic监控...
在Java应用程序中,内存管理是性能优化的关键环节。当遇到应用程序运行缓慢,频繁出现Full GC,甚至出现OutOfMemoryError等问题时,我们...正确使用heapdump工具和相关的分析资源,是每个Java开发者必备的技能之一。
本篇文章主要针对“高通core dump解析工具”进行详细讲解。 首先,我们需要理解“高通”在这个场景下可能指的是高通公司的芯片或平台,因为高通是全球知名的半导体制造商,尤其在移动通信领域有着广泛的影响。其...
Dump文件是一种用于记录系统或应用程序在异常崩溃时内存状态的文件,它包含了程序运行时的内存快照,通常用于故障排查和调试。将Dump文件转换为txt文本文件可以帮助开发者更方便地阅读和分析这些数据,寻找可能导致...
为了解决这些问题,开发者通常需要借助调试工具,其中一种常用的方法是生成Dump文件。Dump文件可以记录程序崩溃时的内存状态,包括堆栈信息、线程状态、内存分配等,帮助开发者定位问题所在。 "C++ 生成Dump文件"是...
在C++编程中,捕获内存相关错误并生成dump文件是一项关键的技术,它能帮助开发者在程序崩溃或出现异常时分析问题原因。"DUMP_C++_dump_"这个标题暗示了我们将讨论如何在C++中处理内存错误并创建内存转储(dump)文件...
在IBM AIX操作系统环境下,Java应用服务器可能会遇到各种运行时问题,这时系统会生成dump文件以供诊断。"AIX dump分析工具"是专门用于解析和理解这些dump文件的工具,帮助管理员识别并解决Java应用服务器的问题。...
IBM分析dump文件工具是针对IBM软件系统中出现的问题或异常情况的一种诊断手段。在IBM的众多产品线中,如DB2数据库、WebSphere应用服务器、z/OS操作系统等,都有可能产生dump文件,这些文件记录了系统运行时的内存...
【标题】:heapdump-tool工具 【正文】: 在IT领域,内存管理是优化系统性能的关键环节,尤其是在Java应用程序中。Heapdump-tool工具是专为Java开发者设计的,用于生成和分析堆转储(Heap Dump)文件的强大工具。...
在IT行业中,dump文件是一种常见的数据转储格式,通常用于记录系统或应用程序的内存状态,以便于调试和故障排查。本文将深入探讨dump文件、如何使用对比软件进行分析以及与IC卡相关的技术。 首先,我们需要了解dump...
在IT行业中,尤其是在移动设备和嵌入式系统的故障排查领域,ramdump是一个至关重要的概念。ramdump-tools是一款针对高通方案设备的专业宕机本地ramdump分析工具,它提供了比高通在线宕机分析工具qcap更为强大和便捷...
### Linux下生成Core Dump详解 #### 一、Core Dump简介 在Linux环境下,当一个程序因为某种原因(如段错误)而崩溃时,系统可以自动为该程序创建一个名为“core dump”的文件。这个文件包含了程序崩溃时内存的快照...
Dump文件编辑中文版 分析DUMP文件数据 修改数据
在Windows操作系统中,手工抓取WebSphere Application Server (WAS) 的dump文件是解决系统异常、性能问题或诊断故障的重要步骤。以下是一个详尽的指南,涵盖了如何在Windows环境下进行这个过程。 首先,理解什么是...