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:数据的反压机制 基本思想:依据上 ...
随机推荐
- 3. ELMo算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- UML类图关系大全【转】
UML类图关系大全 1.关联 双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...
- Angularjs的那些事 – 视图的生命周期
Angularjs的最主要的一个应用场景就是单页面应用(SinglePageApplication),但是SPA中会有一个明显的问题,在视图切换的时候,它只会用新视图去替换视图容器内的HTML,但如果 ...
- shell-跳板机便捷增加用户及设置密码
我的需求: 因网络限制,某些客户机ssh到服务器都得使用跳板机进行转一下,每次帮开帐户,不麻烦不难,但总觉得还可以再优. 不多说,直接放shell.很简单 #!/bin/bash #test add ...
- Stanford Corenlp学习笔记——词性标注
使用Stanford Corenlp对中文进行词性标注 语言为Scala,使用的jar的版本是3.6.0,而且是手动添加jar包,使用sbt添加其他版本的时候出现了各种各样的问题 添加的jar包有5个 ...
- Javascript 检测键盘按键
Javascript中 有3个事件句柄在对应键盘的输入状态:keydown.keypress和keyup. 分别对应的意思是:按键被按下(按下按键但还没有抬起).点击按键(按下并抬起按键).按键抬起( ...
- [Algorithm] Asymptotic Growth Rate
f(n) 的形式 vs 判定形势 但,此题型过于简单,一般不出现在考题中. Extended: link Let's set n = 2^m, so m = log(n) T(n) = 2*T(n^( ...
- 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V3 -- 编码解码
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——Netty -- pipeline.addLast(io.netty.handler.codec.MessageToMessageCodec ...
- Kubernetes部署SpringCloud(一) Eureka 集群,解决unavailable-replicas,available-replicas条件
环境 k8s master: 1个 k8s node: 3个 三个eureka 指定node启动,并且使用network=host 完整pom.xml <?xml version="1 ...
- DBeaver连接达梦数据库
1.连接类型选择ODBC. 2.编辑驱动设置: 1)Class Name:dm.jdbc.driver.DmDriver 2)URL Template:jdbc:dm://{dbserver}/{da ...