暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spark云化架构演进的实践和探索

数匠笔谈 2020-07-03
453
点击上面“蓝字”关注我们!

阅读本文,需先了解的术语


  • Kubernetes:简称K8s,是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化

  • Yarn:hadoop 2.0 引入的集群资源管理系统。用户可以将各种服务框架部署在YARN上,由YARN进行统一地管理和资源分配

  • Spark:基于内存计算的通用大规模数据处理框架

  • RDD:弹性分布式数据集,Spark的核心模块,旨在封装了基础的数据操作(如map,filter,reduce等)的可共享的数据抽象

  • Livy:通过REST的方式将代码片段或是序列化的二进制代码提交到Spark集群中去执行

什么是Spark


生活离不开水,同样离不开数据,我们被数据包围,在数据中生活。当数据越来越多时,就成了大数据。
想要理解大数据,就需要理解大数据相关的查询、处理、机器学习、图计算和统计分析等,Spark 作为新一代轻量级大数据快速处理平台,集成了大数据相关的各种能力,是理解大数据的首选。

Spark使用场景


Spark是一种开源的集群计算环境,专为大规模数据处理而设计的快速通用的计算引擎,主要应用场景包括但不限于:

1.Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小;

2.由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引,即对于那种增量修改的应用模型不适合:

3.数据量不是特别大,但是要求实时统计分析需求。在实际应用中,互联网公司的玩法是主要应用在广告、报表、推荐系统等业务中。在广告业务方面需要大数据做应用分析、效果分析、定向优化等,在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。不难发现这些场景无外乎是数据量大、计算量大、效率高特点。

Spark在我行内的使用场景,主要集中数据抽取工具和机器学习平台模型训练中。

上图,不难看出,在模型训练中,面对海量数据,我们采用分布式计算引擎Spark做为底层技术,RDD分布式弹性数据集分布在各个节点上计算,为模型训练提供强大的计算能力,对模型评分上线指标(准确率、召回率、精确率、F1值等)提供高效的技术保障。

Spark生态


当我们在谈Spark的时候可能是指一个Spark应用程序,替代MapReduce 运行在Yarn上,存储在HDFS上的一个大数据批处理程序;也可能是指使用包含Spark sql、Spark streaming等子项目;甚至 Tachyon、Mesos等大数据处理的统一平台,或者称为Spark生态。

Spark集群


Spark集群考虑到了未来对接一些更强大的资源管理系统(如Yarn、Mesos、K8s等),没有在资源管理的设计上对外封闭,所以Spark架构设计时将资源管理抽象出了一层,通过这种抽象能够构建一种插件式的资源管理模块。

传统集群(CDH集群)


Spark应用提交至Yarn集群后,通过Yarn进行CPU和内存的资源调度,生成多个Worker分散在集群多个节点,进行调度作业。

容器部署


相对于传统的Yarn集群模式,Spark应用在Kubernetes pod中创建Driver,再有Driver调用K8s的API 创建executor pod,当计算作业结束后,pod回收并销毁。

使用与Yarn相反的Kubernetes集群具有明显的好处:

l  成本:相较于CDH集群,Kubernetes集群支持联邦集群、联邦应用等特性。

l  弹性:Cloud中的Kubernetes集群支持弹性自动扩展。反之,Hadoop集群的扩展速度远远没有那么快,可以手动或自动完成(2019年7月预览)。

l  集成:我们可以在包装在Docker容器中的Kubernetes集群中运行任何工作负载。至少我还没见过写过Yarn App的人。

l  支持:我们无法完全控制Cloud提供的群集设置,并且通常在发行后的几个月内没有可用的最新版本的软件。但是,使用Kubernetes,我们完全可以自己构建映像。

l  其他Kuebernetes优点:具有Helm的CI / CD,可一键单击即可使用的监视堆栈,获得了广泛的欢迎和社区支持。当然还有HYPE诸如此类的优秀工具。

当我们了解Kubernetes的优势之后,那就是开始尝试提高Spark on K8s可行性吧。

探索尝试


基于Spark on K8s解决方案的核心是Apache Livy。Apache Livy是一项服务,可通过REST接口轻松与Spark集群进行交互,如下图所示:

探索步骤


1. 搭建K8s集群

2.制作livy-server镜像


3.livy.conf配置master节点指向k8s


4.制作spark-livy镜像

5.查看livy-spark pod


6.通过rest接口提交一个spark任务


7.通过rest接口,可以轻松查看各个job状态和运行结果


结语


通过这几天Spark容器化部署的探索,为了达到工业级的Spark云化服务平台,我们还有很多事情要做,如安全认证中间件、缓存中间件、分布式消息队列、异构数据源混合(数据湖支持,多类型存储)等等。最后放上猪场的Spark服务平台全景,这是我目前了解到比较完善的Spark全景服务平台。

扫码关注
更多精彩
扫码关注
更多精彩


文章转载自数匠笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论