1 zookeeper
大数据领域里面一个分布式服务协调框架,主要是帮助其他的框架正常运行
1.1 节点类型
- 永久节点:
普通永久节点
序列化永久节点
- 临时节点:客户端一旦断开连接,节点消失
普通临时节点
序列化临时节点
1.2 watch机制
类似于监听器
2 hadoop
2.1 hdfs:分布式文件存储系统
- namenode:主节点,主要用于管理元数据信息
fsimgae:一份比较完整的元数据信息
edits:最近一段时间客户端的操作日志,操作次数达到100w次,还有时间限制1小时
- datanode:数据存储,以block块为单位来进行存储,默认block128M
- secondarynamenode:主要进行合并fsimage以及edist文件
2.1 读取数据的过程:必须掌握
第一步:客户端请求namenode上传文件
第二步:namenode校验客户端是否能够上传
第三步:客户端请求namenode第一个block块上传位置
第四步:namenode通过机架感知原理,找到离客户端最近的一个block块的位置,告诉给客户端
第五步:与datanode建立长连接pipeline管道,客户端以packet(64kb)的方式发送数据到datanode上面去
2.2 写入数据的过程:必须掌握
第一步:客户端请求namenode上传数据
第二步:namenode校验客户端是否有权限,文件是否存在,校验通过,直接告诉客户端允许上传
第三步:客户端请求namenode第一个文件block块地址
第四步:namenode寻找对应的block块地址返回给客户端
第五步:客户端直接与对应的datanode进行通信,将数据写入到datanode对应的block块里面去,数据以packet为单位进行传输,packet默认是64kb,datanode反向的进行数据校验
写入过程遵循就近原则:
心跳比较活跃
磁盘比较空闲
2.3 MapReduce:
2.3.1 八个步骤:
第一步:读取文件,解析成key,value对
第二步:自定义map逻辑,接收k1,v1转换成为k2,v2
第三步:分区,相同key的数据发送到同一个reduce里面去,key合并,value形成一个集合
第四步:排序,对数据key2进行排序
第五步:规约,combiner,调优步骤,可选项,比如求平均值不能使用
第六步:分组,key2合并,value形成一个集合
第七步:自定义reduce逻辑,接收k2,v2转换成新的k3,v3输出
第八步:输出k3,v3进行保存
2.4 yarn:资源调度管理平台
2.4.1资源调度方式:
- FIFO:先进先出
- fair scheduler:公平调度Apache版本使用
- capacity scheduler:容量调度器,cdh使用的调度方式
- 自定义capacity scheduler:配置实现,不同用户提交不同的任务
3 hive
3.1 数据仓库基本概念
数据仓库主要就是面向数据分析,将hive的元数据信息保存在MySQL里面
3.2 独立表模型:
外部表:external,外部表删除表的时候,不会删除hdfs的数据
内部表:删除表的时候,会删除hdfs的数据
分区表:一般与外部表或者内部表搭配使用,分文件夹 ,关键字:partition by
分桶表:一般与外部表或者内部表搭配使用,分文件,关键字:cluster by into xxx buckets
3.3 hive基本语法
group by
自定义函数
爆炸函数explode
例如lateral view 主要与分析函数(开窗函数)分组求topN
row_number over
rank over
dens_rank over(partition by xxx order by xxx)
例:select * ,row_number() over(partition by s_id order by score) from user;
3.4 数据存储格式、压缩、调优
3.4 1 数据存储格式:行式存储以及列式存储
行式存储:textFile,sequenceFile
列式存储:orc,parquet
在ods层:使用textFile
在dw层:使用orc存储格式,配合snappy压缩,数据压缩比6:1
原始文件100GB,使用orc格式配合sanppy之后数据大概剩下100/6
3.5 hive调优:尽量多掌握几个
- map端join
- 合并小文件
- 控制map个数以及reduce个数
- 表的优化
- 本地模式
- 推测执行
4 flume-数据采集工具
4.1离线分析
将数据保存到hdfs里面去,hdfsSink:文件滚动的时长,文件event数据量,文件大小
文件夹滚动策略:多长时间在hdfs上面滚动生成一次文件夹
问:flume怎么配置将数据发送到hdfs上面去(一般接近128M)
- 多长时间发送一次数据到hdfs上面去
hdfs.rollInterval
hdfs.rollSize
hdfs.rollSize
- 多长时间在hdfs上面生成一个文件夹
hdfs.round
hdfs.roundValue
hdfs.roundUnit
4.2 实时处理
将数据发送到kafka里面去
5 sqoop-数据导入导出工具
重点:
- 增量数据怎么解决,利用update_time
- 减量数据怎么解决:做拉链表
- 更新数据怎么解决:做拉链表
6 azkaban-任务调度工具
7 oozie-完全替代azkaban
8 impala:完全替代hive,比较消耗内存,官方建议内存128GB起步
9 hue:管理工具,主要与其他的各种框架进行整合
10 kafka:消息队列
作用:解耦,异步,并行,一般用于数据的统一的管理平台
11 软件框架之间的依赖关系
- zookeeper依赖jdk
- hadoop:ha模式:依赖zk
- hive:依赖hadoop和MySQL
- flume没有依赖
- sqoop没有依赖
- azkaban没有依赖
- impala依赖hive,必须启动hive,Metastore服务
- oozie依赖于hadoop
- hue没有依赖,可以独立运行
- redis依赖C程序,yum -y install gcc-c++
- HBASE依赖于zookeeper和hadoop
- elk没有依赖
- kafka依赖zookeeper