单节点计算机的计算能力和数据存储能力有限,因此,在进行大规模数据处理时必须使用由多个计算机节点组成的集群。但是在集群这样一个分布式环境下传统单机环境有很大的不同,具体体现在:
a) 计算任务的划分
b)网络不确定性,分布式环境下的进程间同步互斥等
c)系统硬件的不确定性,集群环境下硬件出现故障是常态
d)系统软件的不确定性,
本文从一个简单的计算场景开始 分析 分布式计算环境涉及的技术。
一,简单的程序场景
我们做如下考虑,对输入数据集进行排序。随着输入数据集的不断增加,计算资源也从单计算节点增加到多计算节点。我们不利用任何分布式系统,用脚本例如bash来实现利用多计算节点同时并行处理数据。场景变化顺序:单节点单进程---》单节点多进程---》多节点多进程
图1 三个简单的程序场景
在第一个场景向第三个场景变化过程中,需要用脚本实现的功能包括
a)输入数据划分和拷贝,将输入数据分别远程拷贝到各个计算节点
b)启动数据处理进程,分别启动各个节点上的处理集成
c)等待计算过程结束,全部节点计算完成,整个任务才算结束
c)将计算结果拷贝到一起,将各个节点上的处理结果拷贝到同一个节点
这个过程会面临以下几个主要问题
1)数据划分不合理,数据(任务)划分只能够以粗粒度的方式进行,会导致个节点完成任务的时间相差很大,导致资源浪费
2)数据拷贝过程复杂,拷贝数据须对网络进行配置,同时频繁的数据拷贝降低了程序的可移植性