maperuce运算框架

1,概念
    
mapreduce 运算框架主要实现hadoop 的数据处理,数据处理中 流经过5个节点。
    数据流:input -> spilt -> map -> shuffle -> reduce(最后reduce输出)
    1.1,input:是将被运算的数据切成默认64M的快(block),方便后续运算。
    1.2,split:切片,将 input 中的快按照行切成片(键值对),方便后续 map 运算。
    1.3,map(开发):
             对 split 的片(行)进行数据处理,处理成键值对。
             workcount map 数据处理:将每行拆分成每一个单词作为输出键,个数设置为1 作为输出值
    1.4,shuffle:
             将所有的 map 运算结果都重新按照键分组,输出键值对。
             wordcount 中 shuffle 将 map 的相同键的数据合并成一条,值是一个固定值为1的数组。
    1.5,reduce(开发):
             将shuffle 的结果集做数据处理。
             wordcount 的数据处理:将键对应的值(值为1的数字)做累加,既得出我们的每个单词出现个数。
    1.6,输出(output)


    
 

2,maprecue 开发
      准备工作:
          1)新建 Map/Reduce Project 项目 new -> project -> Map/Reduce Project :wordcountdemo
          2)增加配置文件 core-site.xml,log4j.xml
                新建 resource 文件夹放入配置文件:项目 -> new -> Source Folder
          3)新建一个class WordCountJob(开发 map,开发 reduce,)               

package org.kgc1803.demo;

import java.io.IOException;
import java.util.StringTokenizer;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * 词频
 * @author hduser
 *
 */
public class WordCountJob  {
	/**
	 * 开发 map
	 * @author hduser
	 * 第一个参数:map 输入键的类型
	 * 第二个参数:map 输入值的类型
	 * 第三个参数:map 输出键的类型
	 * 第四个参数:map 输出值的类型
	 */
	public static class WordCountMapper extends Mapper<Object, Text, Text, IntWritable>{
		/**
		 * 每一个切片会执行一次map方法
		 * wordcount map 把 malue 拆分成单个单词
		 * keyIn:是每一行的键
		 * valueIn:是每一行的值
		 * context:是上下文容器,用于将 map 的结果输出到下一步
		 * @throws InterruptedException 
		 * @throws IOException 
		 */
		public void map(Object keyIn,Text valueIn,Context context) throws IOException, InterruptedException{
			//固定值1,作为输出值
			IntWritable valueOut = new IntWritable(1);
			Text keyOut = null;
			//按空格,逗号,~~ 拆分
			StringTokenizer token = new StringTokenizer(valueIn.toString());
			//按照迭代器用法使用
			while(token.hasMoreTokens()){
				String key = token.nextToken();
				keyOut = new Text(key);
				context.write(keyOut, valueOut);
			}
		}
	}
	
	//开发reduce
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值