HadoopCore-MapReduce

3.MapReduce简介

4.MapReduce运行流程

program——》master
assign map散——>worker——》split逻辑切分——》localwrite到 disks (先暂存,解耦)
assign reduce聚——》worker——》聚在一起——》output files

5.流程详解

1.pre-map:map前期准备
文件切分——》<k,v>
2.map: 打散
partition(hash值运算,按split进行划分)——》sort排序——》combine局部聚合
2.5shuffle:洗牌,神奇发生处
sort&merge(排序,partition合并)
3.reduce:聚
reduce全局聚合——》output

注意:combine局部聚合,为了减少全局聚合的压力
但也不一定哪都适用,不能局部计算的类型就不适合局部聚合

2.MapReduce Java Api 实现

2.1 Map类 (散)

		对数据进行切分

		重点:StringTokenizer st=new StringTokenizer(line,",");

		在这就可以设置具体的切分方式

2.2 Reduce类 (聚)

		 Iterable<IntWritable> values,按key值将相同key对应的value形成一个聚合体,可以看成一个集合。

		在迭代中,获取对应的value值。便可以进行各种计算。

		所有Reduce类中 , 每次传来的就是  key 和 key对应value的集合,这个概念是求平均值的重点!

2.3 Driver类 (驱动)

		可以设定有多少个环节,一般多操作job.setCombinerClass,局部聚合看情况添减。

3.如何判断输入数据的类型

3.1判断数组

		1) 正则表达式

		2) 强制转换

		3) 现成的API

3.2 正则表达式

		最为灵活强大

1)Pattern

			创建正则表达式的对象,便能做操作

2)Matcher

		1.matches()			全匹配

		2.lookingAt()		前段匹配

		3.find()		任意位置匹配

4.数据的分块存储和切分计算

	任何文件都可以进行分块存储  (都是二进制)

	但不一定都适合切分计算,比如一张图片切分成两段计算,就是两个废文件

5.压缩的本质

	数据有一定的重复性和规律性

6.文件格式

	1 .txt 	可切分	便捷	成本大

	2  .seq	可切分	kv存储,可压缩	不易查看数据

	3 .rc	可切分	查询快,利用率高		每一项都不最高 

	(行列切分,行切分保证数据连贯完整,列切分保证数据相似性。便于减少寻址时间,提高压缩率)

	4 .orc	可切分	rc的进一步提升

7.压缩格式

gz		最原生	不可切分		cpu要求高	<128最好

lzo		不原生	快,合理

bz2		原生	快,高

snappy	不原生	快,合理

1.文件输出格式

-Dmapred.output.compress=true \

-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec\

main方法中添加-

         //参数解析器

        GenericOptionsParser optionParser = new GenericOptionsParser(conf,args);

      String[] remainingArgs = optionParser.getRemainingArgs();

       if ((remainingArgs.length != 2)) {

        System.err.println("Usage: yarn jar jar_path main_class_path -D参数列表 <in> <out>");

        System.exit(2);

       }

//指定输入数据的路径

FileInputFormat.addInputPath(job, new Path(remainingArgs[0]));

//指定输出路径,并要求该输出路径一定是不存在的

FileOutputFormat.setOutputPath(job, new Path(remainingArgs[1]));

gzip格式:.GzipCodec lzo格式:.lzo.LzopCodec bzip2格式:.BZip2codec

2.自定义Partition

-Dmapred.reduce.tasks=2 \ 定义reduce数量

 /**

        自定义Partition的定义

 */

publicstatic class MyHashPartitioner<K, V> extends Partitioner<K, V> { 

    /**Use {@link Object#hashCode()} to partition. */

   public int getPartition(K key, V value, int numReduceTasks) {

       return (key.toString().charAt(0) < 'q' ? 0 : 1) % numReduceTasks;

       // return key.toString().charAt(0);

    }

}

可以对key进行限制进行不同规则切分

3.外部配置文件-configuration

当需要将某个xx.txt文件内容传递到各个计算节点,可通过Configuration传递到Map中

覆写setup方法,需要的参数只初始化一次。

标记状态位,用于标记一次性初始化的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值