基于Kubernetes的Spark部署完全指南

基于Kubernetes的Spark部署完全指南

【编者的话】本文是在Kubernets上搭建Spark集群的操作指南,同时提供了Spark测试任务及相关的测试数据,通过阅读本文,你可以实践从制作Spark镜像、搭建Spark容器集群,到在集群上运行测试任务的完整流程。

Yarn曾经是Hadoop默认的资源编排管理平台。但最近情况有所变化,特别是对于Hadoop中的Spark,由于其与S3等其他存储平台集成得很好,而与Hadoop生态中其他组件反而没有太紧密的关联,因此Kubernetes正迅速替代Yarn,成为基于对象存储的Spark系统的默认编排管理平台。在这篇文章中,我们将深入研究如何在Kubernetes集群上构建和部署Spark容器。由于Spark的运行依赖于数据,我们将配置Spark集群通过S3 API进行存储操作。

构建Spark容器

在Kubernetes上部署应用的第一步,是创建容器。虽然有些项目会提供官方的容器镜像,但截止到写此文时,Apache Spark并没有提供官方镜像。因此我们将自己创建Spark容器,让我们从Dockerfile开始。

FROM java:openjdk-8-jdkENV hadoop_ver 2.8.2
ENV spark_ver 2.4.4RUN mkdir -p /opt && \
cd /opt && \
curl http://archive.apache.org/dist/hadoop/common/hadoop-${hadoop_ver}/hadoop-${hadoop_ver}.tar.gz | \tar -zx && \
ln -s hadoop-${hadoop_ver} hadoop && \
echo Hadoop ${hadoop_ver} installed in /optRUN mkdir -p /opt && \
cd /opt && \
curl http://archive.apache.org/dist/spark/spark-${spark_ver}/spark-${spark_ver}-bin-without-hadoop.tgz | \tar -zx && \
ln -s spark-${spark_ver}-bin-without-hadoop spark && \
echo Spark ${spark_ver} installed in /optENV SPARK_HOME=/opt/spark
ENV PATH=$PATH:$SPARK_HOME/bin
ENV HADOOP_HOME=/opt/hadoop
ENV PATH=$PATH:$HADOOP_HOME/bin
ENV LD_LIBRARY_PATH=$HADOOP_HOME/lib/nativeRUN curl http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.8.2/hadoop-aws-2.8.2.jar -o /opt/spark/jars/hadoop-aws-2.8.2.jar
RUN curl http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.3/httpclient-4.5.3.jar -o /opt/spark/jars/httpclient-4.5.3.jar
RUN curl http://central.maven.org/maven2/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar -o /opt/spark/jars/joda-time-2.9.9.jar
RUN curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.11.712/aws-java-sdk-core-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-core-1.11.712.jar
RUN curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk/1.11.712/aws-java-sdk-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-1.11.712.jar
RUN curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-kms/1.11.712/aws-java-sdk-kms-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-kms-1.11.712.jar
RUN curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.11.712/aws-java-sdk-s3-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-s3-1.11.712.jarADD start-common.sh start-worker start-master /
ADD core-site.xml /opt/spark/conf/core-site.xml
ADD spark-defaults.conf /opt/spark/conf/spark-defaults.conf
ENV PATH $PATH:/opt/spark/bin


在这个Dockerfile中,我们首先从官方地址下载Apache Spark和Hadoop,然后从Maven获取关联的jar包。当所有关联的文件都已经下载并解压到一个特定的目录后,我们将这些重要的配置文件添加到镜像中。

在这个过程中,你可以很方便的添加自己环境特有的配置。

原本我们可以跳过以上步骤,直接使用一个预先构建好的镜像,但是通过解读这些步骤可以让我们的读者看到Spark容器内部的内容,高级用户可以据此修改来满足他们特殊的需求。

以上示例中使用到的Dockerfile和其他关联的配置文件,可以从这个GitHub仓库中获取。如果要使用这个仓库中的内容,请先使用以下命令将其克隆到本地:

git clone git@github.com:devshlabs/spark-kubernetes.git


现在,你可以根据需要在你的环境中进行任何更改,然后构建镜像,并上传到你使用的容器注册表中。在本文的示例中,我使用Dockerhub作为容器注册表,命令如下:

cd spark-kubernetes/spark-container
docker build . -t mydockerrepo/spark:2.4.4
docker push mydockerrepo/spark:2.4.4


记得将其中的mydockerrepo替换为你实际的注册表名字。

在Kubernetes上部署Spark

至此,Spark容器镜像已经构建好,并可以拉取使用了。让我们使用此镜像来部署Spark Master和Worker。第一步是创建Spark Master。我们将使用Kubernetes ReplicationController创建Spark Master。在本文的示例中,我仅用单实例创建Spark Master。而在有HA需求的生产环境中,你可能需要将副本数设置为3或者以上。

kind: ReplicationController
apiVersion: v1
metadata:
name: spark-master-controller
spec:
replicas: 1
selector:
component: spark-master
template:
metadata:labels:component: spark-master
spec:hostname: spark-master-hostnamesubdomain: spark-master-headlesscontainers:- name: spark-masterimage: mydockerrepo/spark:2.4.4imagePullPolicy: Alwayscommand: ["/start-master"]ports:- containerPort: 7077- containerPort: 8080resources:requests:cpu: 100m


为了使Spark Worker节点可以发现Spark Master节点,我们还需要创建headless服务。

当你从GitHub仓库完成克隆,并进入spark-kubernetes目录后,就可以启动Spark Master服务了,命令如下:

kubectl create -f spark-master-controller.yaml
kubectl create -f spark-master-service.yaml


现在,确保Master节点和所有的服务都正常运行,然后就可以开始部署Worker节点了。Spark Worker的副本数设置为2,你可以根据需要修改。Worker启动命令如下:

kubectl create -f spark-worker-controller.yaml


最后,通过以下命令确认是否所有服务都正常运行:

kubectl get all


执行以上命令,你应该可以看到类似下面的内容:

NAME                               READY     STATUS    RESTARTS   AGE
po/spark-master-controller-5rgz2   1/1       Running   0          9m
po/spark-worker-controller-0pts6   1/1       Running   0          9m
po/spark-worker-controller-cq6ng   1/1       Running   0          9mNAME                         DESIRED   CURRENT   READY     AGE
rc/spark-master-controller   1         1         1         9m
rc/spark-worker-controller   2         2         2         9mNAME               CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
svc/spark-master   10.108.94.160   <none>        7077/TCP,8080/TCP   9m

 

向Spark集群提交Job

现在让我们提交一个Job,看看是否执行正常。不过在此之前,你需要一个有效的AWS S3账户,以及存有样本数据的桶存在。我使用了Kaggle下载样本数据,样本数据可以从https://www.kaggle.com/datasna ... s.csv获取,获取以后需要上传到S3的桶里。假定桶名是s3-data-bucket,那么样本数据文件则位于s3-data-bucket/data.csv。

数据准备好以后,将其加载到一个Spark master pod中执行。以Pod名为spark-master-controller-5rgz2为例,命令如下:

kubectl exec -it spark-master-controller-v2hjb /bin/bash


如果你登录进入了Spark系统,可以运行Spark Shell:

export SPARK_DIST_CLASSPATH=$(hadoop classpath)
spark-shell
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://192.168.132.147:4040
Spark context available as 'sc' (master = spark://spark-master:7077, app id = app-20170405152342-0000).
Spark session available as 'spark'.
Welcome to____              __/ __/__  ___ _____/ /__
_\ \/ _ \/ _ `/ __/  '_/
/___/ .__/\_,_/_/ /_/\_\   version 2.4.4/_/Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_221)
Type in expressions to have them evaluated.
Type :help for more information.scala>


现在让我们告诉Spark Master,S3存储的详细信息,在上文所示的Scale提示符中输入以下配置:

sc.hadoopConfiguration.set("fs.s3a.endpoint", "https://s3.amazonaws.com")
sc.hadoopConfiguration.set("fs.s3a.access.key", "s3-access-key")
sc.hadoopConfiguration.set("fs.s3a.secret.key", "s3-secret-key")


现在,只需将以下内容粘贴到Scala提示符中,以提交Spark Job(请记得修改S3相关字段):

import org.apache.spark._
import org.apache.spark.rdd.RDD
import org.apache.spark.util.IntParam
import org.apache.spark.sql.SQLContext
import org.apache.spark.graphx._
import org.apache.spark.graphx.util.GraphGenerators
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.tree.DecisionTree
import org.apache.spark.mllib.tree.model.DecisionTreeModel
import org.apache.spark.mllib.util.MLUtilsval conf = new SparkConf().setAppName("YouTube")
val sqlContext = new SQLContext(sc)import sqlContext.implicits._
import sqlContext._val youtubeDF = spark.read.format("csv").option("sep", ",").option("inferSchema", "true").option("header", "true").load("s3a://s3-data-bucket/data.csv")youtubeDF.registerTempTable("popular")val fltCountsql = sqlContext.sql("select s.title,s.views from popular s")
fltCountsql.show()


最后,你可以使用kubectl patch command命令更新Spark部署。比如,你可以在负载较高时添加更多工作节点,然后在负载下降后删除这些工作节点。

原文链接:Complete guide to deploy Spark on Kubernetes(翻译:木木TM)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript数字格式化通用类——accounting.js使用

简介 accounting.js 是一个非常小的JavaScript方法库用于对数字&#xff0c;金额和货币进行格式化。并提供可选的Excel风格列渲染。它没有依赖任何JS框架。货币符号等可以按需求进行定制。 代码内容及下载地址 accounting.js代码如下&#xff1a; View Code /*!* accounting…

linux清除cpu,解决kswapd0 CPU占用率高的问题-清除病毒

连接服务器时发现cpu使用率100%&#xff0c;使用top命令查看是kswapd0进程占用cpu极高百度下后知道kswapd0进程的作用&#xff1a;它是虚拟内存管理中&#xff0c;负责换页的&#xff0c;操作系统每过一定时间就会唤醒kswapd &#xff0c;看看内存是否紧张&#xff0c;如果不紧…

Apache+Mysql+php+ZenTaoPMS安装配置文档

基于ApacheMysqlphpZenTaoPMS安装配置一、Apache安装配置tar zxvf httpd-2.2.23.tar.gzcd httpd-2.2.23mkdir –p /usr/local/app/apache2./configure --prefix/usr/local/app/apache2 --enable-so \--enable-maintainer-mode --enable-rewrite #添加后面的参数是为了解析s…

富编译器汇总及二次开发Demo

富文本编译器汇总 名称总大小当前版本官方地址扩展方法xhEditor1.43 MBv1.1.14http://xheditor.comhttp://xheditor.com/demos/demo09.htmlMarkitUp98.7 KBv1.1.13http://markitup.jaysalvat.com/home在set.js里设置开发。jwysiwyg1.52 MBv0.98https://github.com/akzhan/jwys…

docker安装nginx并配置SSL到个人博客

1 准备 1.已安装好docker环境 2.已申请好域名 2 申请SSL证书 我使用的是腾讯云&#xff0c;申请免费的TrustAsia的SSL证书&#xff0c;阿里云等或者其他平台一般都会提供TrustAsia的SSL证书的 填好域名等相关信息&#xff0c;一般一天就可以下载证书了 3 docker安装Nginx …

redhat linux 6.5 vnc,redhat 6.5 YUM安装kvm 并用VNC远程管理

安装完REDHAT&#xff0c;我们首先配置yum源先卸载系统原来的YUM包一、配置redhat yum源#rpm -aq|grep yum|xargs rpm -e --nodeps下载YUM源&#xff0c;我用的是&#xff11;&#xff16;&#xff13;的# wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-plugin…

Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用

简介 本文介绍net处理html页面元素的工具类(HtmlAgilityPack.dll)的使用&#xff0c;用途比较多的应该是例如采集类的功能&#xff0c;采集到的html字符串要怎样处理是一个头痛的问题&#xff0c;如果是截取就太麻烦了而且容易出错。所有就用到本文的第三方dll来处理了。 下载…

Mongo数据库安装成Windows服务

Mongo数据库安装成Windows服务每次运行mongod --dbpath D:/MongoDB/data命令行来启动MongoDB实在是不方便&#xff0c; 把它作为Windows服务&#xff0c;这样就方便多了。1、代码示例&#xff1a;D:\MongoDB\bin>mongod --dbpath D:\Work\MongoDB\Data --directoryperdb --l…

用DOSBox运行老游戏

DOSBox0.74-3-win32-installer.exe下载地址&#xff1a; https://nchc.dl.sourceforge.net/project/dosbox/dosbox/0.74-3/DOSBox0.74-3-win32-installer.exe 金庸群侠传&#xff1a;https://dos.zczc.cz/games/%E9%87%91%E5%BA%B8%E7%BE%A4%E4%BE%A0%E4%BC%A0/download 新版本…

HttpWebRequest采集读取网站挂载Cookie的通用方法

Asp.net 版本 HttpWebRequest采集时添加&#xff1a;httpWebRequest.CookieContainer new CookieContainer();就能远程挂载上cookie,那么怎样去读取挂载上的cookie呢&#xff1f; 下面方法为大家解除烦恼。 遍历方法&#xff1a; public static List<Cookie> GetAllC…

最小公约数最大公倍数c语言for循环,C语言的那些题(四)——最大公约数和最小公倍数...

今天&#xff0c;和大家分享一道关于求最大公约数和最小公倍数的题。关于最大公约数和最小公倍数可以算是一个学编程语言常见的题目&#xff0c;这里我和大家分享两种解法&#xff0c;循环法和辗转相除法。我们先看一下题目&#xff1a;输入两个数&#xff0c;求最大公约数和最…

宿主机为linux、windows分别实现VMware三种方式上网(转)

一、VMware三种方式工作原理1 Host-only连接方式 让虚机具有与宿主机不同的各自独立IP地址&#xff0c;但与宿主机位于不同网段&#xff0c;同时为宿主主机新增一个IP地址&#xff0c;且保证该IP地址与各虚机IP地址位于同一网段。最终结果是新建了一个由所有虚机与宿主主机所构…

摔倒、摔倒检测数据集

近期学习摔倒检测&#xff0c;接触摔倒数据集&#xff0c;自学笔记&#xff0c;仅用作个人复习。 the UR fall detection dataset (URFD)the fall detection dataset (FDD) UR Fall Detection Dataset &#xff08;University of Rzeszow - 热舒夫大学&#xff09; 数据集网…

visual studio内置“iis”组件提取及二次开发

简介 visual studio安装后会自带小型的“iis”服务器&#xff0c;本文就简单提取一下这个组件&#xff0c;自己做一个小型“iis”服务器吧。先来说用途吧&#xff08;废话可绕过&#xff09;&#xff0c;比如在服务器上没有安装iis&#xff0c;或者给客户演示asp.net程序&…

c语言 正号运算符 作用,C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,...

1级(左结合)   () 圆括号&#xff1b;[]下标运算符&#xff1b;->指向结构体成员运算符&#xff1b;. 结构体成员运算符.   2级(右结合)   !逻辑非运算符&#xff1b;~按位取反运算符&#xff1b;前缀增量运算符&#xff1b;--前缀减量运算符&#xff1b;正号运算符&a…

每一个问题都是一把锁

每一个问题都是一把锁&#xff0c;你要相信&#xff0c;世界上一定存在一把钥匙可以打开这把锁&#xff0c;你也一定能找到这把钥匙。

禁用 Microsoft 软件保护平台服务

以前没怎么注意&#xff0c;老觉得cup没事就声音很大&#xff0c;后来发现这玩意儿占用巨多cup&#xff0c;希望有大佬帮助解决一下&#xff0c;谢谢 解决方法&#xff1a; 首先使用【Win】 【R】组合快捷键&#xff0c;快速打开运行命令框&#xff0c;在打开后面键入命令&am…

asp.net mvc3.0安装失败之终极解决方案

安装失败截图 原因分析 因为vs10先安装了sp1补丁&#xff0c;然后安装的mvc3.0&#xff0c;某些文件被sp1补丁更改&#xff0c;导致“VS10-KB2483190-x86.exe”安装不了&#xff0c;造成安装失败。 解决方案 方法1&#xff1a; 解压mvc安装包&#xff08;AspNetMVC3Setup.e…

从binlog恢复数据及Mysqlbinlog文件删除

做了mysql主 从也有一段时间了&#xff0c;这两天检查磁盘空间情况&#xff0c;发现放数据库的分区磁盘激增了40多G&#xff0c;一路查看下来&#xff0c;发现配置好主从复制以来到现在的binlog就有40G&#xff0c;原来根源出在这里&#xff0c;查看了一下my.cnf&#xff0c;看…

c语言如何把void换成汉字,有没有大佬帮我把这个代码改成void函数形式的代码。拜托了!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include typedef bool(*_fun_ptr)(int*, int*, int, int);void fun(int *a, int* b, int size, int x, _fun_ptr do_fun, char* format, ...){va_list args;va_start(args, format);for (int i 0; i < size; i){if (…