`
sdh88hf
  • 浏览: 67804 次
  • 性别: 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 ...

    一个基于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...

    实验项目 实战 HDFS 实验报告

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

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

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

    c语言实战游戏cgame2.zip

    C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...

    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...

Global site tag (gtag.js) - Google Analytics