如何使用zeppelin实现大mysql实现数据可视化化

你的位置: >
> 未来大数据平台:使用Zeppelin和Spark一键搭建数据分析及可视化平台案例
导读:在互联网时代,所有业务都需要搭建自己的大数据平台集群,目前最有效率的方式就是在公有云平台上,利用已有的脚本以及镜像,可以在几分钟内搭建好一套大数据系统用于开发、测试及线上部署。高可用架构精心挑选一个典型大数据安装使用案例。
随着大数据使用量呈指数增长,许多用户希望在公有云集群上运行 Apache Spark 以及相关软件,以充分利用容器的可移植性和灵活性。 本文介绍在 Kubernetes 1.2 平台环境运行 Spark 和 Zeppelin。
为什么选择 Zeppelin?
Apache Zeppelin 是一个基于 Web 的支持交互式数据分析 notebook。 Zeppelin 允许用户以简单的方式与 Spark 集群进行交互,而无需处理命令行解释器或 Scala 编译器。
Zeppelin 官方网站描述的特性有
数据可视化及协作
为什么选择 Kubernetes?
在 Kubernetes 之外运行 Spark 有很多方法:
在独立模式下使用专用资源运行
在 YARN 集群上运行,与 Hadoop 和 HDFS 共存
在 Mesos 集群上运行
在 Kubernetes 上运行 Spark 有什么好处?
集群的单一统一接口: Kubernetes 可以管理大量工作负载 ; 无需处理 YARN / HDFS 以进行数据处理,也无需处理其他应用程序的单独容器编排器。
提高服务器利用率:在 Spark 和云本机应用程序之间共享节点。 例如,您可能有一个流应用程序运行 Spark 流水线或一个 Nginx pod 来提供 Web 服务。
工作负载之间的隔离: Kubernetes 的服务质量机制允许您可以同一个节点上做批处理和延迟敏感的服务。
启动 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 /kubernetes/kubernetes.git
$ kubectl create -f kubernetes/examples/spark
‘kubernetes/examples/spark’ 是一个目录,这个命令告诉 kubectl 在该目录创建所有 YAML 文件中定义的所有 Kubernetes 对象。你不必克隆整个库,但它使这个展示更简单一点。
Pods(尤其是 Apache Zeppelin)比较大,所以 Docker 可能需要一些时间来拉取镜像。 rx1 rm2 一旦一切正常运行,您应该看到类似以下内容:
$ kubectl get pods
spark-master-controller-v4v4y
spark-worker-controller-7phix
spark-worker-controller-hq9l9
spark-worker-controller-vwei5
zeppelin-controller-t1njl
可以看到 Kubernetes 正在运行一个 Zeppelin 实例,一个 Spark master 和三个 Spark worker。
设置安全代理
接下来,您将设置一个从本地计算机到 Zeppelin 的安全代理,以便您可以从计算机访问集群中运行的 Zeppelin 实例。 (注意:您需要将此命令更改为在群集上创建的实际 Zeppelin pod)。
$ kubectl port-forward zeppelin-controller-t1njl
这将建立到 Kubernetes 集群和 pod( zeppelin-controller-t1njl)的安全链接,然后将有问题的端口( 8080)转发到本地端口 8080,这将允许您安全地使用 Zeppelin。
使用 Zeppelin 构建一个推荐模型
现在已经安装好了 Zeppelin,接下来能在上面做些什么?
在我们的示例中,我们将向您展示如何构建一个简单的电影推荐模型。 这是基于 Spark 网站上的代码,稍作修改。
现在安全代理已启动,请访问 http://localhost:8080/。 您应该看到如下的介绍页面:
点击“ import note”,为其指定任意名称(例如“ Movies”),然后点击“ add from url”。对于 url,请输入:
/zmerlynn/875fed0f587d12b08ec9/raw/6eac83e99caf7800b17bbd2e7b33c4/movies.json
然后点击“ 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 大小。相信其他大数据的平台搭建也可以采用类似的方法。
英文原文:
http://blog.kubernetes.io/2016/03/using-Spark-and-Zeppelin-to-process-Big-Data-on-Kubernetes.html
转载请注明: &
与本文相关的文章2015 Bossie评选:最佳开源大数据工具
发表于 13:18|
来源InfoWorld|
作者InfoWorld staff
摘要:Bossie奖是知名英文IT网站InfoWorld针对开源软件颁发的年度奖项,根据这些软件对开源界的贡献,以及在业界的影响力评判获奖对象。本次InfoWorld评选出了22款最佳的开源大数据工具,像Spark、Storm都名列榜单之上。
InfoWorld在分布式数据处理、流式数据分析、机器学习以及大规模数据分析领域精选出了2015年的开源工具获奖者,下面我们来简单介绍下这些获奖的技术工具。
在Apache的大数据项目中,Spark是最火的一个,特别是像IBM这样的重量级贡献者的深入参与,使得Spark的发展和进步速度飞快。
与Spark产生最甜蜜的火花点仍然是在机器学习领域。去年以来DataFrames API取代SchemaRDD API,类似于R和Pandas的发现,使数据访问比原始RDD接口更简单。
Spark的新发展中也有新的为建立可重复的机器学习的工作流程,可扩展和可优化的支持各种存储格式,更简单的接口来访问机器学习算法,改进的集群资源的监控和任务跟踪。
在Spark1.5的默认情况下,TungSten内存管理器通过微调在内存中的数据结构布局提供了更快速的处理能力。最后,新的spark-packages.org网站上有超过100个第三方贡献的链接库扩展,增加了许多有用的功能。
Storm是Apache项目中的一个分布式计算框架项目,主要应用于流式数据实时处理领域。他基于低延时交互模式理念,以应对复杂的事件处理需求。和Spark不同,Storm可以进行单点随机处理,而不仅仅是微批量任务,并且对内存的需求更低。在我的经验中,他对于流式数据处理更有优势,特别是当两个数据源之间的数据快速传输过程中,需要对数据进行快速处理的场景。
Spark掩盖了很多Storm的光芒,但其实Spark在很多流失数据处理的应用场景中并不适合。Storm经常和Apache Kafka一起配合使用。3. Kylin
Apache Kylin由eBay研发并在2014年10月贡献给开源社区,于2014年11月加入Aapche孵化器项目,目前正在为毕业成Apache顶级项目投票中。整个开发团队都在eBay CCOE中国卓越中心,负责并主导Kylin产品的设计和研发。目前Kylin在eBay内部已经部署了非常大的应用平台,最大的单个Cube包含超过800亿条数据,系统中90%以上的查询响应小于5秒。这是eBay贡献至Apache软件基金会的第一个项目,也是第一个由中国开发团队完整开发并贡献至Apache软件基金会的第一个项目。目前Kylin社区已经发展了包括来自美团,明略数据等多位committer。Apache Kylin(麒麟)由eBay公司开发,和大多数数据分析任务相类似,是一个通过ANSI-SQL解决超大OLAP数据立方体问题的应用程序。如果想象下eBay在过去和现在有多少在售商品的数量,以及eBay期望对这些物品相关的数据进行交叉分析,你就能够明白Kylin是为解决哪种类型的问题所设计的了。和大部分其他数据分析应用一样,Kylin支持包括JDBC、ODBC,并为编程访问提供REST接口等多种访问方式。尽管Kylin还是Apache的孵化项目,并且社区也建立不久,但该项目具备相当的发展前景,开发团队渴望理解客户的使用案例,并对此做出积极的响应。运营并完善一个初创的数据立方体其实易如反掌,如果你在超大规模数据集的分析方面有需求的话,来关注Kylin吧!4. H2O
H2O是一种分布式的内存处理引擎用于机器学习,它拥有一个令人印象深刻的数组的算法。早期版本仅仅支持R语言,3.0版本开始支持Python和Java语言,同时它也可以作为Spark在后端的执行引擎。
使用H2O的最佳方式是把它作为R环境的一个大内存扩展,R环境并不直接作用于大的数据集,而是通过扩展通讯协议例如REST API与H2O集群通讯,H2O来处理大量的数据工作。
几个有用的R扩展包,如ddply已经被打包,允许你在处理大规模数据集时,打破本地机器上内存容量的限制。你可以在EC2上运行H2O,或者Hadoop集群/YARN集群,或者Docker容器。用苏打水(Spark+
H2O)你可以访问在集群上并行的访问Spark RDDS,在数据帧被Spark处理后。再传递给一个H2O的机器学习算法。
Apex是一个企业级的大数据动态处理平台,即能够支持即时的流式数据处理,也可以支持批量数据处理。它可以是一个YARN的原生程序,能够支持大规模、可扩展、支持容错方法的流式数据处理引擎。它原生的支持一般事件处理并保证数据一致性(精确一次处理、最少一次、最多一次)
以前DataTorrent公司开发的基于Apex的商业处理软件,其代码、文档及架构设计显示,Apex在支持DevOps方面能够把应用开发清楚的分离,用户代码通常不需要知道他在一个流媒体处理集群中运行。
Malhar是一个相关项目,提供超过300种常用的实现共同的业务逻辑的应用程序模板。Malhar的链接库可以显著的减少开发Apex应用程序的时间,并且提供了连接各种存储、文件系统、消息系统、数据库的连接器和驱动程序。并且可以进行扩展或定制,以满足个人业务的要求。所有的malhar组件都是Apache许可下使用。
Druid在今年二月转为了商业友好的Apache许可证,是一个基于“事件流的混合引擎,能够满足OLAP解决方案。最初他主要应用于广告市场的在线数据处理领域,德鲁伊可以让用户基于时间序列数据做任意和互动的分析。一些关键的功能包括低延迟事件处理,快速聚合,近似和精确的计算。
Druid的核心是一个使用专门的节点来处理每个部分的问题自定义的数据存储。实时分析基于实时管理(JVM)节点来处理,最终数据会存储在历史节点中负责老的数据。代理节点直接查询实时和历史节点,给用户一个完整的事件信息。测试表明50万事件数据能够在一秒内处理完成,并且每秒处理能力可以达到100万的峰值,Druid作为在线广告处理、网络流量和其他的活动流的理想实时处理平台。
Flink的核心是一个事件流数据流引擎。虽然表面上类似Spark,实际上Flink是采用不同的内存中处理方法的。首先,Flink从设计开始就作为一个流处理器。批处理只是一个具有开始和结束状态的流式处理的特殊情况,Flink提供了API来应对不同的应用场景,无论是API(批处理)和数据流API。MapReduce的世界的开发者们在面对DataSet处理API时应该有宾至如归的感觉,并且将应用程序移植到Flink非常容易。在许多方面,Flink和Spark一样,其的简洁性和一致性使他广受欢迎。像Spark一样,Flink是用Scala写的。
8. Elasticsearch
Elasticsearch是基于Apache Lucene搜索分布式文件服务器。它的核心,Elasticsearch基于JSON格式的近乎实时的构建了数据索引,能够实现快速全文检索功能。结合开源Kibana
BI显示工具,您可以创建令人印象深刻的数据可视化界面。
Elasticsearch易于设置和扩展,他能够自动根据需要使用新的硬件来进行分片。他的查询语法和SQL不太一样,但它也是大家很熟悉的JSON。大多数用户不会在那个级别进行数据交互。开发人员可以使用原生JSON-over-HTTP接口或常用的几个开发语言进行交互,包括Ruby,Python,PHP,Perl,Java,JavaScript等。
9. SlamData
如果你正在寻找一个用户友好的工具,能理解最新流行的NoSQL数据的可视化工具,那么你应该看一看SlamData。SlamData允许您用熟悉的SQL语法来进行JSON数据的嵌套查询,不需要转换或语法改造。
该技术的主要特点之一是它的连接器。从MongoDB,HBase,Cassandra和Apache的Spark,SlamData同大多数业界标准的外部数据源可以方便的进行整合,并进行数据转换和分析数据。你可能会问:“我不会有更好的数据池或数据仓库工具吗?请认清这是在NoSQL领域。
Drill是一种用于大型数据集的交互分析的分布式系统,由谷歌的Dremel催生。Drill专为嵌套数据的低延迟分析设计,它有一个明确的设计目标,灵活的扩展到10000台服务器来处理查询记录数据,并支持兆级别的数据记录。
嵌套的数据可以从各种数据源获得的(如HDFS,HBase,Amazon S3,和Blobs)和多种格式(包括JSON,Avro,和buffers),你不需要在读取时指定一个模式(“读时模式”)。
Drill使用ANSI 2003 SQL的查询语言为基础,所以数据工程师是没有学习压力的,它允许你连接查询数据并跨多个数据源(例如,连接HBase表和在HDFS中的日志)。最后,Drill提供了基于ODBC和JDBC接口以和你所喜欢的BI工具对接。
HBase在今年的里程碑达到1.X版本并持续改善。像其他的非关系型的分布式数据存储一样,HBase的查询结果反馈非常迅速,因此擅长的是经常用于后台搜索引擎,如易趣网,博科和雅虎等网站。作为一个稳定的、成熟的软件产品,HBase新鲜的功能并不是经常出现,但这种稳定性往往是企业最关心的。
最近的改进包括增加区域服务器改进高可用性,滚动升级支持,和YARN的兼容性提升。在他的特性更新方面包括扫描器更新,保证提高性能,使用HBase作为流媒体应用像Storm和Spark持久存储的能力。HBase也可以通过Phoenix项目来支持SQL查询,其SQL兼容性在稳步提高。Phoenix最近增加了一个Spark连接器,添加了自定义函数的功能。
随着Hive过去多年的发展,逐步成熟,今年发布了1.0正式版本,它用于基于SQL的数据仓库领域。目前基金会主要集中在提升性能、可扩展性和SQL兼容性。最新的1.2版本显著的提升了ACID语意兼容性、跨数据中心复制,以及以成本为基础的优化器。
Hive1.2也带来了改进的SQL的兼容性,使组织利用它更容易的把从现有的数据仓库通过ETL工具进行转移。在规划中讲主要改进:以内存缓存为核心的速度改进
LLAP,Spark的机器学习库的集成,提高SQL的前嵌套子查询、中间类型支持等。
CDAP(Cask Data Access Platform)是一个在Hadoop之上运行的框架,抽象了建造和运行大数据应用的复杂性。CDAP围绕两个核心概念:数据和应用程序。CDAP数据集是数据的逻辑展现,无论底层存储层是什么样的;CDAP提供实时数据流处理能力。
应用程序使用CDAP服务来处理诸如分布式事务和服务发现等应用场景,避免程序开发者淹没在Hadoop的底层细节中。CDAP自带的数据摄取框架和一些预置的应用和一些通用的“包”,例如ETL和网站分析,支持测试,调试和安全等。和大多数原商业(闭源)项目开源一样,CDAP具有良好的文档,教程,和例子。
14. Ranger
安全一直是Hadoop的一个痛处。它不是说(像是经常报道)Hadoop是“不安全”或“不安全”。事实是,Hadoop有很多的安全功能,虽然这些安全功能都不太强大。我的意思是,每一个组件都有它自己的身份验证和授权实施,这与其他的平台没有集成。
2015年5月,Hortonworks收购XA /安全,随后经过了改名后,我们有了Ranger。Ranger使得许多Hadoop的关键部件处在一个保护伞下,它允许你设置一个“策略”,把你的Hadoop安全绑定到到您现有的ACL基于活动目录的身份验证和授权体系下。Ranger给你一个地方管理Hadoop的访问控制,通过一个漂亮的页面来做管理、审计、加密。
Mesos提供了高效、跨分布式应用程序和框架的资源隔离和共享,支持Hadoop、 MPI、Hypertable、Spark等。
Mesos是Apache孵化器中的一个开源项目,使用ZooKeeper实现容错复制,使用Linux Containers来隔离任务,支持多种资源计划分配(内存和CPU)。提供Java、Python和C++
APIs来开发新的并行应用程序,提供基于Web的用户界面来提查看集群状态。
Mesos应用程序(框架)为群集资源协调两级调度机制,所以写一个Mesos应用程序对程序员来说感觉不像是熟悉的体验。虽然Mesos是新的项目,成长却很快。
Apache NiFi 0.2.0 发布了,该项目目前还处于 Apache 基金会的孵化阶段。Apache NiFi 是一个易于使用、功能强大而且可靠的数据处理和分发系统。Apache
NiFi 是为数据流设计。它支持高度可配置的指示图的数据路由、转换和系统中介逻辑。
Apache NiFi是由美国过国家安全局(NSA)贡献给Apache基金会的开源项目,其设计目标是自动化系统间的数据流。基于其工作流式的编程理念,NiFi非常易于使用,强大,可靠及高可配置。两个最重要的特性是其强大的用户界面及良好的数据回溯工具。
NiFi的用户界面允许用户在浏览器中直观的理解并与数据流举行交互,更快速和安全的进行迭代。
其数据回溯特性允许用户查看一个对象如何在系统间流转,回放以及可视化关键步骤之前之后发生的情况,包括大量复杂的图式转换,fork,join及其他操作等。
另外,NiFi使用基于组件的扩展模型以为复杂的数据流快速增加功能,开箱即用的组件中处理文件系统的包括FTP,SFTP及HTTP等,同样也支持HDFS。
NiFi获得来来自业界的一致好评,包括Hortonworks CEO,Leverage CTO及Prescient Edge首席系统架构师等。
在大数据领域,Kafka已经成为分布式发布订阅消息的事实标准。它的设计允许代理支持成千上万的客户在信息吞吐量告诉处理时,同时通过分布式提交日志保持耐久性。Kafka是通过在HDFS系统上保存单个日志文件,由于HDFS是一个分布式的存储系统,使数据的冗余拷贝,因此Kafka自身也是受到良好保护的。
当消费者想读消息时,Kafka在中央日志中查找其偏移量并发送它们。因为消息没有被立即删除,增加消费者或重发历史信息不产生额外消耗。Kafka已经为能够每秒发送2百万个消息。尽管Kafka的版本号是sub-1.0,但是其实Kafka是一个成熟、稳定的产品,使用在一些世界上最大的集群中。
18.OpenTSDB
opentsdb是建立在时间序列基础上的HBase数据库。它是专为分析从应用程序,移动设备,网络设备,和其他硬件设备收集的数据。它自定义HBase架构用于存储时间序列数据,被设计为支持快速聚合和最小的存储空间需求。
通过使用HBase作为底层存储层,opentsdb很好的支持分布与系统可靠性的特点。用户不与HBase的直接互动;而数据写入系统是通过时间序列的守护进程(TSD)来管理,它可以方便的扩展用于需要高速处理数据量的应用场景。有一些预制连接器将数据发布到opentsdb,并且支持从Ruby,Python以及其他语言的客户端读取数据。opentsdb并不擅长交互式图形处理,但可以和第三方工具集成。如果你已经在使用HBase和想要一个简单的方法来存储事件数据,opentsdb也许正好适合你。
19. Jupyter
大家最喜欢的笔记应用程序都走了。jupyter是“IPython”剥离出来成为一个独立的软件包的语言无关的部分。虽然jupyter本身是用Python写的,该系统是模块化的。现在你可以有一个和iPython一样的界面,在笔记本电脑中方便共享代码,使得文档和数据可视化。
至少已经支持50个语言的内核,包括Lisp,R,F #,Perl,Ruby,Scala等。事实上即使IPython本身也只是一个jupyter
Python模块。通过REPL(读,评价,打印循环)语言内核通信是通过协议,类似于nrepl或Slime。很高兴看到这样一个有用的软件,得到了显著的非营利组织资助,以进一步发展,如并行执行和多用户笔记本应用。
20. Zeppelin
Zeppelin是一个Apache的孵化项目. 一个基于web的笔记本,支持交互式数据分析。你可以用SQL、Scala等做出数据驱动的、交互、协作的文档。(类似于ipython
notebook,可以直接在浏览器中写代码、笔记并共享)。
一些基本的图表已经包含在Zeppelin中。可视化并不只限于SparkSQL查询,后端的任何语言的输出都可以被识别并可视化。 Zeppelin
提供了一个 URL 用来仅仅展示结果,那个页面不包括 Zeppelin 的菜单和按钮。这样,你可以轻易地将其作为一个iframe集成到你的网站。
Zeppelin还不成熟。我想把一个演示,但找不到一个简单的方法来禁用“Shell”作为一个执行选项(在其他事情)。然而,它已经看起来的视觉效果比IPython笔记本应用更好,Apache
Zeppelin (孵化中) 是 Apache2 许可软件。提供100%的开源。
原文链接:
(译者/张晓东&审校/朱正贵
责编/仲浩)
译者简介:张晓东,
副总裁,关注云计算领域。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章后使用快捷导航没有帐号?
使用Zeppelin和Spark一键搭建数据分析及可视化平台案例
查看: 25731|
评论: 0|原作者: Zach Loafman|来自: 高可用架构
摘要: 在互联网时代,所有业务都需要搭建自己的大数据平台集群,目前最有效率的方式就是在公有云平台上,利用已有的脚本以及镜像,可以在几分钟内搭建好一套大数据系统用于开发、测试及线上部署。高可用架构精心挑选一个典 ...
在互联网时代,所有业务都需要搭建自己的大数据平台集群,目前最有效率的方式就是在公有云平台上,利用已有的脚本以及镜像,可以在几分钟内搭建好一套大数据系统用于开发、测试及线上部署。精心挑选一个典型大数据安装使用案例。随着大数据使用量呈指数增长,许多用户希望在公有云集群上运行 Apache Spark 以及相关软件,以充分利用容器的可移植性和灵活性。 本文介绍在 Kubernetes 1.2 平台环境运行 Spark 和 Zeppelin。为什么选择 Zeppelin?Apache Zeppelin 是一个基于 Web 的支持交互式数据分析 notebook。 Zeppelin 允许用户以简单的方式与 Spark 集群进行交互,而无需处理命令行解释器或
编译器。Zeppelin 官方网站描述的特性有数据收集数据发现数据分析数据可视化及协作为什么选择 Kubernetes?在 Kubernetes 之外运行 Spark 有很多方法:在独立模式下使用专用资源运行在 YARN 集群上运行,与
和 HDFS 共存在 Mesos 集群上运行在 Kubernetes 上运行 Spark 有什么好处?集群的单一统一接口: Kubernetes 可以管理大量工作负载 ; 无需处理 YARN / HDFS 以进行数据处理,也无需处理其他应用程序的单独容器编排器。提高服务器利用率:在 Spark 和云本机应用程序之间共享节点。 例如,您可能有一个流应用程序运行 Spark 流水线或一个 Nginx pod 来提供 Web 服务。工作负载之间的隔离: Kubernetes 的服务质量机制允许您可以同一个节点上做批处理和延迟敏感的服务。启动 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 /kubernetes/kubernetes.git$ kubectl create -f kubernetes/examples/spark'kubernetes/examples/spark' 是一个目录,这个命令告诉 kubectl 在该目录创建所有 YAML 文件中定义的所有 Kubernetes 对象。你不必克隆整个库,但它使这个展示更简单一点。Pods(尤其是 Apache Zeppelin)比较大,所以 Docker 可能需要一些时间来拉取镜像。 rx1 rm2 一旦一切正常运行,您应该看到类似以下内容:$ kubectl get podsNAME & & & & & & & & & & & & & &READY & & STATUS & &RESTARTS & AGEspark-master-controller-v4v4y & 1/1 & & & Running & 0 & & & & &21hspark-worker-controller-7phix & 1/1 & & & Running & 0 & & & & &21hspark-worker-controller-hq9l9 & 1/1 & & & Running & 0 & & & & &21hspark-worker-controller-vwei5 & 1/1 & & & Running & 0 & & & & &21hzeppelin-controller-t1njl & & & 1/1 & & & Running & 0 & & & & &21h可以看到 Kubernetes 正在运行一个 Zeppelin 实例,一个 Spark master 和三个 Spark worker。设置安全代理接下来,您将设置一个从本地计算机到 Zeppelin 的安全代理,以便您可以从计算机访问集群中运行的 Zeppelin 实例。 (注意:您需要将此命令更改为在群集上创建的实际 Zeppelin pod)。$ kubectl port-forward zeppelin-controller-t1njl 这将建立到 Kubernetes 集群和 pod( zeppelin-controller-t1njl)的安全链接,然后将有问题的端口( 8080)转发到本地端口 8080,这将允许您安全地使用 Zeppelin。使用 Zeppelin 构建一个推荐模型现在已经安装好了 Zeppelin,接下来能在上面做些什么?在我们的示例中,我们将向您展示如何构建一个简单的电影推荐模型。 这是基于 Spark 网站上的代码,稍作修改。现在安全代理已启动,请访问 http://localhost:8080/。 您应该看到如下的介绍页面:点击“ import note”,为其指定任意名称(例如“ Movies”),然后点击“ add from url”。对于 url,请输入:/zmerlynn/875fed0f587d12b08ec9/raw/6eac83e99caf7800b17bbd2e7b33c4/movies.json然后点击“ 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 大小。相信其他大数据的平台搭建也可以采用类似的方法。英文原文:http://blog.kubernetes.io/2016/03/using-Spark-and-Zeppelin-to-process-Big-Data-on-Kubernetes.html欢迎加入本站公开兴趣群软件开发技术群兴趣范围包括:,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流QQ群:Hadoop源代码研究群兴趣范围包括:Hadoop源代码解读,改进,优化,场景定制,与Hadoop有关的各种开源项目,总之就是玩转HadoopQQ群:&
上一篇:下一篇:}

我要回帖

更多关于 apache zeppelin使用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信