分布式计算应用
1.需求
2.需求分析
2.1 搭建模型
2.2 优化1
2.3 优化2
因为分布式计算的台数是根据实际的数据量来定的,数据量大,那我们就多一些服务器来进行计算,如果数量少一些,那么服务器就少一些,所以创建一个资源管理的中心,客户端需要多少资源就告诉资源管理中心,然后资源管理中心就创建多少个服务器来进行运算。
3.需要考虑的问题
3.1 数据如何进行切分
3.2 客户端如何告诉资源管理中创建服务器的台数
3.3 资源管理中心如何创建服务器
3.4 服务器如何接收到来自客户端的数据
3.5 客户端如何获取服务器端发来的计算结果
3.6 客户端如何收集整合不同服务器端发来的数据
4.功能模块
4.1 驱动器
1. 将driver的host、port、执行器的数量信息传递给资源中心,关闭与资源中心的连接
2. 创建一个serversocket,并获取输出流
3. 创建线程,用于driver将任务发送给执行器和接收执行器返回的计算结果,在线程内:
a、将需要输出的任务发送给执行器;
b、关闭输出流
c、获取输入流
d、使用一个集合来接收执行器返回的数据
4. 创建另外一个线程,用于判定是否所有的执行器已经返回结果,并打印所有执行器的计算结果
4.2 资源中心
1. 获取driver的host、port、exerutorsNum
2. 根据exerutorsNum,创建对应数量的executor
3. 并将driver的host、port传递给executor
4. 前三步在一个线程里面执行
4.3信息
4.4 执行器
1. 通过资源中心传入的参数,获取driver的host、port以及执行器的id
2. 创建一个方法,在方法内:
a、创建一个socket,并获取输入流
b、获取driver的数据
c、进行数据处理,并创建输出流
d、将结果和执行器id返回给driver
4.5任务
5.代码实现
5.1 驱动器
object Driver {
def main(args: Array[String]): Unit = {
val executorNum = 5
val driverPort = 9999
val driverHost = "localhost"
val message =