BSP模型与实例分析(一)

简介:
一、BSP模型概念

BSP(Bulk Synchronous Parallel,整体同步并行计算模型)是英国计算机科学家Viliant在上世纪80年代提出的一种并行计算模型。Google发布的一往篇论文(《Pregel: A System for Large-Scale Graph Processing》)使得这一概念被更多人所认识,据说在Google 80%的程序运行在MapReduce上,20%的程序运行在Pregel上。和MapReduce一样,Google并没有开源Pregel,Apache按Pregel的思想提供了类似框架Hama。

关于BSP,按我的理解做一些解释:

1. Processors指的是并行计算进程,它对应到集群中的多个结点,每个结点可以有多个Processor;
2. Local Computation就是单个Processor的计算,每个Processor都会切分一些结点作计算;
3. Communication 指的是Processor之间的通讯。我们接触的图计算往往需要做些递归或是使用全局变量,在BSP模型中,对图结点的访问分布到了不同的Processor中,并且往往哪怕是关系紧密具有局部聚类特点的结点也未必会分布到同个Processor或同一个集群结点上,所有需要用到的数据都需要通过Processor之间的消息传递来实现同步;
4. Barrier Synchronization 又叫障碍同步或栅栏同步。每一次同步也是一个超步的完成和下一个超步的开始;
5. Superstep 超步,这是BSP的一次计算迭代,拿图的广度优先遍历来举例,从起始结点每往前步进一层对应一个超步。
6. 程序该什么时候结束呢?这个其实是程序自己控制,一个作业可以选出一个Proceessor作为Master,每个Processor每完成一个Superstep都向Master反馈完成情况,Master在N个Superstep之后发现所有Processor都没有计算可做了,便通知所有Processor结束并退出任务。
二、Hama的BSP实现原理

Apache Hama可以说是一个利用Hadoop的基础设施自己封装的一个BSP计算模型的实现,它虽然跟Hadoop有关但是不使用Hadoop集群,而是用的自己的集群。依赖ZooKeeper分布式锁作为作业的调度控制,可以用HDFS/Local/HBase等文件系统作输入输出。

(一) 基本结构

Hama的集群由一个BSPMaster和多个互不关联的GroomServer作计算结点组成,HDFS和Zookeeper都可以是独立的集群。启动从BSPMaster开始,如果是master会启动BSPMaster、GroomServer两个进程,如果只是计算结点则只会启动GroomServer,启动/关闭脚本都是Master机器远程在GroomServer机器上执行。下面分别解释下几个基本概念:

1. BSPMaster 即集群的主,负责了集群各GroomServer结点的管理与作业的调度,就我所知它还存在单点的问题。相当于Hadoop的JobTracker或HDFS的NameNode;
2. BSPGroomServer 即计算结点,GroomServer是物理上的概念,也相当于是BSPPeer的宿主,负责了BSPPeer对外的消息通讯、机器状态报告等,相当于Hadoop的TaskTracker或HDFS的DataNode,在集群中往往和DataNode一一对应的部署(底层机制就是Hadoop的TaskTracker);
3. BSPPeer 即BSP中的Processor,当作业过来的时候,任务jar包和配置会被同步过来,GroomServer就启动一个独立JVM进程来执行一个BSPPeer实例,就像TaskTracker的作法一样。BSPPeer是分布式计算中的逻辑计算单元;
4. BSPJobClient 作业客户端,职责是将作业所需jar以及配置提交给BSPMaster
5. Zookeeper 分布式锁。用于实现Barrier Synchronisation机制。在ZK上,进入BSPPeer主要有进入Barrier和离开Barrier操作,所有进入Barrier的Peer会在zk上创建一个EPHEMERAL的node(/bsp/JobID/Superstep NO./TaskID),最后一个进入Barrier的Peer同时还会创建一个ready node(/bsp/JobID/Superstep NO./ready),Peer进入阻塞状态等待zk上所有task的node都删除后退出Barrier
(二) 输入与输出

Hama的输入输出文件格式、分块、文件传输等机制都跟HDFS是一样的,也都是K-V对,派生自Writable。输入的K-V对为结点(VertexWritable)和邻接结点集合(VertexArrayWritable)。

(三) 消息通讯

图计算涉及到大量消息传递,Hama不完全是实时传送,消息的传输发生在Peer进入同步阶段后,并且对同一个目标GroomServer的消息进行了合并,两个物理结点之间每一次超步其实只会发生一次传输

(四) 图算法运用

Hama其实只提供了一个图计算框架,算法都是需要自己去实现的。理想的情况是图文件分块,Peer尽可载入本地文件作计算,这样即加快了图载入时间也减少了网络传输。不过事实是可能不能这样假设,为使结构尽更简单,对图的切割往往只是将结点用简单的Hash算法分布到Peer上,不能对图作任何局部聚类的假设。
本文来源于"阿里中间件团队播客",原文发表时间" 2012-06-08"

相关文章
|
4月前
|
人工智能 安全 数据安全/隐私保护
OpenClaw(Clawdbot)汉化版完整搭建指南 全平台安装+附阿里云上部署教程
在AI工具爆发的2026年,OpenClaw(曾用名Clawd、Moltbot)以黑马之姿崛起——一周内GitHub Stars从7800飙升至12万+,成为历史上增长最快的开源项目之一。这款由PSPDFKit创始人Peter Steinberger打造的通用AI助手,打破了普通聊天机器人的功能局限,能真正执行系统控制、浏览器自动化、邮件管理等实用任务。但原版全英文界面对中文用户不够友好,第三方团队推出的汉化版完美解决这一痛点,实现命令行与网页控制台的全中文适配,让国内用户轻松上手。
7076 13
|
机器学习/深度学习 存储 NoSQL
Graph RAG: 知识图谱结合 LLM 的检索增强
RAG(Retrieval Argumented Generation)这种基于特定任务/问题的文档检索范式中,我们通常先收集必要的上下文,然后利用具有认知能力的机器学习模型进行上下文学习(in-context learning),来合成任务的答案。这次,我们借助 LLM 的力量,强化下 RAG。
3478 0
Graph RAG: 知识图谱结合 LLM 的检索增强
|
4月前
|
机器学习/深度学习 监控 算法
基于 YOLO26 的交通标识智能检测(中英文双版) | 附完整源码与效果演示
随着自动驾驶技术的兴起,交通标识检测的重要性进一步凸显。自动驾驶车辆需要实时、准确地识别周围环境中的交通标识,以便做出正确的驾驶决策。此外,智能交通系统也需要通过交通标识检测来实现交通流量的优化和交通违法行为的自动识别。 基于深度学习的目标检测算法,特别是 YOLO 系列算法的出现,为交通标识检测提供了新的思路。这些算法可以自动学习交通标识的特征,实现端到端的检测,不仅提高了检测精度,还大大提高了检测速度,为实时应用奠定了基础。
|
9月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
779 127
|
7月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
55717 11
|
JavaScript 前端开发 安全
跨域解决方案有哪些?
本文介绍了多种跨域解决方案,包括JSONP、CORS、postMessage、WebSocket、document.domain+iframe、window.name、location.hash、Node.js代理、Nginx代理和CORS Anywhere。每种方法都有其适用场景和优缺点,如JSONP简单但只支持GET请求,CORS安全但兼容性稍差,WebSocket适用于实时通信但需服务器支持。开发者可根据具体需求选择合适的跨域方案。
698 3
跨域解决方案有哪些?
|
算法
数学建模国赛/美赛常见赛题类型及建模方案(纯干货)
主客观概念主要是在指标定权时来划分的。主观评价与客观评价的区别是,主观评价算法在定权时主要以判断者的主观经验为依据,而客观评价则主要基于测量数据的基本特性来综合定权
1458 0
数学建模国赛/美赛常见赛题类型及建模方案(纯干货)
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
1021 1
|
人工智能 PyTorch TensorFlow
分布式训练:大规模AI模型的实践与挑战
【7月更文第29天】随着人工智能的发展,深度学习模型变得越来越复杂,数据集也越来越大。为了应对这种规模的增长,分布式训练成为了训练大规模AI模型的关键技术。本文将介绍分布式训练的基本概念、常用框架(如TensorFlow和PyTorch)、最佳实践以及可能遇到的性能瓶颈和解决方案。
2108 2
|
数据采集 JavaScript Java
一款分布式爬虫管理平台,支持多种语言和框架
项目介绍 Crawlab —— 一个基于 Golang 的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。 主要功能: