Master-Worker集群计算demo
Task为要执行的任务实体类:
package com.viewhigh.mdop.bi.test; /**
* Created by zzq on 2017/5/11.
*/
public class Task {
private int id;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public Task setName(String name) {
this.name = name;
return this;
}
}
Master为分布式计算代理类,负责创建多个工作线程来处理任务,并将结果汇总,内部维护任务队列,结果map集合和线程map集合:
package com.viewhigh.mdop.bi.test; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue; /**
* Created by zzq on 2017/5/11.
*/
public class Master {
//任务队列
private Queue<Task> workerQueue = new LinkedBlockingQueue(); //工作线程集合
private Map<Integer, Thread> workerMap = new HashMap(); //工作线程返回结果
private Map<Integer, Object> workerResult = new ConcurrentHashMap(); public Map<Integer, Object> getWorkerResult() {
return workerResult;
} public Master(Worker worker) {
int currProcessors = Runtime.getRuntime().availableProcessors();
System.out.println("当前机器最大线程数:" + currProcessors); worker.setWorkerQueue(workerQueue);
worker.setWorkerResultMap(workerResult); for (int i = 0; i < currProcessors; i++) {
workerMap.put(i, new Thread(worker));
}
} public void submitTask(Task task) {
workerQueue.add(task);
} public void submitTask(List<Task> taskList) {
for (Task task : taskList)
workerQueue.add(task);
} public void execute() {
for (Thread thread : workerMap.values()) {
thread.start();
}
} public boolean finish() {
for (Thread thread : workerMap.values()) {
if (thread.getState() != Thread.State.TERMINATED)//线程未终止
return false;
}
return true;
}
}
Worker承担计算和计算结果汇总,处理队列中的Task:
package com.viewhigh.mdop.bi.test; import java.util.Map;
import java.util.Queue; /**
* Created by zzq on 2017/5/11.
*/
public class Worker implements Runnable { private Queue<Task> workerQueue;
private Map<Integer, Object> workerResult; @Override
public void run() {
while (true) {
Task task = workerQueue.poll(); if (task == null) break; Object ret = handle(task);
workerResult.put(task.getId(), ret);
}
} public Object handle(Task task) {
try {
Thread.sleep(1000);
return task.getName();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
} public void setWorkerQueue(Queue<Task> workerQueue) {
this.workerQueue = workerQueue;
} public void setWorkerResultMap(Map<Integer, Object> workerResult) {
this.workerResult = workerResult;
}
}
测试类:
package com.viewhigh.mdop.bi.test; import org.junit.Test; import java.util.ArrayList;
import java.util.List; import static org.junit.Assert.*; /**
* Created by zzq on 2017/5/11.
*/
public class MasterTest {
@Test
public void submitTask() throws Exception {
List<Task> list = new ArrayList(); for (int i = 0; i < 10; i++) {
Task task1 = new Task();
task1.setId(i);
task1.setName("_序号_:" + Integer.toString(i));
list.add(task1);
} Master master = new Master(new Worker());
master.submitTask(list); master.execute();
long currTime = System.currentTimeMillis(); while (!master.finish()) {
// System.out.println("执行中。。。");
} // for (Object a : master.getWorkerResult().values())
// System.out.println((String) a);
System.out.println("消耗的时间:" + Long.toString(System.currentTimeMillis() - currTime));
} }
Master-Worker集群计算demo的更多相关文章
- RDD:基于内存的集群计算容错抽象(转)
原文:http://shiyanjun.cn/archives/744.html 该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fa ...
- RDD:基于内存的集群计算容错抽象
转载自:http://shiyanjun.cn/archives/744.html 摘要 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Dat ...
- ActiveMQ使用Zookeeper+LevelDb配置Master/Slave集群
前言: 本文介绍的AMQ集群是Master-Slave模式的,官网介绍三种方案: (1)基于共享文件系统的,(2)基于JDBC,(3)基于可复制的LevelDB. 关于三种方式的对比网上已经有很多,本 ...
- Spark 论文篇-Spark:工作组上的集群计算的框架(中英双语)
论文内容: 待整理 参考文献: Spark: Cluster Computing with Working Sets. Matei Zaharia, Mosharaf Chowdhury, Micha ...
- Spark 论文篇-RDD:一种为内存化集群计算设计的容错抽象(中英双语)
论文内容: 待整理 参考文献: Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster C ...
- Dubbo入门实例 本地伪集群测试Demo
1. 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提 ...
- RocketMQ集群部署记录
RocketMQ集群部署记录 #引用 https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 A ...
- activemq集群搭建Demo
activemq5.14.5单节点安装Demo 第一步:创建集群目录 [root@node001 ~]# mkdir -p /usr/local/activemqCluster 复制单点至集群目录 [ ...
- Spark Streaming性能优化系列-怎样获得和持续使用足够的集群计算资源?
一:数据峰值的巨大影响 1. 数据确实不稳定,比如晚上的时候訪问流量特别大 2. 在处理的时候比如GC的时候耽误时间会产生delay延迟 二:Backpressure:数据的反压机制 基本思想:依据上 ...
随机推荐
- 24款最好的jQuery日期时间选择器插件
如果你正在创建一个网络表单,有很多事情你需要在你的应用程序中使用.有时您需要特别的输入,从用户的日期和时间,如发票日期,生日,交货时间,或任何其他此类信息.如果你有这样的需要,可以极大地从动态的jQu ...
- java 汉诺塔实现自动演示
1.增加计时功能,显示用户完成移动盘子所花费的时间 2.用户可以设置最大和最小盘子的大小 3.用户可以选择播放和暂停背景音乐 4.用户可以设置盘子的数目 5.用户可以设置盘子的颜色以及背景的颜色 6. ...
- mininet下建立拓扑时关于远程控制器的一个小问题
最近重装了系统和mininet后,使用mininet时遇到了一点小问题,一开始忽视了细节,使得自己被这个问题困扰了好一会儿,好在后来还是发现了问题所在,故记录下来. $ sudo mn --topo ...
- Mybatis(二)基于注解的入门实例
前言 上一篇简单的介绍了Mybatis的概念和基于XML来实现数据库的CRUD,这篇给大家实现基于注解的CRUD. 一.初始搭建 在基于注解当中前四步和上一篇基于XML是一样的,分别是: 1)创建数据 ...
- [Bayes] Understanding Bayes: Updating priors via the likelihood
From: https://alexanderetz.com/2015/07/25/understanding-bayes-updating-priors-via-the-likelihood/ Re ...
- 写在开始前---web前后端对接
现阶段接口对接问题: 1.接口乱,不清晰明了,无文档或文档过期 2.接口和业务不匹配.不可用 3.前后端沟通,工程复杂化 4.不能深入了解业务 5.任务延期 注:前后端对业务深入了解,接口之间都是有联 ...
- 【租房合同】2017北京市房屋租赁合同(自行成交版).doc
最近在北京租房,找租房合同 这个文档还是比较新的,在百度文库上需要积分下载的文档,现在共享给大家吧. 下载地址: https://pan.baidu.com/s/1cEh7lhBqQgkJhB32Df ...
- [原]openstack-kilo--issue(十九) ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named main
查看此问题的时候请先查看 这个问题包含在(十)中,此篇只是从(十)中分离出来 openstack-kilo--issue(十)ERROR: openstack Unable to establish ...
- Web 通信 之 长连接、长轮询(long polling)(转载)
基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...
- Hadoop初期学习和集群搭建
留给我学习hadoop的时间不多了,要提高效率,用上以前学的东西.hadoop要注重实战,把概念和原理弄清楚,之前看过一些spark,感觉都是一些小细节,对于理解hadoop没什么帮助.多看看资料,把 ...