program——》master assign map散——>worker——》split逻辑切分——》localwrite到 disks (先暂存,解耦) assign reduce聚——》worker——》聚在一起——》output files5.流程详解
1.pre-map:map前期准备
文件切分——》
2.map: 打散
partition(hash值运算,按split进行划分)——》sort排序——》combine局部聚合
2.5shuffle:洗牌,神奇发生处
sort&merge(排序,partition合并)
3.reduce:聚
reduce全局聚合——》output
注意:combine局部聚合,为了减少全局聚合的压力
但也不一定哪都适用,不能局部计算的类型就不适合局部聚合
2.1 Map类 (散)
对数据进行切分 重点:StringTokenizer st=new StringTokenizer(line,","); 在这就可以设置具体的切分方式
2.2 Reduce类 (聚)
Iterablevalues,按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参数列表 ");
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数量
publicstatic class MyHashPartitionerextends Partitioner { 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方法,需要的参数只初始化一次。
标记状态位,用于标记一次性初始化的用法。



