Hadoop之MapReduce实战(三)

作者: 云计算机网 分类: 云计算知识 发布时间: 2016-08-02 09:22

本文提供一个以Hadoop MapReduce方式统计文本中每个单词的数量的例子,不多说,直接上代码

package com.lyz.hadoop.count;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;/** * 利用Hadoop MapReduce统计文本中每个单词的数量 * @author liuyazhuang */public class WordCount {//要统计的文件位置static final String INPUT_PATH = "hdfs://liuyazhuang:9000/d1/hello";//统计结果输出的位置static final String OUT_PATH = "hdfs://liuyazhuang:9000/out";public static void main(String[] args) throws Exception {Configuration conf = new Configuration();final FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), conf);final Path outPath = new Path(OUT_PATH);//如果已经存在输出文件,则先删除已存在的输出文件if(fileSystem.exists(outPath)){fileSystem.delete(outPath, true);}final Job job = new Job(conf , WordCount.class.getSimpleName());//1.1指定读取的文件位于哪里FileInputFormat.setInputPaths(job, INPUT_PATH);//指定如何对输入文件进行格式化,把输入文件每一行解析成键值对job.setInputFormatClass(TextInputFormat.class);//1.2 指定自定义的map类job.setMapperClass(MyMapper.class);//map输出的<k,v>类型。如果<k3,v3>的类型与<k2,v2>类型一致,下面两行代码可以省略job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//1.3 分区job.setPartitionerClass(HashPartitioner.class);//有一个reduce任务运行job.setNumReduceTasks(1);//1.4 TODO 排序、分组//1.5 TODO 规约//2.2 指定自定义reduce类job.setReducerClass(MyReducer.class);//指定reduce的输出类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//2.3 指定写出到哪里FileOutputFormat.setOutputPath(job, outPath);//指定输出文件的格式化类job.setOutputFormatClass(TextOutputFormat.class);//把job提交给JobTracker运行job.waitForCompletion(true);}/** * KEYIN即k1表示行的偏移量 * VALUEIN即v1表示行文本内容 * KEYOUT即k2表示行中出现的单词 * VALUEOUT即v2表示行中出现的单词的次数,固定值1 */static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{protected void map(LongWritable k1, Text v1, Context context) throws java.io.IOException ,InterruptedException {final String[] splited = v1.toString().split("");for (String word : splited) {context.write(new Text(word), new LongWritable(1));}};}/** * KEYIN即k2表示行中出现的单词 * VALUEIN即v2表示行中出现的单词的次数 * KEYOUT即k3表示文本中出现的不同单词 * VALUEOUT即v3表示文本中出现的不同单词的总次数 * */static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>{protected void reduce(Text k2, java.lang.Iterable<LongWritable> v2s, Context ctx) throws java.io.IOException ,InterruptedException {long times = 0L;for (LongWritable count : v2s) {times += count.get();}ctx.write(k2, new LongWritable(times));};}} 
  • 电脑在使用之后会随着时间变化运行速度就会变得越来越慢,这主要是因为留下了一些缓存或是一些垃圾文件所以就导致电脑运行速度变慢。这时候就需要对磁盘进行清理了,那么你知道磁盘清理的作用是什么吗?

      电脑在使用之后会随着时间变化运行速度就会变得越来越慢,这主要是因为留下了一些缓存或是一些垃圾文件所以就导致电脑运行速度变慢。这时候就需要对磁盘进行清理了,那么你知道磁盘清理的作用是什么吗?

      由于硬盘被划分成一个一个簇,然后里头分成各个扇区,文件的大小不同,在储存的时候系统会搜索最相应的大小,久而久之在文件和文件之间会形成一些碎片,较大的文件也可能被分散存储,产生碎片以后,在读取文件时需要更多的时间和查找,从而减慢操作速度,对硬盘也有一定损害,因此我们一般会定期进行一次磁盘清理。

      磁盘清理很简单,最简单的就是从“开始-所有程序-附件-系统工具-磁盘碎片整理工具”,然后选择需要清理的磁盘即可,如下图:

    Win7磁盘清理

      另外还值得一提的是,使用较久的电脑会产生各种系统垃圾,也会导致速度变慢,通常大家习惯于定期清理系统垃圾,虽然对于保持系统性能帮助不少,但普通的清理垃圾不能整理磁盘碎片,因此清理磁盘是一种比较好的实现硬盘加速方法,因此也是电脑提升性能比较可取的方法。

      因此我们只要知道,磁盘清理的最大目的就是提升硬盘性能速度,另外对于硬盘保护也有一定关系,不过不建议频繁进行磁盘清理,过于频繁也会对磁盘产生一些负面影响,一般半年到一年左右清理一次就足够了。

      以上就是小编为大家介绍磁盘清理的作用,你明白了吗?

  • 相关推荐:

  • 磁盘清理的作用
  • 京东618电脑数码榜风起云
  • 当当网卖身:英雄迟暮,
  • 有益于NAS的技术之二:文
  • VMware终端用户计算模式变
  • Unix与Linux之间的差异不可
  • 云计算从服务到公共资源
  • “京条计划”之下惊现京
  • 老司机专享丨“猎时行动
  • “河南百所高校走进景安
  • 网站内容禁止违规转载,转载授权联系中国云计算网