大数据学习之MapReduce编程案例一单词计数 10

一:单词计数

1:单词计数总流程图

2:代码实现

1:Map阶段

package it.dawn.YARNPra.wc_hdfs;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * @author Dawn
 * @date 2019年5月1日23:09:08
 * @version 1.0
 *
 * 思路?
 * wordcount单词计数(数据来源hdfs上)
 * <单词,1>
 *
 * 数据传输
 *
 * KEYIN:数据的起始偏移量0~10 11~20 21~30
 * VALUEIN:数据
 *
 * KEYOUT:mapper输出到reduce阶段 k的类型
 * VALUEOUT:mapper输出到reduce阶段v的类型
 * <hello,1><hunter,1><henshuai,1>
 */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

	//key 起始偏移量 value 数据  context 上下文
	@Override
	protected void map(LongWritable key, Text value, Context context)
			throws IOException, InterruptedException {
		//1.读取数据
		String line=value.toString();

		//2.切割 hello hunter
		String[] words=line.split(" ");

		//3.循环的写到下一个阶段<hello,1><hunter,1>
		for(String word: words) {
			//4.输出到reducer阶段
			context.write(new Text(word), new IntWritable(1));
		}
	}

}

  

2:Reduce阶段

package it.dawn.YARNPra.wc_hdfs;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

/**
 * @author Dawn
 * @date 2019年5月1日23:15:33
 * @version 1.0
 *
 * 汇总 <hello,4> <hunter,1> <henshuai,2>
 */
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{

	@Override
	protected void reduce(Text k3, Iterable<IntWritable> v3,
			Context context) throws IOException, InterruptedException {
		//1.统计单词出现的次数
		int sum=0;

		//2 累加求和
		for(IntWritable v :v3) {
			//拿到累加值
			sum+=v.get();
		}

		//3 输出结果
		context.write(k3, new IntWritable(sum));
	}

}

  

3:Driver阶段

package it.dawn.YARNPra.wc_hdfs;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import it.dawn.YARNPra.wc_hdfs.WordCountMapper;
import it.dawn.YARNPra.wc_hdfs.WordCountReducer;
/**
 * @author Dawn
 * @date 2019年5月2日14:28:27
 * @version 1.0
 * 输入和输出路径都是hdfs上的路径
 */
public class WordCountDriver_hdfs {
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
		//1.获取job信息
		Configuration conf=new Configuration();
		Job job=Job.getInstance();

		//2.获取jar包
		job.setJarByClass(WordCountDriver_hdfs.class);

		//3.获取自定义的mapper与reducer类
		job.setMapperClass(WordCountMapper.class);
		job.setReducerClass(WordCountReducer.class);

		//4.设置map输出的数据类型
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);

		//5.设置reduce输出的数据类型(最终的数据类型)
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);

		//6.设置输入存在的路径与处理后的结果路径(注意包的导入 是org.apache.hadoop.mapreduce.lib.下的包)
		FileInputFormat.setInputPaths(job, new Path("/dawn/wordcount.txt"));
		FileOutputFormat.setOutputPath(job, new Path("/output/wc"));

		//7.提交任务
		boolean rs=job.waitForCompletion(true);
		System.out.println(rs?0:1);

	}
}

  

4:打包程序提交到集群上运行

命令 (如果jar包没在当前目录下,记得写好路径):

hadoop jar wordcount.jar it.dawn.YARNPra.wc_hdfs.WordCountDriver_hdfs

总结:

用户编写mr程序主要分为三个部分:Mapper,Reducer,Driver

1.Mapper阶段

(1)用户自定义mapper类 要继承父类Mapper

(2)Mapper的输入数据的kv对形式(kv类型可以自定义)

(3)Mapper的map方法的重写(加入业务逻辑)

(4)Mapper的数据输出kv对的形式(kv类型可以自定义)

(5)map()方法(maptask进程)对每个<k,v>调用一次

2.Reducer阶段

(1)用户自定义reducer类 要继承父类Reducer

(2)Reducer的数据输入类型对应的是Mapper阶段的输出数据类型,也是kv对

(3)Reducer的reduce方法的重写(加入业务逻辑)

(4)ReduceTask进程对每组的k的<k,v>组调用一次reduce方法

3.Driver阶段

MR程序需要一个Driver来进行任务的提交,提交的任务是一个描述了各种重要信息的job对象

=============================================================================

补充:  如果在集群上运行 ,修改配置文件 mapred-site.xml

指定MR程序运行容器或者框架 默认是本地模式

<property>

<name>mapreduce.framework.name</name>

<value>local</value>

<description>The runtime framework for executing MapReduce jobs.

Can be one of local, classic or yarn.

</description>

</property>

修改如下:

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

分发到bigdata13 bigdata12

scp mapred-site.xml bigdata12:$PWD

scp mapred-site.xml bigdata13:$PWD

原文地址:https://www.cnblogs.com/hidamowang/p/10802445.html

时间: 2024-10-10 09:28:41

大数据学习之MapReduce编程案例一单词计数 10的相关文章

大数据学习之七——MapReduce简单代码实例

1.关于MapReduce MapReduce是一种可用于数据处理的编程模型,能够支持java.Python.C++等语言.MapReduce程序本质上是并行运行的,因此可以处理大规模数据集,这也是它的优势. 2.使用hadoop分析数据 hadoop提供了并行处理,我们将查询表示成MapReduce作业. MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键/值作为输入和输出,并选择它们的类型.程序员还需要定义两个函数:map函数和reduce函数. Jav

大数据学习之MapReduce基础与Yarn集群安装09

1大数据解决的问题? 海量数据的存储:hadoop->分布式文件系统HDFS 海量数据的计算:hadoop->分布式计算框架MapReduce 2什么是MapReduce? 分布式程序的编程框架,java->ssh ssm ,目的:简化开发! 是基于hadoop的数据分析应用的核心框架. mapreduce的功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发的运行在hadoop集群上. 3 MapReduce的优缺点 优点: (1)易于编程 (2)良好的拓

大数据学习之八——MapReduce工作机制

1.MapReduce的特点 软件框架.并行处理.可靠且容错.大规模集群.海量数据集 2.mapper和reducer mapper负责"分":把复杂的任务分解为若干个"简单的任务"来处理.简单的任务包含三层含义: (1)数据或计算的规模相对原任务要大大缩小: (2)就近计算原则,任务会分配到存放着所需数据的节点上进行计算: (3)这些小任务可以并行计算,彼此间几乎没有依赖关系. reducer负责对map阶段的结果进行汇总. 3.MapReduce的工作机制 (1

大数据学习——高可用配置案例

(一).failover故障转移 在完成单点的Flume NG搭建后,下面我们搭建一个高可用的Flume NG集群,架构图如下所示: (1)节点分配 Flume的Agent和Collector分布如下表所示: 名称 Ip地址 Host 角色 Agent1 192.168.200.101 Itcast01 WebServer Collector1 192.168.200.102 Itcast02 AgentMstr1 Collector2 192.168.200.103 Itcast03 Agen

MapReduce 应用案例分析 - 单词计数

需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入一个文件,其内容如下: hello world hello hadoop hello mapreduce 对应上面给出的输入样例,其输出样例为: hadoop 1 hello 3 mapreduce 1 world 1 方案制定 对该案例,可设计出如下的MapReduce方案: 1. Map阶段各节点完成由输入数据到单词切分的工作 2. shuffle阶段完成相同单

学大数据需要什么编程基础?大数据学习步骤是什么?

学大数据需要什么编程基础?大数据学习步骤是什么? 大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来- 学大数据需要什么编程基础?大数据学习步骤是什么?大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来概括 针对非软件行业的朋友 根据你平时在超市,加油站,饭店等地方的一些消费行为,通过大数据这个技术,我们可以知道你现在的年龄范围,是否婚配,是否有孩子,孩子大致是几岁,是否有固定住宅,车大致是什么价位的等信息. 针对软件行业的朋友 平时我们写的程序都是在一台机器上运行,处理能力

好程序员大数据学习路线分享MAPREDUCE

好程序员大数据学习路线分享MAPREDUCE,需求:统计大量的文本文件中的单词出现的次数 1)整个运算需要分阶段 阶段一:并行局部运算 阶段二 :汇总处理,不同的阶段需要开发不同的程序 2)阶段之间的调用 3)业务程序(task程序)如何并发到集群并启动程序 4)如何监控task程序的运行状态,如何处理异常 ::这些问题是开发分布式程序都会面临的问题,完全可以封装成框架::MR 的结构 一个完整的MapReduce运行时有三类实例进程: 1)MRAppMaster : 负责整个程序的过程调度和状

大数据技术之MapReduce中多表合并案例

大数据技术之MapReduce中多表合并案例 1)需求: 订单数据表t_order: id pid amount 1001 01 1 1002 02 2 1003 03 3 订单数据order.txt 1001 01 1 1002 02 2 1003 03 3 1004 01 4 1005 02 5 1006 03 6 商品信息表t_product pid pname 01 小米 02 华为 03 格力 商品数据pd.txt 01 小米 02 华为 03 格力 将商品信息表中数据根据商品pid合

大数据学习路线分享MapReduce全过程解析

大数据学习路线分享MapReduce全过程解析,移动数据与移动计算 在学习大数据的时候接触了移动数据和移动计算这两种联系紧密而又有很大不同的概念,其中移动计算也叫做本地计算. 在以前的数据处理中时使用的移动数据,其实就是将需要处理的数据传输到存放不同处理数据方式逻辑的各个节点上.这样做的效率很低,特别是大数据中的数据量是很大的,至少都是GB以上,更大的是TB.PB甚至更大,而且磁盘I/O.网络I/O的效率是很低的,这样处理起来就需要很长的时间,远远不能满足我们的要求.而移动计算就出现了. 移动计