Hadoop实战实例

2019-03-28 14:03|来源: 网络

Hadoop 是Google  MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。

一、概论

    作为Hadoop程序员,他要做的事情就是:
    1、定义Mapper,处理输入的Key-Value对,输出中间结果。
    2、定义Reducer,可选,对中间结果进行规约,输出最终结果。
    3、定义InputFormat 和OutputFormat,可选,InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用,不定义时默认为String。
    4、定义main函数,在里面定义一个Job并运行它。
    

    然后的事情就交给系统了。
    1.基本概念:Hadoop的HDFS实现了google的GFS文件系统,NameNode作为文件系统的负责调度运行在master,DataNode运行在每个机器上。同时Hadoop实现了Google的MapReduce,JobTracker作为MapReduce的总调度运行在master,TaskTracker则运行在每个机器上执行Task。

    2.main()函数,创建JobConf,定义Mapper,Reducer,Input/OutputFormat 和输入输出文件目录,最后把Job提交給JobTracker,等待Job结束。

    3.JobTracker,创建一个InputFormat的实例,调用它的getSplits()方法,把输入目录的文件拆分成FileSplist作为Mapper task 的输入,生成Mapper task加入Queue。

    4.TaskTracker 向 JobTracker索求下一个Map/Reduce。
      
     Mapper Task先从InputFormat创建RecordReader,循环读入FileSplits的内容生成Key与Value,传给Mapper函数,处理完后中间结果写成SequenceFile.
     Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容(33%),Sort/Merge后(66%),执行Reducer函数,最后按照OutputFormat写入结果目录。 

      TaskTracker 每10秒向JobTracker报告一次运行情况,每完成一个Task10秒后,就会向JobTracker索求下一个Task。

      Nutch项目的全部数据处理都构建在Hadoop之上,详见Scalable Computing with Hadoop


二、程序员编写的代码

 (可以查看hadoop-examples-0.20.203.0.jar,里面也有一个类grep)

    我们做一个简单的分布式的Grep,简单对输入文件进行逐行的正则匹配,如果符合就将该行打印到输出文件。因为是简单的全部输出,所以我们只要写Mapper函数,不用写Reducer函数,也不用定义Input/Output Format。

[java]
  1. package  demo.hadoop  
  2. public   class  HadoopGrep {  
  3.      public   static   class  RegMapper  extends  MapReduceBase  implements  Mapper {  
  4.                private  Pattern pattern;  
  5.                public   void  configure(JobConf job) {  
  6.                          pattern  =  Pattern.compile(job.get( " mapred.mapper.regex " ));  
  7.               }  
  8.               public   void  map(WritableComparable key, Writable value, OutputCollector output, Reporter reporter)  
  9.                      throws  IOException {  
  10.                          String text  =  ((Text) value).toString();  
  11.                          Matcher matcher  =  pattern.matcher(text);  
  12.                        if  (matcher.find()) {  
  13.                         output.collect(key, value);  
  14.              }  
  15.     }  
  16.  }  
  17.   
  18.   private  HadoopGrep () {  
  19.  }  //  singleton    
  20.   
  21. public   static   void  main(String[] args)  throws  Exception {  
  22.   JobConf grepJob  =   new  JobConf(HadoopGrep. class );  
  23.   grepJob.setJobName( " grep-search " );  
  24.   grepJob.set( " mapred.mapper.regex " , args[ 2 ]);  
  25.   
  26.   grepJob.setInputPath( new  Path(args[ 0 ]));  
  27.   grepJob.setOutputPath( new  Path(args[ 1 ]));  
  28.   grepJob.setMapperClass(RegMapper. class );  
  29.   grepJob.setReducerClass(IdentityReducer. class );  
  30.   JobClient.runJob(grepJob);  
  31.  }  
  32. }  

RegMapper类的configure()函数接受由main函数传入的查找字符串,map() 函数进行正则匹配,key是行数,value是文件行的内容,符合的文件行放入中间结果。

main()函数定义由命令行参数传入的输入输出目录和匹配字符串,Mapper函数为RegMapper类,Reduce函数是什么都不做,直接把中间结果输出到最终结果的的IdentityReducer类,运行Job。

整个代码非常简单,丝毫没有分布式编程的任何细节。

相关问答

更多
  • 邮件已经发出,过几分钟后记得查收(可能在垃圾箱里边),收到后觉得还算满意请点下边的采纳通知我。如果10分钟后还没收到,请直接在本问题里追问我,我会再次发送。 最后如果在采纳之余能加点分数,那就OK!
  • 2学习笔记系列学习比较Spring In Action学习笔记程序清单1.3在Spring中配置Hello Wo... 程序清单1.10 KnightApp.java(运行Knight例子) package com.springinaction.chapter0
  • common:是为hadoop其他子项目提供支持的常用工具,它主要包括FileSystem、RPC和串行化库。它们为在廉价硬件上搭建云计算环境提供基本的服务,并会为运行在该平台上的软件开发提供所需的API Avro:Avro是用于数据序列化的系统 MapReduce:是一种编程模型,用于大规模数据集(>1TB)的并行运算 HDFS:一个分布式文件系统 Chukwa:开源数据收集系统,用于监控和分析大型分布式系统的数据 Hive:最早是由Facebook设计的,一个建立在Hadoop基础之上的数据仓库,提供了 ...
  • 权威指南听说将太多理论,新手容易无法理解,而实战注重的是应用,可能不会涉及太多理论,对于新手来说可以有个直观的认识。所以推荐实战。至于其他两本没有听过,所以不知道
  • 其它的不清楚,可以到魔据,条件不错,很注重基础教育,真正做到为学生负责到底,其它的,说实在的真的不敢保证。刚开始有些枯燥,入门就好了,现在缺大数据人才,好好学会有前途。
  • 要是想好好深入学习的话,建议你都看一下,一本是讲理论的,一本更注重实战,做这个的,理论和实战是分不开的。大数据是很深的。入门的基础也有好多的。多看一些总归是没坏处的。柠檬学院大数据。
  • 这一份视频应该只能花钱购买
  • 基于Hadoop平台的云存储应用实践

    http://cio.itxinwen.com/case_studies/2012/0327/402100.html

    云计算(Cloud Computing)是一种基于因特网的超级计算模式,在远程的数据中心里,成千上万台电脑和服务器连接成一片电脑云。用户通过电脑、笔记本、手机等方式接人数据中心,按自己的需求进行运算。目前,对于云计算仍没有普遍一致的定义。结合上述定义,可以总结出云计算的一些本质特征,即分布式计算和存储特性、高扩展性、 ...

  • 第1篇Hadoop技术篇 第1章初识Hadoop 1.1Hadoop简介 1.1.1Hadoop的起源 1.1.2什么是Hadoop 1.1.3Hadoop的核心技术是Google核心技术的开源实现 1.1.4Hadoop的功能与优点 1.1.5Hadoop的应用现状和发展趋势 1.2Hadoop的体系结构 1.2.1HDFS的体系结构 1.2.2MapReduce的体系结构 1.3Hadoop与分布式开发 1.4Hadoop的数据管理 1.4.1HDFS的数据管理 1.4.2HBase的数据管理 1.4. ...