摘要:本次鲲鹏 BoostKit 训练营为开发者介绍如何基于鲲鹏 BoostKit 使能套件实现应用性能的加速,并重点剖析性能优化技术和关键能力。
本文分享自华为云社区《【云驻共创】“大鹏一日同风起”Kunpeng BoostKit 使能套件如何实现大数据场景倍级性能提升? 》,原文作者:白鹿第一帅 。
在数据和经济时代,业务和数据的多样性需要新的计算架构,海量的数据增长也带来了更高的计算需求。那么在这个过程中,鲲鹏计算产业也正在成为更多计算场景的新一代 IP 基座。基于华为鲲鹏处理器构建的鲲鹏全栈 IT 技术实施设施行业应用以及服务,致力于为智能世界持续提供我们的先进算力支持,使得各个行业可以实现数字化转型。应用软件的迁移与优化一直是鲲鹏软件生态的难点和关键。本次鲲鹏 BoostKit 训练营为开发者介绍如何基于鲲鹏 BoostKit 使能套件实现应用性能的加速,并重点剖析性能优化技术和关键能力。
随着科技的发展,越来越多的行业需要采集更多的数据,如何对海量数据进行分析并得出我们想要的结果就成为了我们所面临的难题,而大数据技术的迅速发展使得这个问题迎刃而解。
海量数据需要更高的并发度来加速数据处理,在数据集非常大的情况下,如果我们跑在单核(或者是顺序化)的执行场景下,可能执行过程无法进行或者是效率极其低下,这是我们无法接受的,所以海量的数据需要更高的并发度来处理,那么鲲鹏多核计算的特点就可以完美匹配这个需求,加速大数据的计算性能,提升大数据任务的并发度。
我们以 MapReduce 模型为例进行处理和计算,如下图所示,我们所采集的源数据是一段英文,我们需要计算这段话中每一个单词所出现的次数。
运行过程:首先我们对源数据进行拆分,然后 Map 映射到每一个节点上进行运算,之后进行 Sort 排序,Merge 合并,最后进行结果汇总 Reduce 以形成最终的结果。
可以看到,我们将大量的计算分发到各个节点之上,这就是分布式计算,也是我们所谓的“并发度”的概念。如果我们的并发度提高了,理论上来讲,我们整个模型的执行时间也会相应缩短。
上面我们介绍了开源大数据的概念以及相应的华为鲲鹏多核计算的特点,下面介绍我们在大数据开发中经常会使用到的一些组件。
HDFS 是 Hadoop 生态的三个核心模块组成之一,负责分布式存储。具体结构如下图所示:
使用流程:用户如果想要读取存储在 HDFS 中的数据,需要先找到 NameNode,通过 NameNode 来得知我们的数据存放在哪个 DataNode 之上,当 NameNode 找到具体的数据之后,将数据返回给用户。
Yarn 是 Hadoop 生态的三个核心模块组成之一,负责资源分配和管理。具体结构如下图所示:
MapReduce 是 Hadoop 生态的三个核心模块组成之一,负责分布式计算。具体结构如下图所示:
Apache Spark 是用于大规模数据处理的统一分析引擎,具有可伸缩性、基于内存计算等特点,已经成为轻量级大数据快速处理的统一平台,各种不同的应用,如实时信息流处理、机器学习、交互式查询等,都可以通过 Spark 建立在不同的存储和运行系统上。具体结构如下图所示:
BoostKit 是一个应用使能套件,并不只是由一个软件包构成,而是由很多软件包组成的。
BoostKit 是部署在鲲鹏整机(服务器)环境之上,往上搭建的一个全栈优化的使能套件。具体结构如下图所示:
鲲鹏应用使能套件 BoostKit,释放倍级性能优势,提供八大场景化应用使能套件:大数据、分布式存储、数据库、虚拟化、ARM 原生、Web/CDN、NFV 和 HPC。在接下来的过程中,我们将其分为三个部分依次介绍。
我们以 Hadoop 为例,首先需要让 Hadoop 运行在鲲鹏服务器上,然而这远远不够,还需要根据需求开发相关特性,以促使 Hadoop 在鲲鹏之上可以运行得更加完美、便捷,同时我们将研发的产品新特性合入、贡献到开源社区。
这一块之所以被称为基础,是因为很多应用都会使用到该加速包,比如:NUMA 优化、KAE 加速库、IO 智能预取等。
我们以 KAE 加速库为例,在使用过程中所使用到的如压缩、加解密等相关功能,我们会加速这个功能,如果我们的上层应用有使用到压缩、加解密等相关功能就都会有大幅的性能提升。
BoostKit 在开源社区中做了大量的投入,主要针对如下两个方面,全面支持开源大数据组件,并实现了 ARM CI 在社区版本上的运行。
聚焦大数据关键挑战,对于存在的痛点给出解决方案,让数据处理更快、更简单。
BoostKit 机器学习/图算法基于原生算法深度优化,促使 Spark 性能得到倍级提升,现在已经被应用到华为的伙伴业务之中,如下图所示的两个实际场景,在海量的数据集中,分别使用机器学习和图分析的算法进行建模,我们可以看到模型训练时长有大幅度的缩短,性能得到极大提升。
BoostKit 机器学习/图算法的优化使得在实际应用场景中,计算性能平均提升 5 倍,而上层应用无需修改!
采用网络公开的多维度多规模数据集算法性能提升 50%~10 倍以上。
关键优化点:
在同等计算精度,不同的数据集下,支撑机器学习算法(Covariance、Pearson、Spearman),性能提升超过 50+%,如下图所示:
SVD 算法即奇异值分解算法,是线性代数中常用的的矩阵分解算法。SVD 算法不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域,是很多机器学习算法的基石。
对于传统的 SVD 算法,我们也在之上进行了创新,如下图所示:
PageRank 算法,即网页排名算法,又称网页级别算法、Google 左侧排名算法或佩奇排名算法。该算法是对搜索引擎搜索出来的结果、网页进行排名的一种算法,本质上是一种以网页之间的超链接的个数和质量作为主要因素粗略地分析网页重要性的算法。即更重要的网页会被更多其他的网页所引用,根据引用的链接计算出每个网页的 PR 值。网页的PR值越高则说明该网页越重要。PageRank 是 Google 用于用来标识网页的等级/重要性的一种方法,是 Google 用来衡量一个网站的好坏的唯一标准。
如上图所示,我们将每一个网页看做一个点,网页与网页之间的连接看成一条边,如此,便构成了图的数据结构。我们就将对这个图的数据结构进行处理。那么我们如何进行优化呢?
如上图所示,在优化之后,通过算法计算模式的自适应切换,整体 shuffle 量减少 50%,性能较优化前平均提升 50%+。
鲲鹏 BoostKit 机器学习&图算法的 Spark 性能加速实践可以在华为云平台上的“沙箱实验室”进行。
在实验进行之前,首先会预制环境,如下图所示:
由于我们的本算法是运行在 4 节点的集群上上,即运行在 4 台 ECS上,所以预制环境的过程可能较长,需要在云服务器上完成某些组件的配置,时间大概为三分钟左右。如下图所示,我们可以看到一个主节点和三个从节点。
在预制环境的过程中,已经完成了部分 Zookeeper 的相关配置,我们只需要登陆每一个 agent 节点并进行少量的配置即可启动 Zookeeper,具体流程如下图所示:
对于 Hadoop 同理,预制环境时,已经完成 Hadoop 的安装与 Hadoop 在 server 节点的配置,对于 agent 节点,我们只需要在计算节点上少量配置,在 agent 端启动 JournalNode,在 server 端启动 Hadoop 其他组件即可,具体流程如下图所示:
对于 Spark,系统并没有作相关的部署,仅仅是把 Spark 下载到了集群上,之后需要我们添加 Spark 环境变量、修改 Spark 配置文件,同步到其他节点并进行任务提交,具体流程如下图所示:
调用算法库,代码如下:
sh bin/ml/svd_run.sh D10M1k
不调用算法库,代码如下:
sh bin/ml/svd_run_raw.sh D10M1k
调用算法库,代码如下:
sh bin/graph/pr_run.sh cit_patents run
不调用算法库,代码如下:
sh bin/graph/pr_run_raw.sh cit_patents run
由于算法当前的默认参数没有完全利用 ECS 集群的资源,所以需要对 Spark 层的参数进行调优。
面向多样性计算时代,华为全面开放鲲鹏全栈能力,分享多样性计算工具套件:鲲鹏应用使能套件 Kunpeng BoostKit 和鲲鹏开发套件 Kunpeng DevKit,加速产业创新,使能极简开发,携手伙伴一起构建鲲鹏计算产业生态。本系列课程主要针对鲲鹏开发者及 ISV 合作伙伴,帮助您快速了解 BoostKit 鲲鹏应用使能套件支持下的 8 大场景的最佳能力和实践、鲲鹏全研发作业流程工具套件 Kunpeng DevKit 和鲲鹏基础软件开源等相关内容,与全球开发者一起共同点亮多样性计算新时代。
点击关注,第一时间了解华为云新鲜技术~