异构集群,统一计算 在微博机器学习平台的应用

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 内容简要:一、微博机器学习平台简介二、异构集群,多计算引擎–Before三、异构集群,统一计算–Now四、解决方案五、机器学习流程自动化

内容简要:

一、微博机器学习平台简介

二、异构集群,多计算引擎–Before

三、异构集群,统一计算–Now

四、解决方案

五、机器学习流程自动化

 

 

一、微博机器学习平台简介

微博机器学习平台为业务方在各种推荐场景下,提供端到端、一站式、自动化机器学习流程的解决方案,整体流程图如下:

image.png

二、异构集群,多计算引擎–Before

image.png

由上图可见,异构集群和多计算引擎的问题与痛点非常明显,接下来分别做出分析。

 

(一)异构集群

异构集群三大特性:入口分散、存储资源割裂、计算资源割裂

 

1.入口分散

当算法工程师想做一个数据处理或者机器学习时,他首先要知道要在哪个集群上,然后找到相应的Gateway,接着去申请登录权限,最后登录上去进行相应的操作。这样就会非常的分散,造成用户体验感混乱。

 

2.存储资源割裂

Hadoop集群、云上Hadoop集群、EMR还有MaxCompute的集群,都有自己的存储和云数据,这就造成了一个个的数据孤岛,数据无法共享。当一个集群生成的数据要在其它的集群上使用时,需要做一个数据搬运的工作,非常浪费时间,相应地对机器学习流程的自动化也会造成割裂。

 

3.计算资源割裂

各个集群的计算资源无法互相弹性使用,这样就会造成部分集群异常繁忙,部分集群较为空闲,使得计算资源无法得到最优化的利用。

 

(二)多计算引擎

多计算引擎存在三大痛点:学习成本高、开发效率低和维护难度大。

 

 

三、异构集群,统一计算–Now

针对以上的问题与痛点,我们进行了一系列建设和改造,完成了四个统一:

-   统一入口;

-   统一调度;

-   统一SQL计算引擎;

-   统一存储/元数据。

image.png

如上图所示,当一个SQL任务经过调度中心,会按需灵活调度到各个异构集群上,各个异构集群都是统一的SQL计算引擎,这样就大幅降低了算法工程师的学习成本,提升开发效率,提升代码的共享。

统一的方法是让各个异构集群都支持SQL计算引擎,然后建设了一个统一的元数据中心,做湖/仓一体化,让各个异构集群之间使用同一份元数据,实现了数据共享。

 

 

四、解决方案

由于每个异构集群的特点不同,所以对每个集群也有不同的解决方案。因此针对各个的异构集权采取分而治之的方式,根据问题自身的特点提出了相应的解决方案,方案如下:

l  统一入口、统一调度;

l  统一SQL计算引擎、统一存储/元数据:

1MaxCompute – 湖仓一体;

2)自建Hadoop – 统一元数据;

3Kubernetes – 批流混跑;

4EMR SQL计算引擎优化。

 

(一)统一入口、统一调度

image.png

如上图所示,统一入口主要是支持WebUICLI两种方式,调度中心主要有两个特点。

第一个特点就是每接入一个新的异构集群,支持Weibox即插即用,配置方式十分灵活。

第二点是调度中心支持按需做作业、排布的事情,然后根据异构集群之间计算引擎资源的使用情况来决策,将SQL计算作业提交到相应集群执行,相关的策略除了计算资源方面的还有集群之间的网络带宽。

如何实现异构集群接入实验室,精髓就在中间一排weibox。每个集群在接入调度系统的时候都有一套组件,称之为weibox

每个weibox上都部署了一些异构集群,它会把前端用户发送过来的作业根据调度中心调到相应的集群上,不仅把作业提交上去,而且能将返回作业的状态信息以及所产生的日志数据让用户看到。

经过统一入口和统一调度,让各个异构集群实现了统一的管理和调度

 

(二)统一SQL计算引擎、统一存储/元数据

1.Maxcompute - 湖仓一体

image.png/仓一体主要是让数据库和数据仓一体化、统一化。

平台有一个特点是所有的数据都是基于EMR存储展开的,有各种各样的结构化、非结构化的数据,做一些数据分析以及AI计算。EMR存储相当于一个数据湖,其他的各种服务和应用都围绕着数据湖去展开。

基于MaxCompute的集群上,有一些较高性能的深度学习的组件和机器学习的组件,比如TFgnn等。

如果使用数据湖中丰富的数据资源?MaxCompute的集群和EMR集群是两个完全异构的集群,它们之间的存储资源与计算资源完全割裂,这种数据同步方式非常低效,需要人工的介入,使用起来较为复杂,使得算法工程师做数据同步时效率低下。

基于痛点,提出了一个湖/仓一体的概念,让它的数据湖和数据仓库统一化、一体化。经过一系列的措施,如通过语言数据透视的功能、开放数据库API的能力,在MaxCompute的集群上的各种深度学习的组件,开放数据湖API的能力,使得能直接访问和读写数据湖当中的数据,建设了一个统一的元数据中心,实现了数据共享。

 

数据共享带来了什么收益?

第一点是实现了SQL跨级群的联邦计算。在MaxCompute的集群上,有一个高性能的SQL计算引擎odpsSQL。由于现在湖/仓已经达到了一体化,因此SQL语句的表无论是落在数据湖还是MC数仓上,都是可以进行跨集群计算。但是在计算的过程还存在跨集群之间网络专线性的问题,所以我们会定期分析两个集群当中SQL作业的历史实行情况,然后分析出一些热表,将比较大的热表利用网络空闲时段同步到 MC数仓当中,让它们之间的网络传输最小化。

SQL跨集群联邦计算的能力也解决了之前一大痛点,使用odpsSQL以后可以高效分布式地同步数据。有时MaxCompute集群上的组件虽然具备了直接访问数据湖的能力,但有时一些高性能的API还是会直接读取MC数上的Table。所以如果还是想使用数仓里面的数据,可以使用odpsSQL直接高效同步数据。

第二点就是MaxCompute集群上的各种深度学习和机器学习的组建可以直接读写数据湖当中的数据,生成的模型文件还有各种Check Point也可以直接写入数据湖。后续模型上线的各种服务也是围绕数据湖展开,不再需要做数据中转,大幅提升深度学习的效率与业务效果。

 

2.Hadoop - 统一元数据

Hadoop集群的痛点和问题与湖/仓一体类似,它也存在内置存储、语言数据的问题,都是基于EMR的数据湖,导致Hadoop集群的存储形成了一个数据孤岛。

image.png

如上图所示, 解决Hadoop集群问题的方法也是统一语言数据,将它的元数据和存储并入到之前已经开始建设统一的元数据系统当中,然后解决一些HDFS网络、权限、域名互通的问题。

经过统一的建设以后,在这两个集群之间实现了SQL跨集群的联邦计算。例如在SQL语句当中就一个联邦计算的简单示例,这条SQL无论放在A集群还是B集群上,都是可以进行计算。但是这种方法也存在集群之间的网络带宽问题,所以基于这个问题同样有冷热数据的分析,热数据定期同步的功能,也会分析出一些比较热的表,然后定期同步到对应的两个集群上,尽量实现本地化的计算,让计算更加的经济化。

由于网络带宽是这两个问题的最敏感点,因此会在此基础上增加一层关于网络专线最优使用的策略。这个策略本质上是通过作业以及云数据的分析,让数据跨专线的量最小化,使得作业都在本地执行。通过这样一个操作,加上Hadoop集群本身支持HiveSQLSparkSQL,因此也实现了统一。

 

3.Kubernetes - 批流混跑

Kuberenetes集群主要是做一些实时计算和在线服务的作业。

image.png

如上图所示,基于微博流量的特点,随着用户逐渐的减少,流量就会陷入一个低谷期。这时集群的CPU内存资源相对空闲。而反观做离线计算的Hadoop集群、YARN集群,当时间过了0点,开始计算昨天的各种定时作业、批处理计算数据,此时Hadoop集群异常繁忙。基于这个因素,想让两个集群之间的计算资源能够互相弹性使用,从而实现交通低谷,既缓解了Hadoop集群的计算压力,同时也能让Kuberenetes集群计算资源得到更加充分的使用,让计算资源得到一个最优化的使用。

image.png

SparkSQLFlinkSQL调度到Kuberenetes上执行,选择SparkSQLFlink SQL的原因是它们在支持SQL计算引擎的同时,开源对Kuberenetes的支持性也较高。

SparkSQLFlinkSQL计算引擎有一个非常重要的问题,就是如何同时保证在线和实时作业以及批作业的稳定性?

首先,不能因为批作业调度而影响实时在线作业的稳定性。其次,如果保证实时和在线作业的高优先级,那么如何保证批作业的稳定性。

基于上述的问题,我们将实时作业和在线作业设置最高的优先级。接着在批作业上面,分了两层的优先级的设置。

针对SparkSQL作业,对它的Driver设置的是第二层优先级。相应的Flink SQL,针对它优先级设置它的Driver对应的是JobManagerExcutor对应的是Manager角色。 通过上述操作,将实时在线作业的优先级设置成了最高。

 

第二个解决方案是保证批作业的优先级。由于批作业的优先级不如实时作业高,调度中心是基于工作流重试的机制。如果出错的话,首先会在K8S集群上开启出错重试,如果出错的次数超过一个设定的值,会将它调度回YARN集训进行重试,最终完成正确执行。 通过上述二层机制,保证了批作业也同样的稳定。

第三个需特别强调,由于批作业调度过来之后是要做Shuffle,如果Shuffle数据量较大,会影响实时在线作业的稳定性。针对这个问题,我们独立部署了一套脱离于Kuberenetes集群的Shuffle Server,让Shuffle数据单独写到一套服务器上,上述操作同时解决了关于作业稳定性的问题。

以上策略不仅实现了计算资源的最优化使用,而且在这个集群上也稳定支持了SQL计算引擎,实现SQL计算引擎的统一。

 

4.EMR SQL计算引擎优化

Hadoop集群统一的元数据中心是基于EMR的,它支持各种计算引擎,例如HiveSQL以及SparkSQL。由于需要它高效的性能,因此进行SQL计算引擎优化。

image.png

image.png

在算法工程做各种数据处理的时候最青睐Hive on MR,因为算法工程师比较专注于实现业务效果和业务逻辑,不关注计算引擎的底层原理优化。

在选型的原则上有如下三个原则:

第一是新的计算引擎一定要让用户做到无感知,用户的代码不需要做任何的改变,让用户感知不到发生了改变。

第二是迁移过程稳定且不需要太多的人工干预。刚使用Tez时并不清楚它的稳定性,所以在验证的过程中采取逐步放量灰度的方式。

第三个是执行,通过上面的图中可以看到Tez的执行时长,Tez的性能较MR有一个明显的提升。这个提升除了体现在时间有明显的缩短,同时在VcoreSeconsMemSecons计算资源的使用、Shuffle数据量上也有大幅减少,所以在EMR的云上Hadoop集群做了一个SQL计算引擎的优化,使其在统一计算平台的路上也优化了本身。

 

 

五、机器学习流程自动化

上图为图计算样例,首先进行的图训练生成一个Embedding,然后进行相似度计算做向量的召回,最终召回的向量会写入到物料库当中,供后续推荐场景召回使用。

通过对比之前与现在的流程操作,可以明显感受到在异构集群,统一计算平台的过程当中,给机器学习流程自动化做出了很大的正向推进作用。

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
量子机器学习入门:三种数据编码方法对比与应用
在量子机器学习中,数据编码方式决定了量子模型如何理解和处理信息。本文详解角度编码、振幅编码与基础编码三种方法,分析其原理、实现及适用场景,帮助读者选择最适合的编码策略,提升量子模型性能。
242 8
|
6月前
|
人工智能 自然语言处理 数据挖掘
云上玩转Qwen3系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用
PAI-LangStudio 和 Qwen3 构建基于 MCP 协议的 Hologres ChatBI 智能 Agent 应用,通过将 Agent、MCP Server 等技术和阿里最新的推理模型 Qwen3 编排在一个应用流中,为大模型提供了 MCP+OLAP 的智能数据分析能力,使用自然语言即可实现 OLAP 数据分析的查询效果,减少了幻觉。开发者可以基于该模板进行灵活扩展和二次开发,以满足特定场景的需求。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
3月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
3月前
|
机器学习/深度学习 搜索推荐 数据可视化
Java 大视界 -- Java 大数据机器学习模型在电商用户流失预测与留存策略制定中的应用(217)
本文探讨 Java 大数据与机器学习在电商用户流失预测与留存策略中的应用。通过构建高精度预测模型与动态分层策略,助力企业提前识别流失用户、精准触达,实现用户留存率与商业价值双提升,为电商应对用户流失提供技术新思路。
|
3月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
4月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
4月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
6月前
|
机器学习/深度学习 数据采集 人工智能
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
随着Web技术发展,动态加载数据的网站(如今日头条)对传统爬虫提出新挑战:初始HTML无完整数据、请求路径动态生成且易触发反爬策略。本文以爬取“AI”相关新闻为例,探讨了通过浏览器自动化、抓包分析和静态逆向接口等方法采集数据的局限性,并提出借助机器学习智能识别AJAX触发点的解决方案。通过特征提取与模型训练,爬虫可自动推测数据接口路径并高效采集。代码实现展示了如何模拟AJAX请求获取新闻标题、简介、作者和时间,并分类存储。未来,智能化将成为采集技术的发展趋势。
171 1
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
|
10月前
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
426 88