`
sdh88hf
  • 浏览: 67560 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

Web开发学习10 hadoop实战

 
阅读更多
前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日志做分析时那hadoop就是一把好手了,下面简单介绍下用java调用hadoop分布式计算的例子

首先我们需要做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盘查看


  • 大小: 9.9 KB
  • 大小: 62.2 KB
  • 大小: 70.3 KB
分享到:
评论

相关推荐

    Hadoop实战中文版

    《Hadoop实战》作为云计算所青睐的分布式架构,Hadoop是一个用Java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。《Hadoop实战》分为3个部分,深入浅出地...

    Hadoop实战中文版.PDF

    《Hadoop实战》分为3个部分,深入浅出地介绍了Hadoop框架、编写和运行Hadoop数据处理程序所需的实践技能及Hadoop之外更大的生态系统。 《Hadoop实战》适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读...

    Hadoop大数据开发实战-PPT.rar

    Hadoop大数据开发实战-PPT.rar

    Hadoop实战(陆嘉恒)译

    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实战

    第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5.1 动手扩展一个简单...

    基于hadoop的云盘系统

    毕业设计,基于hadoop的云盘系统,技术选型springboot+mysql+layui+hdfs+hbase(未完成)

    Hadoop权威指南 第二版(中文版)

    Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何构建Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;Hive简介;ZooKeeper简介;开源工具Sqoop,最后还...

    Hadoop权威指南(中文版)2015上传.rar

    第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig ...

    实验项目 实战 HDFS 实验报告

    一、实验目的 1. 理解 HDFS 体系架构。 2. 理解 HDFS 文件存储...4. 在 Hadoop 集群主节点上搭建 HDFS 开发环境 Eclipse。 5. 使用 HDFS Java API 编写 HDFS 文件操作程序,实现上传本地文件到 HDFS 的功能。。。。。

    一个基于hadoop的大数据实战.zip

    包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...

    开源企业级大数据开发经典实战项目新闻实时日志分析系统(视频+完整代码+文档免费下载)

    本课程基于企业大数据经典案例项目(大数据日志分析),全方位、全流程讲解 大数据项目的业务分析、技术选型、架构设计、集群规划、安装部署、整合继承与开发和web可视化交互设计。 不管是零基础的大数据技术爱好者...

    Storm流计算项目:1号店电商实时数据分析系统-35.项目3-非跳出UV-Web端Highcharts图表开发.pptx

    17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...

    Hbase+Spring boot实战分布式文件存储

    实战开发通过jmx获取HBase运行时数据,监控集群状态 5-1 HBase备份与恢复 5-2 HBase监控简介 5-3 Hadoop JMX监控实战 5-4 HBase JMX监控实战 第6章 Phoenix & Sqoop 对HBase业务应用过程中常用到的第三方开源工具...

    Storm流计算项目:1号店电商实时数据分析系统-08.storm-kafka 详解和实战案例.pptx

    17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...

    Storm流计算项目:1号店电商实时数据分析系统-20.项目1-地区销售额-Web端完善和细节优化.pptx

    17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...

    Storm流计算项目:1号店电商实时数据分析系统-07.Kafka Java API 简单开发测试.pptx

    17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...

    2020最全Kafka教程合集(笔记+视频).rar

    本人在北美刚刚毕业,目前面试的几家大厂包括小公司在面试中都频繁的问道kafka这个技术,作为大数据开发或者java全栈的开发者来说,2020年很有必要系统的学习一下kafka. 1.[全面][Kafka2.11][jdk1.8][ZooKeeper3.4.6...

    1号店电商实时数据分析系统-19.项目1-地区销售额-HighCharts图表开发二及jquery运用.pptx

    17.项目1-地区销售额-HighCharts图表开发一及Web端架构设计 18.项目1-地区销售额-HTTP长链接实现实时推送 19.项目1-地区销售额-HighCharts图表开发二及jquery运用 20.项目1-地区销售额-Web端完善和细节优化 21.项目1...

Global site tag (gtag.js) - Google Analytics