网赢中国专注大数据营销 [会员登录][免费注册][网赢中国下载]我要投稿|加入合伙人|设为首页|收藏|RSS
网赢中国是大数据营销代名词。
大数据营销
当前位置:网赢中国 > 行业资讯 > 技术文章 > 大数据营销技术文章 > Hadoop解析--MapReduce-Hadoop
Hadoop解析--MapReduce-Hadoop
编辑:许恕 发布时间: 2015-7-29    文章来源:CSDN博客
大数据营销

  从本篇博客开始咱们一起来详细了解Hadoop的每个部分,我们在上篇博客中介绍了 HDFS,MapReduce,MapReduce为了更有效率其实是建立在HDFS之上的,有了分布式的文件系统,我们就能在这个系统之上更有效率地进行分布式的计算,我们看看它是咱么实现更优秀的分布式计算。


  优势


  第一,大小限制


  因为HDFS对本地的文件大小做了限制,这样我们本地一个任务处理的量是有限的,虽然我们可以改变这个值,但是也为更好的执行任务打下了坚实的基础,分片的处理方式,不仅仅是分开,还有限制,这样的思想使我们欠缺的,分开仅仅是解决了问你,而限制,是在优化解决方案!


  第二,备份


  HDFS对所有的文件,都会进行备份,这样就会减少很多麻烦,我们以往对文件的备份还原一直是个头疼的问题,尤其是数据量上来之后,这件事情变得越来越不可控,而HDFS为计算数据做了备份,这样我们的失误率就会下降,在一台机器文件毁坏的情况下,不影响我们的计算,这就减少了查询日志的时间(相对传统数据库的备份策略)


  第三,本地计算


  MapReduce中,所有的计算,都是在本地完成,及时有计算需要外来数据,也是集合好后完成,这样保证了我们最高效的带宽利用,使我们对数据的处理能力随着集群数目的增大而线性增大。


  第四,预处理


  在计算的过程中,如果我们对数据的处理结果每次都要控制机进行汇总,和我们可以对计算出的数据,进行预处理,当然是预处理的效果好些,这样相当于减轻了控制机的压力,这种设计在前台js里也有涉及,我们通过js让客户机执行部分代码,减轻我们服务器的压力,这样的效果,自然是比较优秀的!


  第五,心跳


  在MapReduce过程中,心跳对我们的帮助也很大,它帮助我们维护计算的可靠性,帮助我们屏蔽一部分因机器故障造成的计算失败,相当于心跳是我们计算过程中基本的保证!


  原理


  那么mapreduce是怎么做的呢,我们看看这幅原理图:



  再看看一些细节上的图,帮我们这里了解下具体是怎么运行的:



  源码


  有了前面的认识,我们通过代码看看,我们要秉着一个原则,就是这是简单的分治法的应用,所以这一切都不复杂,map就是分治法的分,reduce就是分治法的治,将大问题打散成小问题,最后整合小问题的结果:


  map:


  [java] view plaincopyprint? public static class Map extends MapReduceBase implements


  Mapper {


  private final static IntWritable one = new IntWritable(1);


  private Text word = new Text();


  public void map(LongWritable key, Text value,


  OutputCollector output, Reporter reporter)


  throws IOException {


  String line = value.toString();


  StringTokenizer tokenizer = new StringTokenizer(line);


  while (tokenizer.hasMoreTokens()) {


  word.set(tokenizer.nextToken());


  output.collect(word, one);


  }


  }


  }


  reduce:


  [java] view plaincopyprint? public static class Reduce extends MapReduceBase implements


  Reducer {


  public void reduce(Text key, Iterator values,


  OutputCollector output, Reporter reporter)


  throws IOException {


  int sum = 0;


  while (values.hasNext()) {


  sum += values.next().get();


  }


  output.collect(key, new IntWritable(sum));


  }


  }


  任务执行的方法:


  [java] view plaincopyprint? public static void main(String[] args) throws Exception {


  JobConf conf = new JobConf(WordCount.class);


  conf.setJobName('wordcount');


  conf.setOutputKeyClass(Text.class);


  conf.setOutputValueClass(IntWritable.class);


  conf.setMapperClass(Map.class);


  conf.setCombinerClass(Reduce.class);


  conf.setReducerClass(Reduce.class);


  conf.setInputFormat(TextInputFormat.class);


  conf.setOutputFormat(TextOutputFormat.class);


  FileInputFormat.setInputPaths(conf, new Path(args[0]));


  FileOutputFormat.setOutputPath(conf, new Path(args[1]));


  JobClient.runJob(conf);


  }


  任务方法解析:


  首先讲解一下 Job 的 初始化过程 。 main 函数调用 Jobconf 类来对 MapReduce Job 进行初始化,然后调用 setJobName() 方法命名这个 Job 。对Job进行合理的命名有助于 更快 地找到Job,以便在JobTracker和Tasktracker的页面中对其进行 监视 。


  [java] view plaincopyprint? JobConf conf = new JobConf(WordCount. class ); conf.setJobName('wordcount' );


  接着设置Job输出结果的中key和value数据类型,因为结果是<单词,个数>,所以key设置为'Text'类型,相当于Java中String类型。Value设置为'IntWritable',相当于Java中的int类型。


  [java] view plaincopyprint? conf.setOutputKeyClass(Text.class );


  conf.setOutputValueClass(IntWritable.class );


  然后设置Job处理的Map(拆分)、Combiner(中间结果合并)以及Reduce(合并)的相关处理类。这里用Reduce类来进行Map产生的中间结果合并,避免给网络数据传输产生压力。


  [java] view plaincopyprint? conf.setMapperClass(Map.class );


  conf.setCombinerClass(Reduce.class );


  conf.setReducerClass(Reduce.class );


  接着就是调用setInputPath()和setOutputPath()设置输入输出路径。


  [java] view plaincopyprint? conf.setInputFormat(TextInputFormat.class );


  conf.setOutputFormat(TextOutputFormat.class );


  总结:


  任何技术都是一种思想的体现,而这个世界,我们最基本的一个算法就是分治法,这是我们拿在手里的一本百科全书,几乎可以解决我们80%的问题,而性能的问题尤其如此,我们经过了几百万年的演变,我们成为了地球上的强大智慧生物,我们本身就具有几百万年延续自己生命的强大竞争力,及我们几千年文明的积淀,我们现在遇到的问题,前人用文字书写在书上,我们一定可以找到,或者我们现在的生活,这个社会,也一定有这个问题的缩影!


大数据营销
编辑推荐
图片行业资讯
  • 雷军隔空喊话董明珠:格力 小米欢迎你
  • 杨元庆:Moto在华上市一周预定量超100万
  • 小米洪锋谈O2O布局:做商城不做具体服务
  • 盖茨向不知名实体捐赠15亿美元微软股票 持股降至3%
  • 刘强东:允许我获取数据 冰箱免费送给你
营销资讯搜索
大数据营销
推荐工具
    热点关注
    大数据营销
    大数据营销
    大数据营销
    大数据营销
     

    大数据营销之企业名录

    网络营销之邮件营销

    大数据营销之搜索采集系列

    大数据营销之QQ号采集

    大数据营销之QQ精准营销

    大数据营销之QQ消息群发

    大数据营销之空间助手

    大数据营销之QQ联盟

    大数据营销之QQ群助手
     
    设为首页 | 营销资讯 | 营销学院 | 营销宝典 | 本站动态 | 关于网赢中国 | 网站地图 | 网站RSS | 友情链接
    本站网络实名:网赢中国  国际域名:www.softav.com  版权所有 2004-2015  深圳爱网赢科技有限公司
    邮箱:web@softav.com 电话:+86-755-26010839(十八线) 传真:+86-755-26010838
    在线咨询:点击这里给我发消息 点击这里给我发消息 点击这里给我发消息  点击这里给我发消息  点击这里给我发消息

    深圳网络警
    察报警平台
    公共信息安
    全网络监察
    经营性网站
    备案信息
    不良信息
    举报中心
    中国文明网
    传播文明
    分享