自定义计数器的使用(记录敏感单词)

  1 package counter;
  2
  3 import java.net.URI;
  4 import org.apache.hadoop.conf.Configuration;
  5 import org.apache.hadoop.fs.FileSystem;
  6 import org.apache.hadoop.fs.Path;
  7 import org.apache.hadoop.io.LongWritable;
  8 import org.apache.hadoop.io.Text;
  9 import org.apache.hadoop.mapreduce.Counter;
 10 import org.apache.hadoop.mapreduce.Job;
 11 import org.apache.hadoop.mapreduce.Mapper;
 12 import org.apache.hadoop.mapreduce.Reducer;
 13 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 14 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
 15 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 16 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
 17
 18 public class WordCountApp {
 19     static final String INPUT_PATH = "hdfs://chaoren:9000/hello";
 20     static final String OUT_PATH = "hdfs://chaoren:9000/out";
 21
 22     public static void main(String[] args) throws Exception {
 23         Configuration conf = new Configuration();
 24         FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), conf);
 25         Path outPath = new Path(OUT_PATH);
 26         if (fileSystem.exists(outPath)) {
 27             fileSystem.delete(outPath, true);
 28         }
 29
 30         Job job = new Job(conf, WordCountApp.class.getSimpleName());
 31
 32         // 1.1指定读取的文件位于哪里
 33         FileInputFormat.setInputPaths(job, INPUT_PATH);
 34         // 指定如何对输入的文件进行格式化,把输入文件每一行解析成键值对
 35         //job.setInputFormatClass(TextInputFormat.class);
 36
 37         // 1.2指定自定义的map类
 38         job.setMapperClass(MyMapper.class);
 39         // map输出的<k,v>类型。如果<k3,v3>的类型与<k2,v2>类型一致,则可以省略
 40         //job.setOutputKeyClass(Text.class);
 41         //job.setOutputValueClass(LongWritable.class);
 42
 43         // 1.3分区
 44         //job.setPartitionerClass(org.apache.hadoop.mapreduce.lib.partition.HashPartitioner.class);
 45         // 有一个reduce任务运行
 46         //job.setNumReduceTasks(1);
 47
 48         // 1.4排序、分组
 49
 50         // 1.5归约
 51
 52         // 2.2指定自定义reduce类
 53         job.setReducerClass(MyReducer.class);
 54         // 指定reduce的输出类型
 55         job.setOutputKeyClass(Text.class);
 56         job.setOutputValueClass(LongWritable.class);
 57
 58         // 2.3指定写出到哪里
 59         FileOutputFormat.setOutputPath(job, outPath);
 60         // 指定输出文件的格式化类
 61         //job.setOutputFormatClass(TextOutputFormat.class);
 62
 63         // 把job提交给jobtracker运行
 64         job.waitForCompletion(true);
 65     }
 66
 67     /**
 68      *
 69      * KEYIN     即K1     表示行的偏移量
 70      * VALUEIN     即V1     表示行文本内容
 71      * KEYOUT     即K2     表示行中出现的单词
 72      * VALUEOUT 即V2        表示行中出现的单词的次数,固定值1
 73      *
 74      */
 75     static class MyMapper extends
 76             Mapper<LongWritable, Text, Text, LongWritable> {
 77         protected void map(LongWritable k1, Text v1, Context context)
 78                 throws java.io.IOException, InterruptedException {
 79             /**
 80              * 自定义计数器的使用
 81              */
 82             Counter counter = context.getCounter("Sensitive Words", "hello");//自定义计数器名称Sensitive Words
 83             String line = v1.toString();
 84             if(line.contains("hello")){
 85                 counter.increment(1L);//记录敏感词汇hello的出现次数
 86             }
 87             String[] splited = line.split("\t");
 88             for (String word : splited) {
 89                 context.write(new Text(word), new LongWritable(1));
 90             }
 91         };
 92     }
 93
 94     /**
 95      * KEYIN     即K2     表示行中出现的单词
 96      * VALUEIN     即V2     表示出现的单词的次数
 97      * KEYOUT     即K3     表示行中出现的不同单词
 98      * VALUEOUT 即V3     表示行中出现的不同单词的总次数
 99      */
100     static class MyReducer extends
101             Reducer<Text, LongWritable, Text, LongWritable> {
102         protected void reduce(Text k2, java.lang.Iterable<LongWritable> v2s,
103                 Context ctx) throws java.io.IOException,
104                 InterruptedException {
105             long times = 0L;
106             for (LongWritable count : v2s) {
107                 times += count.get();
108             }
109             ctx.write(k2, new LongWritable(times));
110         };
111     }
112 }

在eclipse中运行后,可以在控制台查看到结果:

转载于:https://www.cnblogs.com/ahu-lichang/p/6656303.html

自定义Counter使用相关推荐

  1. 自定义Counter使用 与

    自定义计数器的使用(记录敏感单词) 复制代码 1 package counter; 2 3 import java.net.URI; 4 import org.apache.hadoop.conf.C ...

  2. 【Hello CSS】第一章-CSS的语法与工作流

    作者:陈大鱼头 github: KRISACHAN 在上一篇[Hello CSS]的序章CSS起源中介绍了CSS的诞生原因以及发展历史,了解了CSS的存在意义.从正篇篇开始将会正式开始介绍CSS这门语 ...

  3. hadoop下实现kmeans算法——一个mapreduce的实现方法

    写mapreduce程序实现kmeans算法,我们的思路可能是这样的 1. 用一个全局变量存放上一次迭代后的质心 2. map里,计算每个质心与样本之间的距离,得到与样本距离最短的质心,以这个质心作为 ...

  4. Hadoop Streaming高级编程

    1. 概要 本文主要介绍了Hadoop Streaming的一些高级编程技巧,包括,怎样在mapredue作业中定制输出输出格式?怎样向mapreduce作业中传递参数?怎么在mapreduce作业中 ...

  5. MaxCompute 图计算用户手册(上)

    概要 ODPS GRAPH是一套面向迭代的图计算处理框架.图计算作业使用图进行建模,图由点(Vertex)和边(Edge)组成,点和边包含权值(Value),ODPS GRAPH支持下述图编辑操作: ...

  6. hadoop hive集群_Hive的优化和压缩

    使用之前的数据库 执行语句 explain select count(*) from emp; explain可以帮助我们看到有多少个任务 会出现下面的信息根标签,操作语法树等信息 根标签 操作语法树 ...

  7. hadoop python入门_Hadoop Streaming入门

    说明:本文使用的Hadoop版本是2.6.0,示例语言用Python. 概述 Hadoop Streaming是Hadoop提供的一种编程工具,提供了一种非常灵活的编程接口, 允许用户使用任何语言编写 ...

  8. prometheus-容器健康状况监控

    Docker 安装prometheus(容器监控) prometheus是由谷歌研发的一款开源的监控软件 https://www.cnblogs.com/zqj-blog/p/10871033.htm ...

  9. 深入浅出监控神器Prometheus

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

最新文章

  1. 使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
  2. Python的基本运算符
  3. 成为一流CSS设计师的8大技巧
  4. 【412天】跃迁之路——程序员高效学习方法论探索系列(实验阶段169-2018.03.24)...
  5. ux设计中的各种地图_UX写作中的移情
  6. 序列化包含多种不明类型的集合
  7. Java Collections unmodifiableCollection()方法与示例
  8. webpack 报错 No PostCSS Config found 解决方案。
  9. mysql操作数据库的步骤,Golang操作MySql数据库的完整步骤记录
  10. java ad 证书_你好,请教一个java与AD域SSL(636端口)通讯问题
  11. Python 远程桌面协议RDPY简介
  12. CreatorPrimer|优化编辑器
  13. linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
  14. leetcode485、448、414
  15. jBPM Designer 2.4.0.Final版发布
  16. 服务器能用usb pe安装win7系统,另一种U盘(支持winPE,可以安装win7)安装ubuntu系统的方法...
  17. 东莞 小学计算机编程大赛,小学生编程大赛【小学生大赛自我介绍】
  18. 太阳山采风(部分稿件)
  19. 你离顶尖Java程序员,只差这11本书的距离 172 分享 分享到新浪微博 分享到QQ空间
  20. 分布式系统:FastRPC eRPC

热门文章

  1. 【Qt中文手册】QSortFilterProxyModel
  2. 40无法u盘启动_制作好U盘启动盘,却无法引导启动,该怎么办?
  3. Java学习总结:6
  4. Java项目:日历万年历(java+swing)
  5. CSS之布局(盒子模型--外边距)
  6. Go 领军人物谢孟军:智能制造渴望银弹,首先要摒弃偏见
  7. ubuntu 下mysql导入出.sql文件
  8. apache开启虚拟主机 并进行配置
  9. Parentheses Balance (括号平衡)---栈
  10. Java读取Properties配置文件