数据分析知识补充:Hadoop、YARN、Spark、Hive
Hadoop
概念
HDFS文件系统+MapReduce数据处理
假如有1T的数据,我想一行一行正则过滤出想要的内容。就需要
- 把数据导入HDFS
- 定义map方式,也就是把key设置成行数,把value设置为每行内容
- 定义reduce:通过正则方式进行匹配,正确的内容通过reduce聚合起来返回
那么Hadoop就会把这个工作自动分配给你已有的n个计算结点去完成
YARN是MapReduce团队对原本框架的重构,可以理解成MapReduce v2
Spark是微软在Hadoop基础上改的,主要是解决了多余的中间结果读写问题,而是用cache来存(貌似?);并且还可以同时包含多个map和reduce。spark用起来比mr方便点
另外spark适用于实时计算,但是Hadoop不大适合,适合离线计算;这肯定也是因为那个鸡肋的中间结果读写
Hive是包在Hadoop外面的壳,Facebook搞的,把MapReduce程序包装成了类SQL,可能不会代码的人用起来方便点吧
HDFS基本原理
原理简单但是……估计操作更简单?
结构:
- nameNode负责维护数据block对应的dataNote映射信息
- DataNode当然就存具体block了
形式:
- 一个block存在3个区域中,这3个区域还要分布在2个主机上,防止数据挂掉(不知道这数据是默认的还是?)
- 原始的数据是会被分成小的block的。比如一个100m的数据可能被分成66m的block1和36m的block2
- block被写入HDFS的时候,是流式的,即一个block被分为更小的块,第一块写进host1,然后host1把它写给host2,这时候第二块又写进host1,同时host2写完了再把刚刚的第一块写给host3……
MapReduce基本原理
用户自己定义好map和reduce两个函数。
- map函数:接受一个键值对(key-value pair),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。
- reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
例:统计词频:
1 | map(String key, String value): |