分布式如何解决大数据的存储与计算问题个人理解
-
分布式:如何解决大量数据的计算和存储问题的?
-
问题1:为什么不用MySQL存储和分析计算?
- 数据量大,MySQL存储不了
- 即使能存储,处理的性能也很差
- 数据的价值会随着时间的流逝而逐渐降低
- 离线架构:以一定时间为单位处理数据
- 今天处理昨天的数据,时效性比较慢【分钟及以上级别】
- 实时架构:以数据生成为单位处理数据
- 数据产生一条处理一条,时效性比较高【ms级别】
- 数据种类的多样化
-
问题2:如何解决数据大无法存储或者计算的问题?
- 分布式:分而治之
- 先分
- 计算处理
- 后合
- 定义:就是将多台机器的资源【集群】在逻辑上合并成==一个整体==,通过分布式的软件,提供分布式的服务
- 过程
- step1:有一个很大的任务:存储、计算
- step2:提交给分布式服务,分布式服务实现分的过程
- 将这个很大的任务拆分成若干个小的任务
- step3:分布式服务将若干个小的任务分配给多台机器共同执行,每台机器处理不同的小任务
- step4:当用户需要获取结果时,要将所有小任务的结果进行合并,返回最终结果
- 举例
- 存储
- 机器:3台:8T = 24TB
- 文件:15TB
- 过程
- 用户提交存储给分布式存储服务:15TB
- 分布式服务会将这个文件拆分
- Block1:5TB
- Block2:5TB
- Block3:5TB
- 分布式服务将这个三个5TB的块,存储到三台机器,每台机器存储5TB
- 元数据:必须记录这个文件与这三个块,以及三个块在三台机器存储位置的这个信息
- 当用户读取这个文件,向分布式服务请求读取,分布式服务要根据当初这个文件拆分的三个块合并,返回给用户
- 计算
- 机器:3台:2Core 4GB => 6Core 12GB
- 文件:9GB =》 累加 : 1 + …… +9
- 过程
- 用户提交计算给分布式计算服务: 1 + …… +9
- 分布式服务会将这个计算拆分
- task1:1+2+3
- task2:4+5+6
- task3:7+8+9
- task4:将其他task的结果累加
- 将三个task分配给三台机器来运行计算
- node1:task1:6
- node2:task2:15
- node3:task3:24
- 启动Task4将三台机器的结果进行合并
- node3:task4:45
- 将最后结果返回给用户
- 存储
- 分布式:分而治之
-
问题3:分布式解决了什么问题?
- 解决了大数据量的存储和计算的问题
- 单台机器资源不足问题
- 单台机器资源性能差问题【主要】
-
问题4:分布式的通用架构是什么样的?【不包括zookeeper】
- 主从架构:主从节点进程
- 主节点:管理节点
- 主要负责分布式服务的管理类操作
- 管理所有从节点的死活
- 管理任务的分配
- 接客:接受客户端的请求
- 不同分布式从节点的进程名称都不一样:Leader、NameNode,ResourceManager、Master……
- 主要负责分布式服务的管理类操作
- 从节点:负责管理每一台机器自己的资源
- 有几台机器,就有几个从节点
- 不同分布式从节点的进程名称都不一样:Follower、DataNode、NodeManager、Worker……
- 接受主节点分配的任务【小任务】,调用自己机器的来执行任务
-
问题5:分布式架构中存在问题?
- 单点故障问题:主节点只有一个,如果主节点进程或者所在机器故障,会导致整个分布式服务不可用的
- 分布式数据一致性问题:多台机器要共享同一份数据,如何保证读取的数据一致性问题
- 解决:Zookeeper
-
问题6:zookeeper如何解决分布式的两个问题?
- 问题:数据一致性问题
- 利用ZK实现一致性存储,将数据存储在ZK中
- 所有节点都从ZK中读取数据
- 问题:主节点单点故障问题
- 解决:分布式框架可以构建多个主节点,保证同一时刻只有一个是工作状态
- 状态
- Active:工作状态
- Standby:备份状态
- 问题:如何决定谁是工作谁是备份?
- 解决:利用zookeeper的临时节点进行辅助选举
- 实现:让两个主节点A和B都到ZK中创建一个同名临时节点file,谁创建成功,谁就是Active,另外一个由于节点已存在,就会创建失败
- 假设A创建成功,A就是Active的
- B作为Standby,并为file节点设置监听,如果A故障,与ZK的会话会断开,file这个临时节点,就会被删除,B会受到这个监听的信息,发现A故障,就会切换为Active状态
- 问题:数据一致性问题
-
-
Zookeeper:解决分布式存在的问题
- 功能
- 用于存储共享数据:元数据、索引数据
- 辅助选举
- 所有分布式框架,要么利用zk解决分布式问题,要么自己实现类似ZK的解决方案
- 问题7:zookeeper自己也是分布式的,它的问题需要自己解决?
- 问题:如果有一台ZK故障了,是否影响?
- 不影响
- zk是公平节点,zk每一台节点存储的内容是一致的,而且任何一台ZK都可以接受读写请求
- 问题:zk如何保证每台机器的内容是一致的?
- 限定只能由leaderxier,leader同步给其他节点
- 问题:如果leader故障怎么办?
- 公平节点:每台机器都可以被选举为Leader
,leader同步给其他节点
- 公平节点:每台机器都可以被选举为Leader
- 问题:如果leader故障怎么办?
- 公平节点:每台机器都可以被选举为Leader
- 问题:如果有一台ZK故障了,是否影响?
- 功能
[外链图片转存中…(img-l9kYu1r2-1606877554427)]
- Hadoop:大数据存储和计算的问题=》设计:分布式方案