- 浏览: 69595 次
- 性别:
- 来自: 绍兴
最新评论
前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日志做分析时那hadoop就是一把好手了,下面简单介绍下用java调用hadoop分布式计算的例子
首先我们需要做hadoop配置
这里面的配置项是根据服务端hadoop的配置来定的,总之要能连接的上hadoop
然后提供获取hdsf文件系统的方法
FileSysem是hdfs的核心类,封装了很多文件处理的方法比如我们要把我们的日志文件上传到hdfs
执行完成后在eclipse hadoop视图中就能看到对应的文件
然后我们来看下文件的内容,里面都是用户的操作记录,我们要做的任务是把操作日志中用户发送消息的消息内容提取出来,并且统计发送的次数
都知道hadoop是用mapreduce的方式来计算的,那就先来看看这两块代码
代码还是非常简洁的,mapper只做数据的解析,把日志数据进行拆分,索取需要的数据,reducer则做计算操作,最后输出我们想要的结果,我们要做的就是告诉hadoop输入输出的参数类型
然后再来看看如果执行这段mapreduce代码
是以单个job的方式,设置mapper类 reducer类,数据源来完成一个计算,把生成结果保存到hdfs的out/hellowrold下,最后我们把这个结果文件夹保存到我们本地D盘查看
首先我们需要做hadoop配置
public static Configuration getConf(){ Configuration conf = new Configuration(); conf.set("fs.default.name", "hdfs://192.168.217.129:9100"); conf.set("mapred.job.tracker", "192.168.217.129:9101"); return conf; }
这里面的配置项是根据服务端hadoop的配置来定的,总之要能连接的上hadoop
然后提供获取hdsf文件系统的方法
public static FileSystem getHdfs(){ if(hdfs != null){ return hdfs; } try { hdfs = FileSystem.get(getConf()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return hdfs; }
FileSysem是hdfs的核心类,封装了很多文件处理的方法比如我们要把我们的日志文件上传到hdfs
getHdfs().copyFromLocalFile(new Path("D://op.log"), new Path(getHdfs().getWorkingDirectory().toString() + "/input/op.log"));
执行完成后在eclipse hadoop视图中就能看到对应的文件
然后我们来看下文件的内容,里面都是用户的操作记录,我们要做的任务是把操作日志中用户发送消息的消息内容提取出来,并且统计发送的次数
都知道hadoop是用mapreduce的方式来计算的,那就先来看看这两块代码
/** * 映射器 * 用于将我们的数据进行预处理 */ public static class MyMapper extends Mapper<LongWritable, Text, Text, Text>{ @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //获取单行数据 String str = value.toString(); String [] arr = str.split("\\|"); if("/account!sendMessage.action".equals(arr[5])) //把用户名作为key 操作数据作为值输出 context.write(new Text(arr[1]), new Text(","+arr[6])); } } /** * 处理器 * 用于将mapper预处理的数据记录进行业务计算,然后输出 */ public static class MyReducer extends Reducer<Text, Text, Text, Text>{ @Override //每个key都会调用这个reduce方法 values参数是用户的操作数据的集合, //hadoop会自动把相同key的values用集合的方式存储,一起穿个reduce处理 protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { int i = 0; for (Text v : values) { //统计用户发送的次数 i ++; context.write(new Text(key), new Text(v)); } context.write(new Text(key), new Text(i+"次发信息")); } }
代码还是非常简洁的,mapper只做数据的解析,把日志数据进行拆分,索取需要的数据,reducer则做计算操作,最后输出我们想要的结果,我们要做的就是告诉hadoop输入输出的参数类型
然后再来看看如果执行这段mapreduce代码
public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException { System.setProperty("hadoop.home.dir", "D:/development/hadoop-2.2.0"); //getHdfs().copyFromLocalFile(new Path("D://op.log"), new Path(getHdfs().getWorkingDirectory().toString() + "/input/op.log")); Job job = new Job(getConf(),"job 1"); job.setJarByClass(JobToSomeThing.class); job.setMapperClass(MyMapper.class); job.setReducerClass(MyReducer.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, getHdfsPath("input/op*.log")); String outFileExt = "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); FileOutputFormat.setOutputPath(job, getHdfsPath("out/helloworld"+outFileExt)); System.out.println(job.waitForCompletion(true)); getHdfs().copyToLocalFile(getHdfsPath("out/helloworld"+outFileExt), new Path("D://helloworld"+outFileExt)); }
是以单个job的方式,设置mapper类 reducer类,数据源来完成一个计算,把生成结果保存到hdfs的out/hellowrold下,最后我们把这个结果文件夹保存到我们本地D盘查看
发表评论
-
Web开发学习13聊聊java反射
2016-07-12 18:41 765很喜欢一本叫《走出软件作坊》的书,其中有一句话让我较为深刻,“ ... -
Web开发学习12 浅谈设计模式
2016-07-01 13:33 1325在我刚接触 ... -
Web开发学习11 全局缓存控制
2015-10-12 14:27 746缓存用的好可以减少数据库的压力,在大并发的情况下极大的提升服务 ... -
Web开发学习(9)全局埋点
2015-07-27 11:10 2025埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 ... -
Web开发学习8Struts2基类封装
2015-07-24 12:03 710一个好的基类可以帮助开发者减少很多开发工作,像我这种爱偷懒的人 ... -
Web开发学习7按钮级别权限控制
2015-07-23 16:21 13354这个功能的思路是自己原创的,没看过其他例子,其实是在做之前网上 ... -
Web开发学习6添加liqiubase
2015-07-22 14:29 1466开发过程中经常碰到数据库更改的情况,在日常环境下如果每位开发人 ... -
浅列JavaEnum
2014-01-05 16:42 791enum Province{ ZHEJIANG,SHANGHA ... -
maven常用命令
2013-07-08 10:20 7921、创建普通Java项目: ... -
canvas绘制科赫雪花
2012-12-20 17:24 2162<html> <head> ... -
html5 audio与video方法属性事件概括
2012-12-20 14:46 1124play() 继续播放 pause() ... -
spring 整合mina
2012-12-20 11:48 1122首先定义自定义过滤器 <bean id=" ... -
Web开发学习(5)添加springsecurity应用
2011-12-14 15:00 965我学习公司这个架构多半就是为了把springsecurity搞 ... -
Web开发学习(4)添加spring应用
2011-12-14 14:45 798印象中似乎没做过不用spring的项目,因为它在web开发中的 ... -
Web开发学习(3)配置struts-tiles插件(附带json插件)
2011-12-05 15:22 2573struts的tiles插件是非常实用的,从某些方面可以很好的 ... -
使用线程删除导出临时文件
2011-12-01 16:33 2276项目支持大数据量导出e ... -
jQuery实现表格行点击选中复选框
2011-11-23 12:36 6008这个需求是在项目完成后客户提出的要求,看似简单但是还需要一点小 ... -
Web开发学习(2)配置convention插件
2011-11-04 10:28 1396注解的方式某些程度上能减少xml的配置量,个人感觉使程序更加清 ... -
Web开发学习(1)使用eclipse搭建maven项目
2011-10-20 10:04 5747首先用eclipse创建工程 ne ... -
数据库连接泛型基类创建
2011-06-30 11:49 1000记录 以便以后参考---- 基类代码 public cl ...
相关推荐
综上所述,本课程深入介绍了Hadoop在Web日志分析中的应用,从基本的日志概念到复杂的分布式日志收集和处理架构,为学员提供了一套完整的Hadoop实战知识体系。通过本课程的学习,学员可以掌握如何使用Hadoop系统进行...
【Hadoop大数据开发实战-PPT】是一份详细的教学资料,主要涵盖了Hadoop在大数据处理中的应用和开发技术。Hadoop是Apache基金会的一个开源项目,它为海量数据提供了分布式存储和计算的能力,是大数据领域的基石之一。...
根据提供的文件信息,“Hadoop实战中文版”这一标题与描述明确指出了本书的主题是围绕Hadoop的实际应用展开。Hadoop是一种能够处理大量数据的大规模分布式计算框架,它基于Google的MapReduce论文和Google文件系统...
《Hadoop开发、运维和调优实战》考试资料概述 Hadoop是一个开源的分布式计算框架,由Apache软件基金会维护,主要用于处理和存储大规模数据集。本资料主要涵盖了Hadoop的开发、运维和调优的相关知识,适合对Hadoop有...
在Java Web开发中,实战项目是提升技能的关键环节。"java web开发实战宝典 部分实战源码"提供了一系列的实际应用示例,帮助开发者深入理解并掌握...通过学习和实践这些源码,开发者可以提升其在Web开发中的综合能力。
【Hadoop Web 项目】是一个基于Hadoop生态系统构建的Web应用程序,旨在提供一个用户友好的界面,以便管理和监控Hadoop分布式文件系统(HDFS)以及MapReduce任务。在这个改进版中,开发团队引入了Ajax技术,以提升...
### Hadoop实战视频教程知识点概览 #### 一、Hadoop概述 1. **Hadoop简介**: - Hadoop是一种能够对大量数据进行分布式处理的软件框架。 - 它设计用于运行在由商用硬件构成的大规模集群上,也可以部署在云计算...
4. **Hadoop应用开发**:开发Hadoop应用通常涉及编写Map和Reduce函数,以及配置作业参数。Java是常见的编程语言,但也有如Hadoop Streaming和Pig、Hive等高级工具,它们允许使用Python、Perl等其他语言或SQL语法进行...
《王家林的云计算分布式大数据Hadoop实战高手之路》是一套全面且深入的教程,旨在帮助初学者和有经验的IT专业人士掌握Hadoop的核心技术和应用。这套教程包含了从基础到高级的多方面内容,覆盖了Hadoop的安装、配置、...
第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5.1 动手扩展一个简单...
J2SE(Java标准版)是大部分Java应用的基础,而J2EE(Java企业版)则适用于Web开发,适合处理和展示数据。J2ME(Java微型版)则用于移动设备的开发。 在环境配置方面,除了JDK的安装,还需要设置环境变量,以便系统...
总结来说,这个基于Hadoop的云盘系统是一个综合性的项目,涉及后端开发、数据库管理、分布式存储和前端展示等多个方面。通过整合这些技术,系统可以实现高效、可靠的云存储服务,满足大规模用户对数据存储、分享和...
【描述】提供的链接指向了一个博客文章,虽然具体内容未给出,但可以推测博主可能分享了个人对Hadoop操作和开发的经验,包括可能的实战案例或技巧。 【标签】"源码"和"工具"表明内容可能涉及Hadoop的源代码分析和...