Skip to main content

并行计算

框架原生支持分布式并行计算,可以将计算任务分配到不同的计算节点并行计算再汇总,类似于Hadoop的MapReduce。 系统目前按节点类型分为数据节点、应用节点(业务逻辑)、计算节点目前正在按CPU节点和GPU节点拆分,这些节点均可参与分布式并行计算。

通用并行计算#

快速上手#

首先,我们来实现一个类似Hadoop经典的字符统计分布式并行计算实例:

public class ComputeService extends BusinessService {
// 这里演示了一个分布式并行任务,将输入的字符串按空格分解成单词后,提交给集群各节点打印输出
public String displayWords(String text) {
var computer = Cloud.compute();
for (String word : text.split(" ")) {
// 提交计算任务,各节点将分配到的单词打印在控制台
computer.run(() -> System.err.println(word));
}
return "please see the result in the console of your nodes.";
}
// 下面是一个字符统计分布式并行计算实例
public int countWords(String text) {
var computer = Cloud.compute();
// 通过闭包提交计算任务
Collection<Integer> res = computer.apply(String::length, Arrays.asList(text.split(" ")));
// 将各节点返回的计算结果汇总
int total = res.stream().mapToInt(Integer::intValue).sum();
return total;
}
}

下面我们再来看一个和Hadoop更接近的实例:

public class LetterCountComputeTask extends ComputeTaskSplitAdapter<String, Integer> {
@Override
public List<ComputeJob> split(int gridSize, String arg) {
// 将接收到的字符串拆分成单词
String[] words = arg.split(" ");
List<ComputeJob> jobs = new ArrayList<>(words.length);
// 为每个单词创建一个子任务
for (final String word : words) {
jobs.add(new ComputeJobAdapter() {
@Override
public Object execute() {
System.err.println(">>> Printing '" + word + "' from compute job.");
// 子任务返回单词长度
return word.length();
}
});
}
// 将任务返回,分发给各节点执行
return jobs;
}
// reduce最后汇总各计算节点返回的值
@Override
public Integer reduce(List<ComputeJobResult> results) {
int sum = 0;
for (ComputeJobResult res : results) {
sum += res.<Integer>getData();
}
return sum;
}
}

下面我们来应用上面的LetterCountComputeTask计算任务:

public class ComputeService extends BusinessService {
public int letterCountTask(String text) {
var computer = Cloud.compute();
// 在集群中执行上面定义的计算任务,并等待各节点完成后返回结果
return computer.execute(LetterCountComputeTask.class, text);
}
}

未完,待续,文档待更新......

MapReduce#

并行计算服务#

定时任务#

负载均衡#

常用统计学并行计算#

文档待更新......

方差、标准差#

变异系数#

协方差#

相关系数#

二项式分布#

超几何分布#

泊松分布#

线性回归#