- 浏览: 67804 次
- 性别:
- 来自: 绍兴
最新评论
前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日志做分析时那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 717很喜欢一本叫《走出软件作坊》的书,其中有一句话让我较为深刻,“ ... -
Web开发学习12 浅谈设计模式
2016-07-01 13:33 1282在我刚接触 ... -
Web开发学习11 全局缓存控制
2015-10-12 14:27 705缓存用的好可以减少数据库的压力,在大并发的情况下极大的提升服务 ... -
Web开发学习(9)全局埋点
2015-07-27 11:10 1958埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 ... -
Web开发学习8Struts2基类封装
2015-07-24 12:03 667一个好的基类可以帮助开发者减少很多开发工作,像我这种爱偷懒的人 ... -
Web开发学习7按钮级别权限控制
2015-07-23 16:21 13249这个功能的思路是自己原创的,没看过其他例子,其实是在做之前网上 ... -
Web开发学习6添加liqiubase
2015-07-22 14:29 1403开发过程中经常碰到数据库更改的情况,在日常环境下如果每位开发人 ... -
浅列JavaEnum
2014-01-05 16:42 748enum Province{ ZHEJIANG,SHANGHA ... -
maven常用命令
2013-07-08 10:20 7511、创建普通Java项目: ... -
canvas绘制科赫雪花
2012-12-20 17:24 2109<html> <head> ... -
html5 audio与video方法属性事件概括
2012-12-20 14:46 1062play() 继续播放 pause() ... -
spring 整合mina
2012-12-20 11:48 1072首先定义自定义过滤器 <bean id=" ... -
Web开发学习(5)添加springsecurity应用
2011-12-14 15:00 921我学习公司这个架构多半就是为了把springsecurity搞 ... -
Web开发学习(4)添加spring应用
2011-12-14 14:45 760印象中似乎没做过不用spring的项目,因为它在web开发中的 ... -
Web开发学习(3)配置struts-tiles插件(附带json插件)
2011-12-05 15:22 2515struts的tiles插件是非常实用的,从某些方面可以很好的 ... -
使用线程删除导出临时文件
2011-12-01 16:33 2219项目支持大数据量导出e ... -
jQuery实现表格行点击选中复选框
2011-11-23 12:36 5941这个需求是在项目完成后客户提出的要求,看似简单但是还需要一点小 ... -
Web开发学习(2)配置convention插件
2011-11-04 10:28 1347注解的方式某些程度上能减少xml的配置量,个人感觉使程序更加清 ... -
Web开发学习(1)使用eclipse搭建maven项目
2011-10-20 10:04 5695首先用eclipse创建工程 ne ... -
数据库连接泛型基类创建
2011-06-30 11:49 953记录 以便以后参考---- 基类代码 public cl ...
相关推荐
《Hadoop实战》作为云计算所青睐的分布式架构,Hadoop是一个用Java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。《Hadoop实战》分为3个部分,深入浅出地...
《Hadoop实战》分为3个部分,深入浅出地介绍了Hadoop框架、编写和运行Hadoop数据处理程序所需的实践技能及Hadoop之外更大的生态系统。 《Hadoop实战》适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读...
Hadoop大数据开发实战-PPT.rar
map侧过滤后在reduce侧联结5.3 创建一个Bloom filter5.3.1 Bloom filter做了什么5.3.2 实现一个Bloom filter5.3.3 Hadoop 0.20 以上版本的Bloom filter5.4 温故知新5.5 小结5.6 更多资源第6 章 编程实践6.1 开发...
第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5.1 动手扩展一个简单...
毕业设计,基于hadoop的云盘系统,技术选型springboot+mysql+layui+hdfs+hbase(未完成)
Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何构建Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;Hive简介;ZooKeeper简介;开源工具Sqoop,最后还...
第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig ...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
本课程基于企业大数据经典案例项目(大数据日志分析),全方位、全流程讲解 大数据项目的业务分析、技术选型、架构设计、集群规划、安装部署、整合继承与开发和web可视化交互设计。 不管是零基础的大数据技术爱好者...
17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...
实战开发通过jmx获取HBase运行时数据,监控集群状态 5-1 HBase备份与恢复 5-2 HBase监控简介 5-3 Hadoop JMX监控实战 5-4 HBase JMX监控实战 第6章 Phoenix & Sqoop 对HBase业务应用过程中常用到的第三方开源工具...
17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...
一、实验目的 1. 理解 HDFS 体系架构。 2. 理解 HDFS 文件存储...4. 在 Hadoop 集群主节点上搭建 HDFS 开发环境 Eclipse。 5. 使用 HDFS Java API 编写 HDFS 文件操作程序,实现上传本地文件到 HDFS 的功能。。。。。
17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...
17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...
本人在北美刚刚毕业,目前面试的几家大厂包括小公司在面试中都频繁的问道kafka这个技术,作为大数据开发或者java全栈的开发者来说,2020年很有必要系统的学习一下kafka. 1.[全面][Kafka2.11][jdk1.8][ZooKeeper3.4.6...