加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从HDFS和MapReduce两方面相识Hadoop

发布时间:2019-03-22 17:06:43 所属栏目:教程 来源:佚名
导读:简介 Hadoop 是一个可以或许对大量数据举办漫衍式处理赏罚的软件框架,框架最焦点的计划就是:HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计较。这篇文章就首要从 HDFS 和 MapReuce 两个大的方面睁开对 Hadoop 讲授,虽然

MapReduce 是一种编程模子,"Map(映射)"和"Reduce(归约)",是它们的首要头脑,我们通过 Map 函数来漫衍式处理赏罚输入数据,然后通过 Reduce 汇总功效并输出。我们编写一个 MapReduce 措施的一样平常步调是:

  1. 编写 map 措施。
  2. 编写 reduce 措施。
  3. 编写措施驱动。

本章节的方针

本节中我们将行使 MapReduce 框架来编写一个简朴的例子,这个例子是用来统计 HDFS 指定目次下的文件中每个字符呈现的次数并将统计功效输出到 HDFS 的指定目次中。点击此处获取本章节源代码。

Map 措施

我们担任 Mapper 类并重写了其 map 要领。Map 阶段输入的数据是从 hdfs 中拿到的原数据,输入的 key 为某一行起始位置相对付文件起始位置的偏移量,value 为该行的文本。​​输出的内容同样也为键-值对,这个时辰输出数据的键值对的范例可以本身指定,在本例中 key 是 Text 范例的,value 是 LongWritable 范例的。输出的功效将会被发送到 reduce 函数进一步处理赏罚。

  • 清单 14. Map 措施
  1. public class CharCountMapper extends Mapper< LongWritable, Text, Text, LongWritable> { 
  2.   @Override 
  3.   protected void map(LongWritable key, Text value, Context context) 
  4.   throws IOException, InterruptedException { 
  5.   // 将这一行文本转为字符数组 
  6.   char[] chars = value.toString().toCharArray(); 
  7.   for (char c : chars) { 
  8.   // 某个字符呈现一次,便输出其呈现 1 次。 
  9.   context.write(new Text(c + ""), new LongWritable(1)); 
  10.   } 
  11.   } 
  12.   } 

Reduce 措施

我们担任 Reducer 类并重写了其 reduce 要领。在本例中 Reduce 阶段的输入是 Map 阶段的输出,输出的功效可以作为最终的输出功效。信托你也留意到了,reduce 要领的第二个参数是一个 Iterable,MapReduce 会将 map 阶段中沟通字符的输出汇总到一路作为 reduce 的输入。

  • 清单 15. Reduce 措施
  1. public class CharCountReducer extends Reducer< Text, LongWritable, Text, LongWritable> { 
  2.     @Override 
  3.     protected void reduce(Text key, Iterable< LongWritable> values, Context context) 
  4.             throws IOException, InterruptedException { 
  5.         long count = 0; 
  6.         for (LongWritable value : values) { 
  7.             count += value.get(); 
  8.         } 
  9.         context.write(key, new LongWritable(count)); 
  10.     } 

驱动措施

到今朝为止,我们已经有了 map 措施和 reduce 措施,我们还必要一个驱动措施来运行整个功课。可以看到我们在这里初始化了一个 Job 工具。Job 工具指定整个 MapReduce 功课的执行类型。我们用它来节制整个功课的运作,在这里我们指定了 jar 包位置尚有我们的 Map 措施、Reduce 措施、Map 措施的输出范例、整个功课的输出范例尚有输入输出文件的地点。

  • 清单 16. 驱动措施
  1. public class CharCountDriver { 
  2.           public static void main(String[] args) throws Exception { 
  3.           Configuration configuration = new Configuration(); 
  4.           Job job = Job.getInstance(configuration); 
  5.           // Hadoop 会自动按照驱动措施的类路径来扫描该功课的 Jar 包。 
  6.           job.setJarByClass(cn.itweknow.mr.CharCountDriver.class); 
  7.           // 指定 mapper 
  8.           job.setMapperClass(CharCountMapper.class); 
  9.           // 指定 reducer 
  10.           job.setReducerClass(CharCountReducer.class); 
  11.           // map 措施的输出键-值对范例 
  12.           job.setMapOutputKeyClass(Text.class); 
  13.           job.setMapOutputValueClass(LongWritable.class); 
  14.           // 输出键-值对范例 
  15.           job.setOutputKeyClass(Text.class); 
  16.           job.setOutputValueClass(LongWritable.class); 
  17.           // 输入文件的路径 
  18.           FileInputFormat.setInputPaths(job, new Path(args[0])); 
  19.           // 输入文件路径 
  20.           FileOutputFormat.setOutputPath(job, new Path(args[1])); 
  21.           boolean res = job.waitForCompletion(true); 
  22.           System.exit(res?0:1); 
  23.           } 
  24.           } 

执行 MapReduce 功课

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读