在Azure Kubernetes Services平台上轻松构建Spark集群

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:刘翔网络

小提示:您能找到这篇{在Azure Kubernetes Services平台上轻松构建Spark集群}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的在Azure Kubernetes Services平台上轻松构建Spark集群内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< font-size: 16px;">在当今互联网和移动应用快速发展的浪潮下,大数据和微服务应用受到越来越多技术人员的青睐,其中Spark和Kubernetes容器管理平台技术也逐渐成为企业技术人员必备技能。如何快速部署集群?如何安全高效的运维?是否可以将大数据平台和容器管理平台有效的结合起来?也是很多人一直以来探索和研究的方向。

< font-size: 16px;">本文我们将和大家一起来探索如何在微软容器服务Azure Kubernetes Services(AKS)上轻松部署运行Spark应用的两种方式。

< font-size: 16px;">方法一:通过AKS的API Server直接提交Spark任务

< font-size: 16px;">从Spark 2.3开始,Spark原生已经支持Kubernetes,这意味着您无需提前构建Spark集群,在Spark Client提交任务的时候,只需要指定Kubernetes的API Server地址和端口,即可运行Spark任务。在使用spark-submit提交任务的时候,既可以指定Cluster Mode,又可以指定Client Mode。其工作原理如下:

< font-size: 16px;">当任务提交成功之后,会在K8S集群里面起一个运行Spark driver的Pod

< font-size: 16px;">这个Spark driver会在Pod中创建executors,然后连到这些executor,并执行应用代码。

< font-size: 16px;">当应用执行完成之后,运行executor的pod会被终止并删除,但运行Spark driver的Pod会一直保留,并显示为”completed”状态直到被手动删除。在此期间,可以kubectl logs命令查看Spark的日志。

< font-size: 16px;">通过Spark-Submit向AKS集群提交Spark任务

< font-size: 16px;">1.创建AKS集群

< font-size: 16px;">在Azure Portal上搜索”kubernete”,然后进入到AKS的管理界面,可根据向导快速创建一个AKS集群。本次示例我们采用了3个节点的Worker Node,机型为B2ms,网络模式为Basic(Kubenet)。有关创建集群和连接集群的步骤,您也可以参考本文档。成功创建之后,可以通过下面的命令看到AKS集群的信息,记录下master节点的地址。

< font-size: 16px;">2.准备Spark环境。下载Spark安装文件,将其解压

< font-size: 16px;">3.创建Azure Container registries镜像仓库。在Azure Portal中搜索”container registries”,按默认参数创建一个镜像仓库。创建完成之后,在Access keys界面,点击Enable启用Admin user,记录下repo的地址,用户名在一起宣传片和密码,使用docker login登录到ACR,然后使用az cli将AKS集群和ACR进行关联。(请将标红的地方修改为自己的参数值,后续不再说明)







< font-size: 16px;">4.准备Spark Docker Image。创建spark image,并将其上传到Azure Container Registries镜像仓库中。其中-r后面跟上一步创建的repo地址,-t后面跟版本号

< font-size: 16px;">5.创建运行Spark任务的service account,并绑定相应的role

< font-size: 16px;">6.准备一个Spark应用jar包,将其传到Azure Blob上,权限设置为公网可访问。或者使用本次示例提供的jar包。

< font-size: 16px;">在运行的过程中,可以公关危机处理策略通过kubectl get pod–watch进行观察,我们会看到spark-pi-xxxx-driver先运行起来,然后会起3个spark-pi-xxxx-exec-N pod作为executor,任务完成之后,executor pod会自动删除,只保留driver pod信息,通过kubectl logs DRIVER_POD_NAME可以看到计算的PI结果。

< font-size: 16px;">7.在Spark任务执行的过程中,我们也可以通过port forward的方法,将driver的端口映射到本机来访问spark UI.

< font-size: 16px;">然后浏览器访问http://localhost:4040即可访问到Spark UI

< font-size: 16px;">通过client mode访问到运行在AKS集群中的spark-shell

< font-size: 16px;">从Spark 2.4.0开始,Spark原生支持在k8s上以client模式提交任务。但Spark executors必须能通过主机名和端口连接到Spark Driver上。Spark Driver既可以在物理机上运行,也可以跑在pod里面。为了使Spark executors能够解析到spark driver的DNS名称,本次我们将创建一个ubuntu的pod,在pod中配置spark client的环境。

< font-size: 16px;">创建ubuntu pod的命令为:

< font-size: 16px;">之后会自动进入到ubuntu pod的shell,接下来的命令全部都在ubuntu pod shell中输入

< font-size: 16px;">进入Spark Shell之后,就可以看到spark master的地址即为aks的地址,之后就可以通过交互式方法跑Spark的任务了

< font-size: 16px;">通过上述方法,我们已经实现了在AKS集群中运行Spark任务PI,好处是在不跑Spark任务的时候,不消耗任何资源,任务跑完之后,pod会被删除,也不会占用AKS集群的资源。

< font-size: 16px;">方法二:使用Spark Operator在AKS里面运行Spark集群

< font-size: 16px;">K8s Operator是K8s的一个扩展功能,通过K8S Operator可以通过自定义资源来创建应用。基于这个功能,我们可以借助于一些第三方的Operator在k8s里面运行一个长期稳定的Spark集群。本次我们以radanalytics.io提供的Apache Spark Operator为例,来演示如何创建一个Spark集群以及如何直接提交Spark Application.

< font-size: 16px;">操作步骤:

< font-size: 16px;">1.在AKS集群上使用下面的命令部署Apache Spark Operator,部署完成之后可以通过kubectl get operators命令来进行确认,PHASE显示为”Successed”则表示已部署成功

< font-size: 16px;">2.将下面的内容保存成sparkdemo.yaml,然后执行kubectl appy-f sparkdemo.yaml命令,将会创建一个master node,两个worker node的电视开机广告Spark集群.

< font-size: 16px;">3.运行kubectl get sparkcluster命令来检查SparkCluster已经创建成功,使用kubectl get pod可以看到master和worker运行的pod信息。通过kubectl get svc可以看到spark cluster连接的服务地址

< font-size: 16px;">4.接下来可以通过自己的应用,或者部署JupyterNotebook,或在pod中访问到spark master的地址,在访问的时候通过–master k8s://my-spark-cluster:7077的方式进行指定。

< font-size: 16px;">5.您也可以通过SparkApplication直接向k8s集群提交spark任务,示例yaml如下:

< font-size: 16px;">小结

< font-size: 16px;">我们在上述方法中探讨了在AKS环境中运行Spark集群的两种方式:原生集成方式和Spark Operator方式。对于原生集成方式,需要Spark2.3以上的版本(Spark Shell则需要2.4.0以上版本),在不运行任务的时候,可以自动销毁pod以节约资源。Spark Operator是由第三方提供的,提供了通过Yaml的方式管理集群,运行Spark应用。另外由于集群是长期在aks环境中运行,因此可以和丰富的k8s管理工具做集成。大家可以根据自己的实际需求,来选择最适合自己的方式来运行。

在Azure Kubernetes Services平台上轻松构建Spark集群

上一篇:Skype加速如何解决,看行业“老炮儿”的选择
下一篇:Wish账户为什么会被冻结,怎么处理?


版权声明:以上主题为“在Azure Kubernetes Services平台上轻松构建Spark集群"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    在Azure Kubernetes Services平台上轻松构建Spark集群
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“在Azure Kubernetes Services平台上轻松构建Spark集群”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通在Azure Kubernetes Services平台上轻松构建Spark集群的相关事宜。

关键词:在Azure,Kubernetes,Services平台

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号