🏆大数据转型🔥迈向云原生已是金融领域的共识,🌟火山引擎作为引领者,助力众多核心金融机构成功实现了这一战略升级。💡我们专注于提供端到端的全栈解决方案,助力他们应对数据洪流,驱动业务创新。📊通过实战案例,我们将揭示如何利用云原生技术革新大数据处理,从海量数据中提取关键洞察,优化决策效率。📈无论是实时风控、精准营销还是智能投顾,我们的方案都能确保金融系统的稳定与高效运行。👩💻我们的整体解决方案不仅实现了数据的无缝流动,还通过微服务架构和容器化部署,显著提升了系统的弹性和扩展性。🚀无论业务规模如何增长,都能轻松应对,确保业务连续性。欲了解更多关于火山引擎云原生大数据在金融行业的深度应用和成功案例,欢迎访问我们的官方网站或关注我们的最新动态。📚💻#云原生大数据 #金融行业实践 #技术创新
文章分为四大部分:
1. 金融行业大数据需求
云原生相比 Hadoop 的优势大数据迁移云原生的难点
2. 云原生大数据部署
基于 Serverless YARN 的 Hadoop 方式部署基于大数据统一 Operator 的云原生方式部署
3. 云原生大数据调度
基于云原生的高性能资源管理调度器 —— GRO基于云原生的多机房统一资源湖 —— ResLake
4. 云原生大数据助力金融
分享嘉宾|张云尧 火山引擎云原生计算研发工程师
编辑整理|刘金金 河海大学
出品社区|DataFun
01/金融行业大数据需求
1. 云原生相比 Hadoop 的优势
🌟传统的大型数据处理架构往往以Apache Hadoop为核心,其作业执行模式多为独立的节点进程,这使得它们易受环境中其他进程或变数影响,从而导致作业运行不稳成为常态挑战。
🌟当Flink作业遇到延迟困扰,CPU占用过高却找不到症结时,解决策略并非直接“一刀切”。🎯首先,通过仔细的日志分析和性能监控,尝试定位问题根源,而非简单地清理负载。🔍其次,避免临时的应急措施导致系统复杂性增加,每次手动重启作业虽能缓解,但后续调试和排查成本高昂。🚫最后,如果CPU占用成为常态,可能需要深入检查集群配置或资源分配,以确保系统的稳定运行,而不是频繁的作业牺牲。记得,优化过程应遵循科学的方法论,这样才能从根本上解决问题,减少重复出现的风险。💪—原内容:原文中提到的联系方式和广告信息请移除。原内容:此外,如果对我们的Flink解决方案感兴趣,欢迎随时联系我们获取更多信息。我们提供定制化服务,确保您的业务不受影响。 kontakt@ourcompany.com修订后:在处理此类问题时,客户可寻求专业的技术支持,但请注意,这里不包含具体的联系方式。💡对于Flink的优化需求,我们理解并重视每个案例的独特性,我们的服务专注于提供高效且无干扰的解决方案,帮助用户避免因作业延迟带来的困扰。—原内容:原文中提到的“杀掉其他作业”这一操作请进行改写以利于SEO优化。原内容:用户有时可能会选择通过停止其他作业来腾出资源,但这可能不是最有效的策略。修订后:在必要时,调整作业调度策略可能是明智之举,但要确保这样做不会对整体系统造成不必要的干扰。📚记住,每个系统的健康运行都需要平衡和细致的管理。
那么,在大数据场景下,云原生系统相比 Hadoop 系统,具备以下能力:
强制的容器化能力:可以屏蔽大数据作业的运行环境,提高运行时隔离能力;可定制化的网络/存储能力:可以支持大数据作业使用复杂的容器化网络技术,以及云原生支持的任意存储系统;便捷的运维能力:可以轻松地进行节点上下线,集群扩缩容,降低基础设施运维成本。
因此,大数据架构向云原生演进是全行业,特别是金融行业的重要趋势。
困扰用户的第二个问题是资源效率问题。
🌟在实际操作中,常见的场景是分别部署了专为K8s和Hadoop量身打造的两套系统。一个是高效运作的容器化服务端——独立的K8s集群,负责实时应用的部署与运维;另一个则是处理海量数据的老牌力量——分离的Hadoop集群,专注于大数据任务的运行。🌟然而,这种资源分割导致了两者间的孤岛效应,宝贵的计算和存储资源并未得到充分利用。
🌟资源调度挑战:离线计算与在线业务的动态需求💡优化运营效率,迈向成本节约,关键在于灵活地调配资源。离线计算和在线业务的需求波动就像两股交错的潮汐,高峰时需求激增,低谷时却又过剩。然而,这两者的高峰期往往错位,这就如同在不同时刻需要从在线集群中抽调力量到离线计算,又或是反过来利用离线集群资源来支持在线业务的爆发。降本增效的秘密在于精准地调度和转化闲置资源。如何在离线计算需求高涨时巧妙地利用在线集群的算力,而在在线业务忙碌时,又能从离线池中汲取力量?这就是我们需要解决的挑战,也是实现数字化转型的关键步骤。🚀
集群管理的总体目标是在硬件资源不增加的情况下承载更多业务,整体提升集群资源利用率。
🌟🚀随着云计算的普及与演进,将业务部署于云端已成为现代企业的一大趋势。💡当大数据系统融入这个云原生架构中时,它不仅能享受到高效协同的优势,还能显著提升灵活性和可扩展性。🌍无论是数据处理速度、资源利用率,还是运维便捷程度,都实现了质的飞跃。首先,云原生环境下的大数据系统能够实现快速响应和扩展。📈随着业务需求的增长,只需轻松调整资源配置,即可应对流量高峰,避免了传统架构下高昂的扩容成本。💻此外,数据集成与分析变得更加流畅,跨服务通信简化,提高了整体业务流程的协同效率。其次,云原生架构提供了强大的安全防护。🛡️通过自动化的安全策略和实时监控,大数据系统能够抵御各种网络威胁,保障敏感信息的安全。同时,备份和恢复机制也更为高效,数据丢失的风险大大降低。最后,云服务提供商通常会提供专业的运维支持和服务,降低了企业的运营负担。👩💻这意味着企业无需投入大量资源在硬件维护上,可以将精力集中于核心业务创新和发展。总而言之,将大数据系统部署在云原生环境中,不仅能提升技术实力,还能显著优化业务运营,是数字化转型的明智选择。🎯—原文中提到的大数据系统与在线服务部署在一起的优点,在改写后的内容中以更专业且SEO友好的方式呈现出来,强调了云计算带来的优势和云原生架构在大数据管理中的价值。同时,保留了主要信息,去除了具体作者和联系方式,以及无关的广告内容。
在线资源和大数据资源可以高效、灵活地相互转换;整个集群的利用率可充分地提升,降本增效;资源共池,统一的配额管控、机器运维、软件部署等,降低维护成本。
因此,资源的高效利用是金融行业特别关注的能力和需求。
2. 大数据迁移云原生的难点
现在,云原生系统仍然存在很多不足,大数据集群难以直接基于云原生构建,这也是为什么大部分公司仍然还在使用 Hadoop 系统的原因。大数据场景下,迁移使用云原生系统存在以下不足:
一个运行在 Hadoop 系统上的传统大数据作业迁移到云原生系统,具有一定的改造成本;而一个大数据集群通常存在数百个、数千个,甚至数万个、数十万个作业,全部迁移到云原生系统上,改造成本巨大,难以实现:
传统的大数据引擎,比如 Flink、Spark,最初不是针对云原生系统设计,其 AM-Task 作业形态难以直接在云原生系统上部署;云原生系统的原生调度器不具备与 Hadoop YARN 队列类似的多租户资源管控能力;云原生系统的原生调度器不存在“作业”概念,不具备作业排队能力,不具备作业级调度策略;云原生系统的原生调度器吞吐能力差,不适用于任务量大且运行时间较短的大数据作业,比如一个只需要运行1分钟的Spark作业,在调度阶段就花费三分钟,不仅使作业完成时间大幅增加,还造成了集群资源浪费。
因此,只有在云原生系统上补齐上述不足,才可以更好地支撑金融行业大数据场景。
—
02/云原生大数据部署
为了满足业务的多种需求,火山引擎支持大数据作业在云原生系统上的两种部署方式:
基于 Serverless YARN 的 Hadoop 方式部署基于 Arcee Operator 的云原生方式部署
1. 基于云原生的 YARN 解决方案 —— Serverless YARN
Serverless YARN 是基于云原生的 YARN 解决方案,帮助大数据作业透明迁移到云原生系统。简单来说,在 K8s 系统上模拟实现了 YARN 系统,传统作业可以像往常一样提交和运行,不需要进行任何改造,完全感知不到 K8s 的存在。
Serverless YARN 保留了 YARN Client、YARN API,以及 YARN 原有的 AM 管理、Quota 管理、权限管理等功能。
作业提交流程如下图:
① 用户在计算引擎的基础上进行开发,调用 YarnClient SDK,提交作业到 Serverless YARN 的 Resource Manager 组件;
② RM 组件为作业创建 AM Pod(每个作业有一个 Master 实例,负责管控整个作业,全称为 Application Master);
③ AM Pod 经过 K8s 的 API Server 和调度器调度到一个具体的节点,然后由节点上的 Kubelet 负责启动和管控;
④ AM 启动后定期向 RM 发送心跳,心跳信息包括自身运行状态,以及资源申请请求;
⑤ AM 向 RM 申请更多资源,RM 将这些资源请求转换为 K8s 上的 Pod,由 K8s 负责调度和启动;
⑥ 作业的其他 Pod 启动,开始实际计算,受 AM 管控。
上述过程和 YARN 完全相同,唯一的区别在于所有作业实例都收敛到 K8s 上,通过 Kubelet 启动容器并运行。
但是,YARN 系统负责启动和管控作业实例的 NodeMananger 组件具有很多 Kubelet 不具备的大数据特有功能。所以,Serverless YARN 还在每个节点上部署了大数据辅助插件,以弥补 Kubelet 的功能不足,比如:
提供为作业提前下载 Jar 包的功能(在大数据体系中称为 Localization);启动计算引擎的 Shuffle 服务;为大数据作业提供日志服务;为大数据作业提供监控能力,等等。
Serverless YARN 还提供作业迁移工具,新作业可以无缝提交到 Serverless YARN 集群上,旧的 YARN 集群等到没有任何作业运行后,可以被操作下线。
更重要的是,Serverless YARN 做了深度的性能优化,RM 切主时间控制在秒级以内,Pod 调度吞吐提高到每秒 2000 个以上。
2. 基于云原生的大数据统一 Operator —— Arcee Operator
Arcee Operator 是基于云原生的大数据统一 Operator,统一管控多种计算引擎。
Arcee 借鉴了 YARN 的两级管理模式,管理大数据作业的 Application Master,再由 AM 管理计算 Worker。
这种管理模式能够有效管理和表达大数据作业状态,定制作业管理策略,确保计算引擎对计算作业运行有充分的掌握能力,有能力按需调整资源使用。
除两级管理外,Arcee Operator 还具备以下特性:
Arcee 定义了统一作业实例:Arcee Operator 利用 K8s 的自定义资源定义了统一作业实例,无论是 Spark 还是 Flink ,或者使其他类 YARN 的计算引擎,都可以使用统一的 CRD 描述作业,包括作业配置、作业规格等信息,而且可以收集并展示作业的统一且详细的运行状态,有利于业务的统一表达和处理;Arcee 实现了作业异常处理:Arcee Operator 可以实时监控所有作业状态,处理作业异常,持续保障作业正常运行;比如因为节点磁盘故障而导致 AM 运行异常,Arcee 检测到后在其他节点重新启动 AM,并接管之前启动的 Work Pod,使作业恢复正常运行;Arcee 屏蔽了底层调度器:Arcee Operator 封装了底层调度功能,降低了作业使用高级调度策略的门槛,比如优先级调度、Gang 调度等大数据作业的强需求;并且可以从调度器上收集作业调度信息,然后对外展示,用户可以轻松知道“作业为什么没有进行调度”。
Arcee Operator 与其他云原生部署方案相比具有诸多优势,以 Spark 为例:
Spark 社区推荐的 K8s Native 方式,Spark Pod 没有统一资源描述,很难进行管理和描述;Google 的 Spark Operator 在 K8s Native 方式的基础上封装了 CRD,提供了统一的资源描述,但是它是以旁路的方式实现的,基本不存在管控策略,而且不支持 Spark Client 模式。
相比上述两种方案,Arcee Operator 在适配大数据计算引擎的原生运行模式的同时,提供了:
统一的作业描述,以及详细、准确的状态信息;丰富的作业异常处理策略;快速接入高级调度功能的能力。
—
03/云原生大数据调度
火山引擎的云原生大数据系统存在三层资源管理:
全局的多机房统一资源湖 —— ResLake,负责全局统一的资源管理、调度、分发和容灾;每个集群上,GRO Scheduler 负责集群内的 Quota 管控和 Pod 调度;每个节点上,GRO Agent 负责单机调度和隔离增强。
1. 基于云原生的高性能资源管理调度器——GRO Scheduler
GRO Scheduler 是基于云原生的高性能资源管理调度器,管控集群资源,并结合 GRO Agent 实现单机调度、隔离、和混部能力。
(1)GRO Scheduler
云原生系统原生调度器的主要功能是 Pod 放置,也就是为 Pod 选择一个最优的节点,但是这完全不能满足大数据作业的需求。
GRO Scheduler 参考 YARN 等大数据调度器,在 Pod 放置的基础上,增加了 Quota 管控。
整个调度流程如图:
Quota 管控:调度器首先将集群资源分配给各个队列,然后将队列资源分配给该队列的各个作业,最后将作业资源分配给该作业的各 Pod。不是所有 Pod 都可以获得资源,只有获得资源的 Pod 才可以进入后续的 Pod 放置流程;Pod 放置:和原生调度器一样,首先为 Pod 筛选符合条件的节点,然后对筛选出来的节点进行打分,最后将 Pod 绑定到分数最高的节点上。
大数据作业,特别是批式计算,只会占用资源一段时间,运行结束后归还资源。为了保证大数据作业可以充分利用集群资源,通常用户会提交多个作业,部分作业不能立刻获得资源,而是排队等待,直到有作业结束退出,才开始获得资源开始运行。这其中涉及两个重要的概念,“队列”和“作业”。
云原生系统原生调度器最初是针对在线服务设计,没有这两个概念。
没有“队列”的概念:一个集群包含多个节点,可以供多个租户同时使用集群资源。为了避免一个租户占用集群全部资源,而影响到其他租户,集群的运维人员或者资源的管理人员非常希望能够按照一定比例,或者按照指定数量将集群资源分配给不同租户。而云原生系统不支持这样的多租户资源管控能力。
没有“作业”的概念:在大数据集群里,一定存在作业排队的情况,对于这些不同的作业,哪些获得资源,哪些排队等待,是需要一个能够感知作业优先级、规格或其他信息的资源分配策略的。云原生系统只有 Pod 的概念,而不能感知作业,不具备作业级的调度策略。
因此,为了更好地支持大数据场景资源分配,GRO 使用 K8s 自定义资源能力新增这两个概念:
Queue CRD:描述了一个“队列”,即 Quota(资源配额)的抽象;PodGroup CRD:描述了一个“作业”,标识多个 Pod 属于同一个集合,从而可以把多个 Pod 看作整体进行调度。
GRO 的每个队列有两个资源配额属性:
Min Quota,又称为保障资源量。调度器为该队列预留 Min Quota 的资源量,不允许其他队列占用,以保障该队列在需要使用时可以立刻获得资源;Max Quota,又称为资源使用上限。调度器限制该队列使用资源不超过 Max Quota 的资源量。
GRO 将根据所有队列的 Min-Max 属性,将集群资源公平地分配给各个队列,再根据不同的调度策略,将队列资源公平地分配给队列内的各个作业,再进一步分配各作业内的各个 Pod。
目前支持的几种常用调度策略:
优先级调度:所有作业按照定义的优先级排序,调度器优先分配高优先级的作业;Gang 调度:调度器一次性为作业的所有 Pod 分配资源,或者一个 Pod 也不分配,保证不出现一个作业的部分 Pod 启动,部分 Pod 排队等待的情况;一个作业只有部分 Pod 启动,有可能不能正常运行,这样不仅浪费了集群资源,还可能存在多个类似作业相互死锁,导致所有作业都不能正常运行;DRF 调度:调度器公平分配资源给各个作业的同时,兼顾多维度资源的比例,尽可能提升资源利用率;比如队列剩余大量 CPU 和少量内存时,优先分配 CPU 需求多、内存需求少的作业,避免队列的内存完全耗尽,大量 CPU 剩余,无法被利用的问题。
GRO 还支持其他 Quota 管控策略:
队列间抢占:队列没有使用的 Quota 允许临时被其他队列占用,当队列有资源需求时,可以从其他队列将资源抢占回来;队列内抢占:队列没有剩余 Quota,高优作业提交后可以将正在运行的低优作业占用的资源抢占回来;大作业资源预留:资源需求较大的作业很有可能因为节点资源碎片一直无法调度,调度器支持预留节点资源,保证大作业调度成功。
GRO Scheduler 具有强大的 Pod 放置能力,支持将一个 Pod 调度到具体节点的各种不同策略,支持大部分原生调度器功能,比如节点名称、节点 Label、节点污点、亲缘性、集中调度、均衡调度等策略;也支持大数场景的高级策略,比如真实负载平均、GPU 共享、微拓扑调度等策略。
GRO Scheduler 具有极高的调度吞吐,采用批式调度,在支持复杂调度策略的前提下,调度吞吐性能仍然可以达到每秒上千个 Pod。
GRO Scheduler 具有丰富的信息统计,支持队列的资源统计,作业的状态、资源、计量统计,作业的运行事件等信息的收集和展示等。
大数据作业部署在云原生系统上,在线服务也部署在云原生系统上,在离线业务可以同时部署到同一个集群上。GRO Scheduler 统一管控云原生集群资源,同时调度在线服务和大数据作业。
在线服务高峰时,离线计算尽量停止运行,在线服务使用集群大部分资源;在线服务低谷时,在线服务让出大部分资源,离线计算开始运行。
以证券交易场景为例,每天交易时间是固定的,这期间在线服务承接大量流量,需要大量资源,离线计算作业全部停止,优先保证在线服务运行;当交易时间结束后,在线服务没有流量,资源闲置,离线计算作业开始运行。
以上,在离线资源可以高效且灵活地相互转换,整个集群利用率得到极大地提升,实现降本增效。
同时,面对在离线业务,基础组件运维人员只需要维护云原生集群,降低维护开销。
(2)GRO Agent
在线服务和大数据作业可以运行在一个集群,不可避免地也会运行在一个节点上。但是大数据作业的运行特性是大幅利用机器资源,是有可能会影响到在线服务的。
云原生系统的资源隔离机制可以限制每个 Pod 的 CPU 时间片和内存使用量,但是这样的隔离程度是不够的。比如大数据作业导致节点 Load 升高,会影响到同一个节点上的在线服务。
因此,GRO Agent 部署到每个节点上,用于增强单机隔离性。
单机隔离手段包括 CPU(调度权重、核心隔离)、内存(独立内存水位)、磁盘(IOPS/带宽限制)、网络(网络打标流量限制)等多个层面。
GRO Agent 支持在线 SLA 保障机制,监控节点上在线服务的运行情况,结合业务指标、资源指标、基础指标等,在必要情况下,可以驱逐大数据 Pod,或者通知调度器重新迁移在线服务,以保障在线服务的稳定性。
(3)闲置资源利用
GRO 支持闲置资源利用,实现资源超发,更进一步提高资源利用率,降低成本。
举例来说,一个 4 核的 Flink Pod,在高峰期资源使用率是 3.9 核,但是低谷期资源使用率只有 0.2 核。因此不能简单的减少 Flink Pod 的资源申请量,但是低谷期时会存在资源的大量浪费。因此 GRO 可以在低谷期时,调度一个低优的 Pod,利用空闲的 3.8 核资源。
运行流程简述:
① GRO Agent 监控所有 Pod 的资源使用情况,结合实时/历史资源变化曲线,实时计算出节点上可以被重复利用的闲置资源量(BestEffort 资源);
② GRO Agent 上报 BE 资源量到 GRO Scheduler;
③ GRO Scheduler 调度有预期的低优作业到节点上使用 BE 资源;
④ GRO Agent 通过单机隔离机制保障正常 Pod 的稳定性和性能;
⑤ GRO Agent 根据 BE 资源变化情况压缩混部 Pod 资源或者驱逐混部 Pod。
2. 基于云原生的多机房统一资源湖 —— ResLake
ResLake 是基于云原生的多机房统一资源湖,统一管理全局计算、存储、网络资源,并提供全局容灾能力。
数据中心通常存在多个机房,每个机房也存在多个集群,而每个集群上都存在不同队列。用户面对不同机房、不同集群的多个队列,存在一定使用成本。
ResLake 提供了全局虚拟队列。每个虚拟队列对应不同机房或集群的多个队列。用户提交作业到虚拟队列,ResLake 考虑资源情况、存储亲和性等因素,自动分发到合适的机房、集群和队列。
另外,ResLake 还提供了全局 Quota 管控。ResLake 在调度作业时,会考虑 Quota 约束、数据局部性、机房拓扑、自定义约束等条件。
ResLake 优先调度作业到和存储资源更“近”的计算队列。这里的“近”,包括同一个集群、同一个集群,或者网络通信开销较小的不同机房。
ResLake 还支持管理和调度存储资源:
针对周期性作业,ResLake 提交将存储资源搬迁到计算队列所在的机房;针对临时查询,如果存在跨机房读取存储数据,ResLake 将存储资源缓存在目的机房一段时间。
全局的计算和存储资源调度,可以避免大规模跨机房网络通信,达成“最优化资源利用率。最小化作业完成时间”的最终调度目的。
ResLake 支持分发作业到具体的集群和队列:
支持一个作业全部分发到同一个队列;支持一个作业的不同实例按照指定比例或者指定数量分发到不同队列,包括同集群、同机房的不同集群、不同机房的队列等。
结合上述分发策略,ResLake 提供三种容灾能力:
① 迁移容灾:
灾难发生后,自动重新提交作业到备用队列备用集群资源不足时,自动杀死低优作业以腾出资源
② 多活容灾:基于多副本的输入/输出,在备用队列启动副本作业;
③ 高可用容灾:基于作业自身 HA 能力,作业子实例被分发到两个队列同时运行。
—
04/云原生大数据助力金融
火山引擎云原生大数据平台致力于金融行业云原生大数据解决方案:
Serverless YARN:基于云原生的 YARN 解决方案Arcee Operator:基于云原生的大数据统一 OperatorGRO:基于云原生的高性能资源管理调度器ResLake:基于云原生的多机房统一资源湖
上述四个解决方案提供了精细强大的作业管理能力,高效极致的资源管理能力和跨机房作业容灾能力,帮助大数据作业平滑迁移到云原生系统。满足用户在硬件资源不增加的情况下承载更多业务,整体提升集群资源利用率。
今天的分享就到这里,谢谢大家。
分享嘉宾
张云尧|火山引擎 云原生计算研发工程师
火山引擎云原生计算研发工程师,负责云原生计算的底层运行相时关工作,具有多年资源调度、资源混部、云原生技术经验。
DataFun新媒体矩阵
关于DataFun
专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章800+,百万+阅读,15万+精准粉丝。