随着大数据使用量呈指数增长,许多用户希望在公有云集群上运行 Apache Spark 以及相关软件,以充分利用容器的可移植性和灵活性。 本文介绍在 Kubernetes 1.2 平台环境运行 Spark 和 Zeppelin。
为什么选择 Zeppelin?
Apache Zeppelin 是一个基于 Web 的支持交互式数据分析 notebook。 Zeppelin 允许用户以简单的方式与 Spark 集群进行交互,而无需处理命令行解释器或 Scala 编译器。
Zeppelin 官方网站描述的特性有
为什么选择 Kubernetes?
在 Kubernetes 之外运行 Spark 有很多方法:
在 Kubernetes 上运行 Spark 有什么好处?
启动 Spark
对于此案例,我们将使用 Google 容器引擎( GKE),然而它也可以在您安装 Kubernetes 集群的任何地方运行。首先,创建一个具有 storage-full 作用域的 Container Engine 集群。这些 Google Cloud Platform 作用域将允许群集写入私人 Google Cloud Storage Bucket(我们会在后面介绍您需要它的原因):
$ gcloud container clusters create spark --scopes storage-full
--machine-type n1-standard-4
注意:我们使用 n1-standard-4(大于默认节点大小)来演示水平弹性扩展特性。 Spark 的默认节点大小为 n1-standard-1。
创建集群后,您可以使用 Kubernetes GitHub 库中的配置文件在 Kubernetes 上启动 Spark:
$ git clone https://github.com/kubernetes/kubernetes.git
$ kubectl create -f kubernetes/examples/spark
'kubernetes/examples/spark' 是一个目录,这个命令告诉 kubectl 在该目录创建所有 YAML 文件中定义的所有 Kubernetes 对象。你不必克隆整个库,但它使这个展示更简单一点。
Pods(尤其是 Apache Zeppelin)比较大,所以 Docker 可能需要一些时间来拉取镜像。 rx1 rm2 一旦一切正常运行,您应该看到类似以下内容:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
spark-master-controller-v4v4y 1/1 Running 0 21h
spark-worker-controller-7phix 1/1 Running 0 21h
spark-worker-controller-hq9l9 1/1 Running 0 21h
spark-worker-controller-vwei5 1/1 Running 0 21h
zeppelin-controller-t1njl 1/1 Running 0 21h
可以看到 Kubernetes 正在运行一个 Zeppelin 实例,一个 Spark master 和三个 Spark worker。
设置安全代理
接下来,您将设置一个从本地计算机到 Zeppelin 的安全代理,以便您可以从计算机访问集群中运行的 Zeppelin 实例。 (注意:您需要将此命令更改为在群集上创建的实际 Zeppelin pod)。
$ kubectl port-forward zeppelin-controller-t1njl 8080:8080
这将建立到 Kubernetes 集群和 pod( zeppelin-controller-t1njl)的安全链接,然后将有问题的端口( 8080)转发到本地端口 8080,这将允许您安全地使用 Zeppelin。
使用 Zeppelin 构建一个推荐模型
现在已经安装好了 Zeppelin,接下来能在上面做些什么?
在我们的示例中,我们将向您展示如何构建一个简单的电影推荐模型。 这是基于 Spark 网站上的代码,稍作修改。
现在安全代理已启动,请访问 http://localhost:8080/。 您应该看到如下的介绍页面:
点击“ import note”,为其指定任意名称(例如“ Movies”),然后点击“ add from url”。对于 url,请输入:
然后点击“ import note”。 你现在应该有一个“ Movies”笔记本(或你输入的任何名字)。 如果您点击该笔记,您应该会看到类似如下的网页:
现在,您可以点击 PySpark 代码块右上角附近的 Play 按钮,您将创建一个新的电影推荐模型!
在应用程序中, Zeppelin 充当 Spark 的驱动程序,与 Spark 集群主机交互以完成其工作。 在这种情况下,在 Zeppelin pod 中运行的驱动程序提取数据并将其发送给 Spark master, Spark master 将其传送给 worker, worker 使用驱动程序中的代码收集电影推荐模型。在下一节中,我们将讨论如何将数据保存到 GCS( Google cloud storage)。
使用 Google Cloud Storage 存储数据
对于下一步,我们将使用 Google Cloud Storage,这样就可以存储我们的模型数据超过一个 pod 的生命周期。 Spark for Kubernetes 是使用内置的 Google Cloud Storage connector 构建的。只要您可以从运行 Kubernetes 节点的 Google Container Engine 项目中的虚拟机访问您的数据,就可以使用 Spark 映像上的 GCS 连接器访问您的数据。
如果需要,您可以更改 note 顶部的变量,程序将实际保存和恢复影片推荐引擎的模型 - 当然需将这些变量指向您有权访问的 GCS bucket。如果你想创建一个 GCS bucket,你可以在命令行上这样做:
$ gsutil mb gs://my-spark-models
您需要将此 URI 更改为对您唯一的 URI。
注意:计算模型并保存比计算后丢弃要慢得多。然而,如果计划重用该模型,计算并保存的速度更合算,以后在每次使用模型时恢复模型,而不是每次都丢弃和重新计算模型。
如何在云平台自动弹性水平扩展 Spark 集群?
我们可以使用 Kubernetes Horizontal Pod Autoscaling 自动扩展 Spark worker pool,设置 worker pool 的目标 CPU 阈值和最小/最大值。这避免了必须手动配置工作副本的数量。
这样可以使用自动伸缩功能(注意:如果你没有改变集群的机器类型,你可能想把 -max 限制为更小):
$ kubectl autoscale --min=1 --cpu-percent=80 --max=10 \
rc/spark-worker-controller
要想查看自动扩展的效果,请等待复制控制器恢复到单副本。使用 'kubectl get rc' 并等待 Spark-worker-controller 上的“ replicas”列回落到 1。
我们之前的程序负载太低,造成弹性伸缩 HPA( horizontal pod autoscaling)远远不能发挥作用。 可以将工作负载改大,就能看到自动扩展出更多的 pods,请将代码中的“ rank = 100”行更改为“ rank = 200.”,执行 play 后, Spark worker pool 应快速增加到 20 个 pod。需要 5 分钟, worker pool 才会下降到一个副本。
在本文中,展示了如何在 Kubernetes 上运行 Spark 和 Zeppelin,以及如何使用 Google Cloud Storage 存储 Spark model 以及如何使用 Horizontal Pod Autoscaling 动态弹性扩展 Spark worker pool 大小。相信其他大数据的平台搭建也可以采用类似的方法
高可用架构
改变互联网的构建方式
长按二维码 关注「高可用架构」公众号
高可用架构主办 GIAC 全球互联网架构大会特别推出大数据及算法专题,议题方向覆盖大数据平台以及与电商、视频、人工智能等热点方向结合。在 11 月购买还可以享受 7 折早鸟票,点击阅读原文进入购买页面。
原文来自:高可用架构
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。
结合权威身份认证的精准人脸风险查询服务,提升人脸应用及身份认证生态的安全性。人脸风险情报库,覆盖范围广、准确性高,数据权威可靠。
全国城市和站点空气质量查询,污染物浓度及空气质量分指数、空气质量指数、首要污染物及空气质量级别、健康指引及建议采取的措施等。
输入手机号和拦截等级,查看是否是风险号码