数据清洗
数据清洗:
过滤脏数据,解析字段结构化,数据加上一些默认值,给数据添加某些字段,把数据分类,
给数据脱敏,给数据加密,修改数据的存储结构...
可以用什么技术?
mr hive(udf) spark core
如何选择 ?
mr 好处稳定性高,如果数据量非常的大,考虑用mr做清洗
hive 的udf 就是mr的maptask,也不会运行reducetask
spark core : 速度快,基于内存,如果数据量,可能导致内存不够,程序不稳定
mr: mapreduce 程序,map程序,一般来说不需要写reduce
map程序:
setup: maptask执行之前,先执行一个方法,一般来说声明一些变量,给这些变量赋值,所谓的初始化
map :
处理数据的逻辑,map方法执行很多次,每次的执行的是一个偏移量的数据,(默认情况下这个偏移量是一行数据,但是如果你的数据,不能使用这种默认textinputformat,一般来说,hadoop会其他的inputformat满足一些常见数据需求,但是如果你处理的数据很不常见,万一hadoop没有,需要自定义inputformat,百度有没有类似的,
sqoop本质是自定义了很多 inputformat,outputformat),对于日志文件来说,数据是一行一行的,偏移量就是一行数据的长度,最终把所有数据执行完之后,map程序就不再执行
cleanup:map方法完全执行完毕之后,最后执行一次,做一些收尾的工作,例如关闭一些对象,关闭一些连接...
reduce程序:
setup: 同上
reduce : 执行很多次,每次执行 k -》 values,相同key的所有values,一个reduce 有多个key值,就执行多少次
cleanup: 同上
案例:用mr做数据清洗
数据清洗,是大数据开发里面最简单的开发,如果是用java写,会用java操作字符串,会写if else (第一个月),比较麻烦
讲解一个案例:用mr做数据清洗
数据清洗,是大数据开发里面最简单的开发,如果是用java写,会用java操作字符串,会写if else (第一个月),比较麻烦
stringBuffer: 线程安全
stringBuilder : 线程不安全
经典案例 ,卖票案例,指的是操作一些共享变量,可能会出现线程安全的问题
maptask里面 ,单个task并不存在这个操作共享变量的问题,不会出现线程不安全的问题,更推荐使用stringBuilder
String:适用于少量的字符串操作的情况
tringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况