目录
大数据技术
- 分布式存储
- 分布式计算
- 分布式的批处理
攒一段时间的数据,在未来的某一个时间来处理这批数据 - 分布式的流处理
数据不需要攒,每产生一条数据,立马对这条数据进行处理,将结果推送前端页面存储到数据库中形成报表给老板
eg:11.11天猫大屏幕 QQ实时在线分布情况 - 机器学习 包含深度学习(神经网络)
机器学习是一门新兴技术,凡是预测类的工作需要用到机器学习
分布式存储原理
- NameNode、 SecondaryNameNode、DataNode、block(最小存储单元)
- 备份机制:解决数据安全
- 权限
- 安全模式
- 读写流程
搭建集群的三种模式
伪分布式
主要用来测试环境
完全分布式
高可用完全分布式
搭建教程
安全模式
- 加载fsimage
- 如果edits内容不为空,则NameNode自己来合并
- 检查DataNode的健康情况
- 检查各个节点上的blcok块以及副本是否符合要求,如果不符合要求,指挥存储数据丢失的DN做备份。
- 如果DN挂掉,则指挥做备份
各名词作用
NameNode
掌控全局,管理DataNode以及元数据
管理元数据(存储在内存中):
- 文件的上传时间文件的上传时间
- 权限
- 文件属主
- 上传文件的block数以及blockID
- block的位置信息(由DataNode在集群启动时汇报,不会持久化)
- DN的心跳信息
- DN的位置信息
接受客户端的读写请求
收集DataNode汇报的block列表信息
NameNode保存的metedata信息包括:
- 文件owership和permissions
- 文件大小,时间
- block列表:blockID
- Block副本位置(由DataNode上报)
DataNode
- 存储block模块
- 接收客户端的读请求
- 向active NN汇报心跳
- 构建pipeline
- 管理本机上的block元数据
SecondaryNameNode
NameNode元数据位于内存中,但是内存不稳定,所以将数据持久化到磁盘中
合并触发机制:
- 超过3600毫秒
- 如果edit文件超过64M
- 合并流程
基于拉来的edits文件重演出产出元数据
将重演出的元数据合并到fsimage中
将合并后的fsimage推送给NN
将edits.new文件的后缀去掉
注意:并不是所有的元数据都会持久化:
除了block的位置信息,其他的元数据都互持久化(变动频率高变动大)
这样的话,当HDFS集群重启,namenode中的元数据就会有所缺失无法对外提供服务
解决:HDFS启动的时候,所有的DN都会向NN汇报当前节点的block信息
zkfc
监控各自的NameNode,将监控的情况汇报给ZK集群
接受zookeeper的选举结果,确认一下另外一个NN是否真的挂了,将自己监控的NameNode提升为active状态
journalnode
写数据的时候只要保证半数以上的节点成功就可以了
最终一致性/弱一致性
存储的是edits文件
备用的NameNode
监控journalnode中的数据变化,实时更新自己的内存元数据
将内存中的元数据持久化到fsimage中,推送到NameNode中。
HDFS的读写流程
写的流程
如果要上传一个大文件,client切割大文件,计算大文件block数,大文件地址/128M=block数量
client对NameNode汇报:
(1)当前大数据文件的block数
(2)当前大文件属于谁 权限
(3)上传时间
for(Block block:bocks(大文件切割出来的Block)){
client切割出来一个block
client请求block块的Id号以及地址
因为NameNode能够掌控全局,管理所有的DN,所以它将负载不高的DN地址返回给client
client拿到地址后找到DN去上传数据
DN将block存储完毕之后会向NameNode汇报当前的存储情况
}
client向DataNode写数据的详细流程
读的流程
备份机制
原理图
- 如果是集群外操作,第一个Block存储在负载不是很高的一台服务器上(默认128M dfs.blocksize,严格按照字节切割,如果存储的是中文,会出现乱码问题。);如果集群内操作,在本机
- 第一个备份的block存储在与第一个block不同机架的随机一个服务器上
- 第2个备份的block存储在与第一个备份相同的机架的随机服务器上
- 其他备份随机存
权限
依据系统的用户系统 ()
HDFS优缺点
优点
缺点
思维导图