`
sdh88hf
  • 浏览: 69815 次
  • 性别: 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 实战 dev_02

    综上所述,本课程深入介绍了Hadoop在Web日志分析中的应用,从基本的日志概念到复杂的分布式日志收集和处理架构,为学员提供了一套完整的Hadoop实战知识体系。通过本课程的学习,学员可以掌握如何使用Hadoop系统进行...

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

    【Hadoop大数据开发实战-PPT】是一份详细的教学资料,主要涵盖了Hadoop在大数据处理中的应用和开发技术。Hadoop是Apache基金会的一个开源项目,它为海量数据提供了分布式存储和计算的能力,是大数据领域的基石之一。...

    Hadoop实战中文版

    根据提供的文件信息,“Hadoop实战中文版”这一标题与描述明确指出了本书的主题是围绕Hadoop的实际应用展开。Hadoop是一种能够处理大量数据的大规模分布式计算框架,它基于Google的MapReduce论文和Google文件系统...

    Hadoop开发、运维和调优实战考试资料.pdf

    《Hadoop开发、运维和调优实战》考试资料概述 Hadoop是一个开源的分布式计算框架,由Apache软件基金会维护,主要用于处理和存储大规模数据集。本资料主要涵盖了Hadoop的开发、运维和调优的相关知识,适合对Hadoop有...

    java web开发实战宝典 部分实战源码

    在Java Web开发中,实战项目是提升技能的关键环节。"java web开发实战宝典 部分实战源码"提供了一系列的实际应用示例,帮助开发者深入理解并掌握...通过学习和实践这些源码,开发者可以提升其在Web开发中的综合能力。

    hadoop web项目

    【Hadoop Web 项目】是一个基于Hadoop生态系统构建的Web应用程序,旨在提供一个用户友好的界面,以便管理和监控Hadoop分布式文件系统(HDFS)以及MapReduce任务。在这个改进版中,开发团队引入了Ajax技术,以提升...

    hadoop实战视频教程

    ### Hadoop实战视频教程知识点概览 #### 一、Hadoop概述 1. **Hadoop简介**: - Hadoop是一种能够对大量数据进行分布式处理的软件框架。 - 它设计用于运行在由商用硬件构成的大规模集群上,也可以部署在云计算...

    深入云计算:Hadoop应用开发实战详解 源代码

    4. **Hadoop应用开发**:开发Hadoop应用通常涉及编写Map和Reduce函数,以及配置作业参数。Java是常见的编程语言,但也有如Hadoop Streaming和Pig、Hive等高级工具,它们允许使用Python、Perl等其他语言或SQL语法进行...

    王家林的云计算分布式大数据Hadoop实战高手之路---从零开始Hadoop图文训练课程(第1-10讲).rar

    《王家林的云计算分布式大数据Hadoop实战高手之路》是一套全面且深入的教程,旨在帮助初学者和有经验的IT专业人士掌握Hadoop的核心技术和应用。这套教程包含了从基础到高级的多方面内容,覆盖了Hadoop的安装、配置、...

    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-北京尚学堂整理.pdf

    J2SE(Java标准版)是大部分Java应用的基础,而J2EE(Java企业版)则适用于Web开发,适合处理和展示数据。J2ME(Java微型版)则用于移动设备的开发。 在环境配置方面,除了JDK的安装,还需要设置环境变量,以便系统...

    基于hadoop的云盘系统

    总结来说,这个基于Hadoop的云盘系统是一个综合性的项目,涉及后端开发、数据库管理、分布式存储和前端展示等多个方面。通过整合这些技术,系统可以实现高效、可靠的云存储服务,满足大规模用户对数据存储、分享和...

    hadoop shell操作与程式开发

    【描述】提供的链接指向了一个博客文章,虽然具体内容未给出,但可以推测博主可能分享了个人对Hadoop操作和开发的经验,包括可能的实战案例或技巧。 【标签】"源码"和"工具"表明内容可能涉及Hadoop的源代码分析和...

Global site tag (gtag.js) - Google Analytics