2020年CNCF中国云原生考察
10人将获赠CNCF商店$100美元礼券!
你填了吗?
问卷链接(https://www.wjx.cn/jq/9714648...)
客座文章作者:万事达卡首席软件开发工程师Allison Richardet
在万事达,外部云团队保护咱们的Kubernetes平台。咱们的工作包含保护Kubernetes集群,这是咱们所依赖的外围部署,并为租户提供了日志、监控等服务,并为租户提供了良好的体验。
咱们的租户之一,数据仓库团队,已经在YARN和HDFS上应用过原生Apache Spark。他们找了咱们的团队,心愿将他们的大数据工作转移到Kubernetes;他们想要实现云原生化,而咱们也有机会在Kubernetes上与Apache Spark单干。
所以,咱们的旅程从Spark Operator开始。向Kubernetes和Operators的迁徙将为咱们的外部客户数据仓库团队关上云原生的可能性。咱们有机会帮忙他们利用可伸缩性和老本改良的劣势,而切换到S3将进一步实现这些指标。
背景
操作器(operator)是什么,为什么咱们,或者你,对此感兴趣?首先,操作器应用自定义资源扩大了Kubernetes API。操作器还定义了一个自定义控制器来监督其资源类型。将自定义资源与自定义控制器联合在一起会产生一个申明性API,在这个API中,操作器会协调集群申明状态与理论状态之间的差别。换句话说,操作器解决与其资源相干的自动化。
有了这些益处,咱们的团队很快乐可能利用Kubernetes的Spark操作器来反对咱们的租户。通常,原生Apache Spark应用HDFS。然而,迁徙到云端并在Kuberentes上运行Spark操作器,S3是HDFS的一个很好的代替计划,因为它具备老本劣势,并且可能依据须要进行扩大。乏味的是,S3在默认状况下不能与Spark操作器一起应用。咱们参考了Spark操作器以及Hadoop-AWS集成文档。此外,咱们将分享以下4个步骤的详细信息:镜像更新、SparkApplication配置、S3凭据和S3款式。遵循咱们的步骤,将S3与你的Spark作业和Kubernetes的Spark操作器进行集成。
工作流程
与咱们部署到Kubernetes集群的大多数应用程序一样,咱们应用Helm chart。Kubernetes的Apache Spark操作器的Helm chart能够在这里找到。
Values & Helm 模板
咱们更新values.yaml,而后运行helm template生成咱们将部署到Kubernetes集群的清单。咱们发现,对将要创立的内容具备可见性和对部署的管制是值得额定步骤的;模板存储在git中,咱们的CD工具负责部署。
默认的chart values将容许你疾速启动和运行。依据你的须要,以下是你可能须要做的一些批改:
- 启用webhook:默认状况下,不启用Mutating Admission Webhook。启用容许自定义SparkApplication驱动程序和执行程序pod,包含挂载卷、ConfigMaps、亲和性/非亲和性等等。
- 定义ingressUrlFormat:Spark UI可选的ingress。
请参阅疾速入门指南和默认values.yaml获取更多详细信息和选项。
需要
要运行应用S3的SparkApplication,须要SparkApplication的附加配置,包含一个自定义docker镜像。Hadoop S3AConnector是一种能够对S3进行读写的工具。
1. 镜像更新
SparkApplication应用的docker镜像须要增加两个jar(hadoop-aws和aws-java-sdk或aws-java-sdk-bundle),版本依据Spark版本和Hadoop配置文件。
在这一步中有几件事件要记住。
- 用户和权限
- 额定的Jar
如果应用spark镜像作为终点,在增加jar时援用它们各自的dockerfile以正确对齐用户和地位。
让咱们来看看python Dockerfile。在执行任何装置工作之前,用户被设置为root,而后重置为${spark_uid}。
通过查看根本镜像,能够看到jar位于/opt/spark/jars或$SPARK_HOME/jars中。最初,更新jar的权限,以便可能应用它们。
上传到S3的文档提供了应用jar文件的信息;然而,咱们须要一个蕴含fs.s3a.path.style.access配置的新Hadoop版本——咱们将在前面一节中探讨这个问题。在编写本文时,咱们应用spark操作器版本v1beta2-1.2.0-3.0.0,其中蕴含根本spark版本3.0.0。应用gcr.io/spark-operator/spark-py:v3.0.0-hadoop3镜像作为终点,咱们增加了以下jar:hadoop-aws-3.1.0.jar和aws-java-sdk-bundle-1.11.271.jar。它须要一些试验来确定最终能工作的正确镜像组合。
2. SparkApplication配置
SparkApplication须要额定的配置能力与S3通信。spec.sparkConf中要求的最小配置如下:
sparkConf: spark.hadoop.fs.s3a。端点:<端点> spark.hadoop.fs.s3a。impl: org.apache.hadoop.fs.s3a.S3AFileSystem
还必须提供拜访S3的凭据。有相似于下面的配置选项;然而,这是十分丧气的,因为它们是字符串值,因而与平安最佳实际相违反。
3. S3凭证
咱们不在SparkApplication的sparkConf中提供s3凭据,而是创立一个Kubernetes机密,并为驱动程序和执行程序定义环境变量。Spark操作器文档提供了几种应用secret的选项,以及用于挂载机密或指定环境变量的残缺示例。
接下来,因为咱们应用环境变量来验证S3,咱们在sparkConf中设置以下选项:
sparkConf: spark.hadoop.fs.s3a.aws.credentials.provider: com.amazonaws.auth.EnvironmentVariableCredentialsProvider
这是不须要的,如果没有提供,将尝试依照以下程序来尝试凭据提供程序类:
- org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
- com.amazonaws.auth.EnvironmentVariableCredentialsProvider
- com.amazonaws.auth.InstanceProfileCredentialsProvider
4. S3款式
在SparkApplication的sparkConf中有一些其余的选项须要记住,这些选项是基于你特定的S3的:
sparkConf: extraJavaOptions: -Dcom.amazonaws.services.s3.enableV4=true spark.hadoop.fs.s3a.path.style.access: “true” spark.hadoop.fs.s3a.connection.ssl.enabled: “true”
门路款式拜访——通过启用门路款式拜访,将禁用虚拟主机(默认启用)。启用门路款式拜访能够打消为默认虚拟主机设置DNS的需要。
启用SSL——如果你正在应用TLS/SSL,请确保在SparkApplication的sparkConf中启用这个选项。
额定的Java选项——依据你的须要而变动。
应用S3
当初你曾经实现了应用S3的所有设置,当初有两种抉择:利用S3解决依赖项或上传到S3。
S3解决依赖项
mainApplicationFile和spark作业应用的附加依赖项(包含文件或jar)也能够从S3中存储和获取。它们能够在spec.deps字段中的SparkApplication中与其余依赖项一起定义。spark-submit会别离应用spec.deps.jar和spec.deps.files中指定的jar或文件。s3中拜访依赖的格局为s3a://bucket/path/to/file。
上传到S3
上传到S3时,文件地位的格局为s3a://bucket/path/to/destination。bucket必须存在,否则上传失败。如果destination文件曾经存在,上载将失败。
总结
咱们介绍了启动并运行Spark操作器和S3所需的4个步骤:镜像更新、SparkApplication的sparkConf中所需的选项、S3凭据以及基于特定S3的其余选项。最初,咱们给出了一些对于如何利用S3来实现依赖关系和上传到S3的倡议。
最初,咱们帮忙咱们的外部客户,数据仓库团队,将他们的大数据工作负载从原生Apache Spark转移到Kubernetes。Kubernetes上的Spark操作器在云计算方面有很大的劣势,咱们想与更大的社区分享咱们的教训。咱们心愿这个对于Spark操作器和S3集成的演练将帮忙你和/或你的团队启动并运行Spark操作器和S3。
点击浏览网站原文。
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注CNCF微信公众号。