MapReduce Demo
功能:统计公司员工一个月内手机上网上行流量、下行流量及总流量。
测试数据如下:
13612345678 6000 1000
13612345678 2000 3000
代码:
程序入口类:DataCount
package cn.terry.mr;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;public class DataCount {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf=new Configuration();Job job=Job.getInstance(conf);job.setJarByClass(DataCount.class);job.setMapperClass(MRMap.class);FileInputFormat.setInputPaths(job, new Path(args[0]));job.setReducerClass(MRReduce.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(DataBean.class);FileOutputFormat.setOutputPath(job, new Path(args[1]));job.waitForCompletion(true);}}数据实体类: DataBean.java
package cn.terry.mr;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import org.apache.hadoop.io.Writable;public class DataBean implements Writable {private String telNo;private Long upPayLoad;private Long downPayLoad;private Long totalPayLoad;public String getTelNo() {return telNo;}public void setTelNo(String telNo) {this.telNo = telNo;}public Long getUpPayLoad() {return upPayLoad;}public void setUpPayLoad(Long upPayLoad) {this.upPayLoad = upPayLoad;}public Long getDownPayLoad() {return downPayLoad;}public void setDownPayLoad(Long downPayLoad) {this.downPayLoad = downPayLoad;}public Long getTotalPayLoad() {return totalPayLoad;}public void setTotalPayLoad(Long totalPayLoad) {this.totalPayLoad = totalPayLoad;}public DataBean() {}public DataBean(String telNo, Long upPayLoad, Long downPayLoad) {this.telNo = telNo;this.upPayLoad = upPayLoad;this.downPayLoad = downPayLoad;this.totalPayLoad=this.upPayLoad+this.downPayLoad;}//serialize@Overridepublic void write(DataOutput out) throws IOException {// TODO Auto-generated method stubout.writeUTF(telNo);out.writeLong(upPayLoad);out.writeLong(downPayLoad);out.writeLong(totalPayLoad);}//deserrialize@Overridepublic void readFields(DataInput in) throws IOException {// TODO Auto-generated method stubthis.telNo=in.readUTF();this.upPayLoad=in.readLong();this.downPayLoad=in.readLong();this.totalPayLoad=in.readLong();}@Overridepublic String toString() {// TODO Auto-generated method stubreturn this.upPayLoad+"\t"+ this.downPayLoad+"\t" + this.totalPayLoad;}}Map类:MRMap.java
package cn.terry.mr;import java.io.IOException;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class MRMap extends Mapper<LongWritable,Text,Text,DataBean> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line=value.toString();String[] fields=line.split("\t");String telNo=fields[0];Long up=Long.parseLong(fields[1]);Long down= Long.parseLong(fields[2]);DataBean bean=new DataBean(telNo,up,down);context.write(new Text(telNo), bean);}}Reduce类:MRReduce.java
package cn.terry.mr;import java.io.IOException;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class MRReduce extends Reducer<Text,DataBean,Text,DataBean> {@Overrideprotected void reduce(Text key, Iterable<DataBean> v2, Context context) throws IOException, InterruptedException {long up_sum=0;long down_sum=0;for(DataBean bean :v2){up_sum+=bean.getUpPayLoad();down_sum+=bean.getDownPayLoad();}DataBean bean=new DataBean("",up_sum,down_sum);context.write(key, bean);}}
17/11/08 11:34:25 INFO client.RMProxy: Connecting to ResourceManager at master/1:80 32
17/11/08 11:34:27 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not p erformed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
17/11/08 11:34:27 INFO input.FileInputFormat: Total input paths to process : 1
17/11/08 11:34:28 INFO mapreduce.JobSubmitter: number of splits:1
17/11/08 11:34:28 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1509957441313_00 02
17/11/08 11:34:29 INFO impl.YarnClientImpl: Submitted application application_1509957441313_00 02
17/11/08 11:34:29 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/appli cation_1509957441313_0002/
17/11/08 11:34:29 INFO mapreduce.Job: Running job: job_1509957441313_0002
17/11/08 11:34:46 INFO mapreduce.Job: Job job_1509957441313_0002 running in uber mode : false
17/11/08 11:34:46 INFO mapreduce.Job: map 0% reduce 0%
17/11/08 11:34:55 INFO mapreduce.Job: Task Id : attempt_1509957441313_0002_m_000000_0, Status : FAILED Error: java.io.IOException: Initialization of all the collectors failed. Error in last collect or was :class com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:415) at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1746
以上错误可看出hadoop引用的Text包出错,需要将DataCount类中Text的包引用改为 import org.apache.hadoop.io.Text;
再次运行:
[root@master bin]# hadoop jar /home/hadoop/mpCount.jar cn.terry.mr.DataCount /data3.txt /MROut417/11/08 16:23:45 INFO client.RMProxy: Connecting to ResourceManager at master/x.x.x.x:803217/11/08 16:23:46 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.17/11/08 16:23:47 INFO input.FileInputFormat: Total input paths to process : 117/11/08 16:23:47 INFO mapreduce.JobSubmitter: number of splits:117/11/08 16:23:47 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1509957441313_000817/11/08 16:23:48 INFO impl.YarnClientImpl: Submitted application application_1509957441313_000817/11/08 16:23:48 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1509957441313_0008/17/11/08 16:23:48 INFO mapreduce.Job: Running job: job_1509957441313_000817/11/08 16:24:02 INFO mapreduce.Job: Job job_1509957441313_0008 running in uber mode : false17/11/08 16:24:02 INFO mapreduce.Job: map 0% reduce 0%17/11/08 16:24:14 INFO mapreduce.Job: map 100% reduce 0%17/11/08 16:24:25 INFO mapreduce.Job: map 100% reduce 100%17/11/08 16:24:26 INFO mapreduce.Job: Job job_1509957441313_0008 completed successfully查看结果:
[root@master bin]# hdfs dfs -ls /MROut4Found 2 items-rw-r--r-- 2 root supergroup 0 2017-11-08 16:24 /MROut4/_SUCCESS-rw-r--r-- 2 root supergroup 106 2017-11-08 16:24 /MROut4/part-r-00000[root@master bin]# hdfs dfs -cat /MROut4/part-r-0000013112345678 1800 400 220013512345678 9500 400 990013612345678 8000 4000 1200013812345678 3500 400 3900由于我的chrome和IE版本无法兼容cnblogs的插入code和picture功能,抱歉没能将代码及结果以友好的方式呈现。
MapReduce Demo的更多相关文章
- python - hadoop,mapreduce demo
Hadoop,mapreduce 介绍 59888745@qq.com 大数据工程师是在Linux系统下搭建Hadoop生态系统(cloudera是最大的输出者类似于Linux的红帽), 把用户的交易 ...
- Wordcount on YARN 一个MapReduce示例
Hadoop YARN版本:2.2.0 关于hadoop yarn的环境搭建可以参考这篇博文:Hadoop 2.0安装以及不停集群加datanode hadoop hdfs yarn伪分布式运行,有如 ...
- 关于Mapreduce Text类型赋值的错误
Mapreduce中Text类型数据被无缘无故替换? 今天偶然看到一个mapreduce demo,直接上手操作 统计两个文件中 最大值 文件中数据格式为 名字 数值 输出为 名字(最大值所对应的 ...
- Apache Hadoop2.x 边安装边入门
完整PDF版本:<Apache Hadoop2.x边安装边入门> 目录 第一部分:Linux环境安装 第一步.配置Vmware NAT网络 一. Vmware网络模式介绍 二. NAT模式 ...
- CentOS7 分布式安装 Hadoop 2.8
1. 基本环境 1.1 操作系统 操作系统:CentOS7.3 1.2 三台虚拟机 172.20.20.100 master 172.20.20.101 slave1 172.20.20.102 sl ...
- 在虚拟机上配置安装hadoop集群
原本以为有大神已经总结的很清楚了,就不自己在写了, 但是在自己安装的过程中还是出现了一些问题, 所以打算以自己的方式重新总结一下. 参考https://blog.csdn.net/hliq539 ...
- centos6.6安装hadoop-2.5.0(三、完全分布式安装)
操作系统:centos6.6(三台服务器) 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz hadoop ...
- centos6.6安装hadoop-2.5.0(一、本地模式安装)
操作系统:centos6.6(一台服务器) 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz hadoop ...
- 史上最详细的Hadoop环境搭建(转)
转载的文章,请告知侵删.本人只是做个记录,以免以后找不到. 前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程度,会决定在大数据技 ...
随机推荐
- Java IO的一些列子
Write()方法写入文件 public static void main(String[] args){ try{ BufferedWriter out = new BufferedWriter(n ...
- mysql之 openark-kit online ddl
MySQL工具集openark-kit (官方网站 http://code.openark.org/forge/openark-kit),内部包含很多小工具,在5.6之前用于实现online ddl操 ...
- kafka 的 docker 镜像使用
Kafka 还没有提供官方的镜像(2019.01.29),能找到的都是一些社区维护的镜像包. 这里使用这个镜像:https://hub.docker.com/r/spotify/kafka
- malloc的使用、用malloc动态分配内存以适应用户的需求的源代码实例
int len; ; printf("please enter the size that you want: "); scanf("%d", &len ...
- 配置B类内网 和 配置A类内网
首先 A 类网 对应的 子网掩码是255.0.0.0 B 类网 对应的 子网掩码是255.255.0.0 C 类网 对应的 子网掩码是255.255.255.0 一般来说 10 开头的都是 A 类网 ...
- Jmeter性能监测及安装插件(推荐)
本文部分理论转自Jmeter官网:https://jmeter-plugins.org/wiki/PerfMon/ ,并结合个人实践编写 一.介绍 在负载测试期间,了解加载服务器的运行状况很重要.如 ...
- NET设计模式 第二部分 行为型模式(17):迭代器模式(Iterator Pattern)
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据. ...
- FireDAC探索 (二)
又花时间试了试FireDAC,本想找到一些办法,让FireDAC取数据能和DBX样快,最终还是失败了,DBX实现是太快了,3472第记录(110个字段的表),0毫秒就抓过来了, FireDAC最快也要 ...
- RedHat6.5安装kafka集群
版本号: Redhat6.5 JDK1.8 zookeeper-3.4.6 kafka_2.11-0.8.2.1 1.软件环境 1.3台RedHat机器,master.slave1. ...
- 通过U盘启动vmware虚拟机
不能通过虚拟机的USB功能,而是通过硬盘映射功能实现,操作方法如下图. 1.添加硬盘,注意接口类型与启动系统的支持(XPPE不支持scsi,但10pe支持) 2.硬盘类型 3.选择U盘映射 4.按F2 ...