作者:平平您好 | 来源:互联网 | 2023-07-29 10:03
单节点计算机的计算能力和数据存储能力有限,因此,在进行大规模数据处理时必须使用由多个计算机节点组成的集群。但是在集群这样一个分布式环境下传统单机环境有很大的不同,具体体现在:a)计算任务
单节点计算机的计算能力和数据存储能力有限,因此,在进行大规模数据处理时必须使用由多个计算机节点组成的集群。但是在集群这样一个分布式环境下传统单机环境有很大的不同,具体体现在:
a) 计算任务的划分
b)网络不确定性,分布式环境下的进程间同步互斥等
c)系统硬件的不确定性,集群环境下硬件出现故障是常态
d)系统软件的不确定性,
本文从一个简单的计算场景开始 分析 分布式计算环境涉及的技术。
一,简单的程序场景
我们做如下考虑,对输入数据集进行排序。随着输入数据集的不断增加,计算资源也从单计算节点增加到多计算节点。我们不利用任何分布式系统,用脚本例如bash来实现利用多计算节点同时并行处理数据。场景变化顺序:单节点单进程---》单节点多进程---》多节点多进程
图1 三个简单的程序场景
在第一个场景向第三个场景变化过程中,需要用脚本实现的功能包括
a)输入数据划分和拷贝,将输入数据分别远程拷贝到各个计算节点
b)启动数据处理进程,分别启动各个节点上的处理集成
c)等待计算过程结束,全部节点计算完成,整个任务才算结束
c)将计算结果拷贝到一起,将各个节点上的处理结果拷贝到同一个节点
这个过程会面临以下几个主要问题
1)数据划分不合理,数据(任务)划分只能够以粗粒度的方式进行,会导致个节点完成任务的时间相差很大,导致资源浪费
2)数据拷贝过程复杂,拷贝数据须对网络进行配置,同时频繁的数据拷贝降低了程序的可移植性
3)无法监控任务的处理进度,主程序只能够被动等待各节点运行结果
4)无法处理系统异常,即便有机器当机或进程崩溃,程序也无法进行异常处理,例如重新启动处理进程
分布式计算环境应该解决以上问题,提供以下功能
1)自动任务划分和调度
2)监控任务执行的过程
3)对各种异常进行自动化处理
4)以合理粒度划分计算任务
二 分布式存储系统和并行计算框架
分布式存储系统和并行计算框架可以解决以上问题,
图 2 分布式计算框架和分布式存储系统
分布式文件系统
a)提供全局的文件命名空间,不同节点上的进程均可以看到相同的目录数据
b)数据分块支持并行IO,多备份支持高可靠性,
c)输入文件和输出文件在同一个逻辑地址,使程序可移植性好
并行计算框架
a)通过agent启动各节点上的处理进程(如mapreduce中的jobstracker)
b)任务划分(调整输入数据集的划分粒度,使系统处理能力达到最优)
c)监控各任务的运行过程,一切系统优化的基础
d)合理异常处理(节点当机、进程异常退出、任务计算时间过长等)
三 分布式文件系统应该具备的功能
抽象:
如何做到高可靠性(多备份)
如何做到高可扩展性(scale out)
如何做到高性能(数据分块,并行IO)
具体:
数据如何放置和定位,集中式元数据寻址或一致性hash寻址
数据如何分块和备份,设置特定大小的数据块
存储节点当机或磁盘损坏,数据怎么迁移
新增加存储节点或磁盘,数据怎么迁移
如何保证同一数据块的多个备份具有强一致性
存储系统出现异常,怎么恢复数据 存储系统对外接口(cmd,api,posix)
四 小结
MapReduce,MPI是两个常见的并行处理框架,分布式文件系统为并行计算框架提供了必要的基础设施。