MapRecude
任务:分析通话记录,查处每个手机号码有哪些打过来的号码
13510921776 10086
13710148751 10086
13914248991 10086
13510921776 13710148751
13510921776 13710148751
13914248991 13710148751
13710148751 13510921776
要求输出结果:
10086 13510921776|13710148751|13914248991|
13510921776 13710148751|
13710148751 13510921776|13510921776|13914248991|
代码:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import java.io.IOException; public class PhoneAnalyzer extends Configured implements Tool { enum Counter {
LINESKIP; // 出错的行
} @Override
public int run(String[] args) throws Exception {
Configuration conf = getConf();
Job job = new Job(conf, "phoneAnalyzer"); // 任务名
job.setJarByClass(PhoneAnalyzer.class); // 指定Class
FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/user/root/in")); // 输入路径
FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/user/root/out")); // 输出路径
job.setMapperClass(Map.class); // 调用Map类作为Mapper任务代码
job.setReducerClass(Reduce.class); // 调用Reduce类作为Reducer任务代码
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(Text.class); // 指定输出的Key的格式(KEYOUT)
job.setOutputValueClass(Text.class); // 指定输出的Value的格式(VALUEOUT)
job.waitForCompletion(true);
return job.isSuccessful() ? 0 : 1;
} public static class Map extends
Mapper<LongWritable, Text, Text, Text> { //<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
try {
// key - 行号 value - 一行的文本
String line = value.toString(); //13510000000 10086(13510000000拨打10086)
// 数据处理
String[] lineSplit = line.split(" ");
String phone1 = lineSplit[0];
String phone2 = lineSplit[1];
context.write(new Text(phone2), new Text(phone1)); // 输出 key \t value
} catch (Exception e) {
context.getCounter(Counter.LINESKIP).increment(1); // 出错令计数器+1
}
} } public static class Reduce extends Reducer<Text, Text, Text, Text> { //<KEYIN(必须与Mapper的KEYOUT相同),VALUEIN(必须与Mapper的VALUEOUT相同),KEYOUT,VALUEOUT> @Override
protected void reduce(Text key, Iterable<Text> values,
Context context)
throws IOException, InterruptedException {
String valueStr;
String out = "";
for(Text value:values){
valueStr = value.toString() + "|";
out += valueStr;
}
// 输出 key \t value(如果我们的输出结果不是key \t value格式,那么我们的key可定义为NullWritable,而value使用key与value的组合。)
context.write(key, new Text(out));
}
} public static void main(String[] args) throws Exception {
//运行任务
int res = ToolRunner.run(new Configuration(), new PhoneAnalyzer(), args);
System.exit(res);
}
}
MapRecude的更多相关文章
- Hadoop基础教程之重新认识Hadoop
之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功能DFS和MapReduce, DFS可以理解为一 ...
- Hadoop学习笔记(6) ——重新认识Hadoop
Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...
- Hive SQL运行状态监控(HiveSQLMonitor)
引言 目前数据平台使用Hadoop构建,为了方便数据分析师的工作,使用Hive对Hadoop MapReduce任务进行封装,我们面对的不再是一个个的MR任务,而是一条条的SQL语句.数据平台内部 ...
- YARN
YARN 介绍 Apache Hadoop YARN作为hadoop的子项目加入到Hadoop Common (core libraries), Hadoop HDFS (storage) and H ...
- Hadoop学习(二) Hadoop配置文件参数详解
Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2.6.4. etc/hadoop/core-site.xm ...
- 1.hive介绍及安装配置
1.Hive介绍 数据库OLTP 在线事务处理 数据仓库OLAP 在线分析处理 延迟高 类sql方式(HQL) 使用sql方式,用来读写,管理位于分布式存储系统上的大型数据集的数据仓库技术 hive是 ...
- mapreduce程序调用各个类的功能
转自:http://www.cnblogs.com/z1987/p/5052409.html 1.map类 map类继承了库类中的Mapper,即Mapper<KEYIN, VALUEIN, K ...
- win32下开发hadoop
转载自:http://my.oschina.net/muou/blog/408543[木偶:Windows下使用Hadoop2.6.0-eclipse-plugin插件] 对于一些细节地 ...
- Hadoop Intro - Configure
Hadoop学习(二) Hadoop配置文件参数详解 Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2 ...
随机推荐
- ubuntu获取root权限
1.先在Terminal下设置root密码 执行 sudo passwd root 2.执行sudo su,然后根据提示来即可.
- Hadoop在线分析处理(OLAP)
数据处理与联机分析处理 ( OLAP ) 联机分析处理是那些为了支持商业智能,报表和数据挖掘与探索等业务而开展的工作.这类工作的样例有零售商按地区和季度两个维度计算门店销售额,银行按语言和月份两个维度 ...
- Path相关方法解说(二)
今天咱们一起来看看Path里 XXXTo 相关的一类方法. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/4 ...
- 好工具 VHD
通过powershell 互转 Convert-VHD –Path F:\debian.vhdx –DestinationPath F:\debian.vhd 举个栗子 附加参考 Convert-VH ...
- Unity3D学习(十):使用VideoPlayer在UI上播放视频
前言 每一款游戏往往启动的第一次都会播放CG动画之类的,Unity本身对于移动平台也提供了一个接口. Handheld.PlayFullScreenMovie("path") 过场 ...
- Log4j容器深入探究
1.思考 容器是什么? 水壶是容器,水壶中存放着水,等我们需要水了,直接用 Spring中的ApplicationContext是容器,里面存放着各种Bean,等我们需要了直接用,并且可以创建管理Be ...
- 基于jQuery头像裁剪插件cropbox
今天给大家分享一款基于jQuery头像裁剪插件cropbox,这是一款简单实用的jQuery头像在线裁剪插件.该插件适用于适用浏览器:IE8.360.FireFox.Chrome.Safari.Ope ...
- 2017年网站安全狗绕过WebShell上传拦截的新姿势
本文来源:https://www.webshell.ren/post-308.html 今天有一位朋友发一个上传点给我 我一看是南方cms 有双文件上传漏洞 本来可以秒的 但是看到了 安全狗 从图片可 ...
- 【sql绕过】Bypass waf notepad of def
文章是通过阅读<[独家连载]我的WafBypass之道 (SQL注入篇)>写的阅读笔记. Waf的类型 1.云waf云waf通常是CDN包含的waf,DNS在解析的时候要解析到cdn上面制 ...
- sama5d3 环境检测 gpio--yk测试
说明: gpio的MAP关系 yk0--pioA7 yk1--pioA5 yk2--pioA9 yk3--pioA3 yk4--pioA1 yk5--pioA8 (端子从左--& ...