ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程。
在运行mapperReduce之前 要先对数据进行清洗 清洗掉不符合用户要求的数据 清洗的过程只需要运行mapper程序,不需要运行reduce程序.
一般用来清洗用户的行为日志文件.
MapperReduce 总结
1.输入数据接口 : Inputformat 默认使用的实现类是TextInputFormat
使用逻辑是 : 一次读取一行文本 ,将该行的起始偏移量作为key 行内容作为value,
每一行均为一条记录 被分隔符分割为key,value 默认的分割符是tab(\t)
NlineInputFormat按照指定的行数N来划分切片。
CombineTextInputFormat可以把多个小文件合成一个切片处理 提高处理效率
用户也可以自定义InputFormat
2.逻辑处理接口 :Mapper
用户根据业务需求实现其中三个方法: map() setup() cleanup();
3.partitioner 分区
默认实现HashPartitioner, 逻辑是根据key的哈希值和numReduces来返回一个分区号 也可以自定义分区
4.Comparable排序
当我们用自定义的对戏那个作为key来输出时,就必须实现WritableCompararble接口 重写其conpareTo()方法
5.Combiner 合并
可以提高程序执行效率,减少io传输.但是使用时必须不能影响原有的业务处理结果
6.reduce端的分组
reduceTask拿到输入数据(一个partition的所有数据)后, 首先对数据进行分组 分组的原则是key相同,然后对每一组kv数据调用一次reduce()方法,
并且将这一组kv中的第一个kv的key作为参数传给reduce 的key ,将这一组数据的value的迭代器传给reduce()的value参数.
7.逻辑处理接口
根据需求去实现 reduce() setup() cleanup()
8.数据输出接口
默认实现类是TextOutputFormat 功能逻辑是 : 将每一个KV向目标文本文件中输出为一行
用户可以自定义 OutputFormat
Hadoop数据压缩
压缩技术能够有效减少底层存储系统(HDFS)读写字节数. 压缩提高了网络宽带和磁盘空间的效率.
压缩mapperreduce 是一种优化策略 : 通过亚索编码对Mapper和Reduce的输出进行压缩,以减少磁盘IO.提高mapperReduce运行速度 (但同样增加了cpu运算负担)
注意:压缩特性运用得当能提高性能,但运用不当也可能降低性能。
基本原则 :
(1) 运算密集型job,少用压缩
(2)IO密集型 的job 多用压缩
MP支持的压缩编码
(1)DEFAULT
hadoop 自带 不可以切分 压缩后和文本处理一样,不需要进行修改
(2)Gzip
hadoop 自带 压缩率高 压缩解压速度较快 不可以切分
文件在130M以内考虑使用Gzip 压缩后和文本处理一样,不需要进行修改
(3)bzip2
hadoop 自带 压缩/解压速度慢 可以切分
适用于速度要求不高但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式/输出之后的数据比较大需要减少磁盘使用空间/对单个很大的文本文件想压缩减少储存空间,有需要切分 压缩后和文本处理一样,不需要进行修改
(4)LZO
需要进行安装 压缩/解压速度较快,压缩率合理 可以切分
hadoop中最流行的压缩 但是需要安装 ,为了支持切分需要建立索引
还需要指定inputFromat为lzo格式.
文件越大 lzo的优势越明显
(5)Snappy
需要进行安装 速度最快 压缩率合理 不可以切分
需要进行安装
当MapReduce作业中的map输出的数据比较大时 作为Map到
Reduce 中间的压缩格式 或者作为一个MapReduce作业的输出 和另外一个MapReduce作业的输入.
压缩后和文本处理一样,不需要进行修改