6

Spark on Kubernetes与阿里云的深度整合

 4 years ago
source link: http://dockone.io/article/9771
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

最近,笔者尝试将Spark on Kubernetes与阿里云深度整合,设计一个开箱即用的Spark on Kubernetes镜像。

首先通过Terraform在阿里云上一键创建和销毁Kubernetes集群。然后写了一个脚本生成Spark镜像,使其在Kubernetes上运行时可以直接读写阿里云OSS上的数据。最后还写了一个spark-submit脚本,可以让镜像动态地从阿里云OSS上下载需要运行的主程序包(jar)。

功能:

一次编译,多次运行,同时支持共有云、私有云、以及混合云。用户只需专注于Spark job本身,无需担心运维。解耦计算与存储,不再需要HDFS集群,更加节省费用。避免了常规做法中的二次资源调度,进一步提升资源管理效率。每一个job都可以指定资源,实现更好的资源隔离。自带弹性伸缩属性,无需被集群太小所困扰。

优势:

镜像可以部署到共有云、私有云、或混合云上的任意一个Kubernetes集群

镜像可以直接读写阿里云的对象存储服务(OSS),节省了HDFS的费用

可以从阿里云的OSS上自动下载包含Spark job的工作包(jar),不再用为每个工作包制作新的镜像可以从阿里云的OSS上自动下载包含Spark job的工作包(jar),不再用为每个工作包制作新的镜像

特点:

使用Kubernetes原生调度的Spark on Kubernetes是对现有的Spark on Yarn/Mesos的资源使用方式的革命性的改进,主要表现在以下几点:

1、Kubernetes原生调度:不再需要二层调度,直接使用Kubernetes的资源调度功能,跟其他应用共用整个kubernetes管理的资源池;

2、资源隔离,粒度更细:原先yarn中的queue在Spark on Kubernetes中已不存在,取而代之的是Kubernetes中原生的namespace,可以为每个用户分别指定一个namespace,限制用户的资源quota;

3、细粒度的资源分配:可以给每个spark任务指定资源限制,实际指定多少资源就使用多少资源,因为没有了像yarn那样的二层调度(圈地式的),所以可以更高效和细粒度的使用资源;

4、监控的变革:因为做到了细粒度的资源分配,所以可以对用户提交的每一个任务做到资源使用的监控,从而判断用户的资源使用情况,所有的metric都记录在数据库中,甚至可以为每个用户的每次任务提交计量;

5、日志的变革:用户不再通过yarn的web页面来查看任务状态,而是通过pod的log来查看,可将所有的Kubernetes中的应用的日志等同看待收集起来,然后可以根据标签查看对应应用的日志;

所有这些变革都可以让我们更高效的获取资源、更有效率的获取资源!

笔者设计的Spark on Kubernetes在普通版本的基础上,与阿里云深度整合,添加了一些比较实用的特性:

可以通过Terraform配置阿里云ACK Kubernetes集群,一键创建和销毁集群,避免重复劳动以及不必要的集群消耗

可以直接从阿里云OSS上获取Spark所需jar包,避免重复打包镜像

可以直接通过阿里云OSS读写数据,避免不必要的HDFS费用

目前正在免费Alpha测试中,具体操作步骤记录在了 这篇博客 里。欢迎感兴趣的同学一起讨论。也可通过邮箱与笔者联系沟通。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK