Spark概述
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
Spark基于Hadoop1.x架构思想,采用自己的方式改善Hadoop1.x中的问题,接下来我们就一起来学习一下spark技术栈吧。
一.什么是spark
1>.什么是spark
Spark是一种基于内存的快速,通用,可扩展的大数据分析引擎。
2009年诞生于加州大学伯利克分校AMPLab,项目采用Scala编写。
2010年Spark项目被开源。
2013年6月称为Apache孵化项目,注意,此时Hadoop2.x版本还未发布哟(Hadoop2.x版本发布于同年10月份)
2014年2月成为Apache顶级项目。
2>.spark内置模块
Spark Core:
实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义。
Spark SQL:
是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。
Spark Streaming:
是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应。
Spark MLlib:
提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
集群管理器:
Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。
为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop YARN、Apache Mesos,Kubernetes以及Spark自带的一个简易调度器,叫作独立调度器。
Spark可在Hadoop,Apache Mesos,Kubernetes,独立或云中运行。它可以访问各种数据源。您可以在EC2,Hadoop YARN,Mesos或Kubernetes上使用其独立集群模式运行Spark 。访问HDFS, Alluxio, Apache Cassandra, Apache HBase, Apache Hive以及数百种其他数据源中的数据。
Spark的应用:
Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。
当前百度的Spark已应用于大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
3>.spark特点
快:
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上;
Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流;
计算的中间结果是存在于内存中的;
易用:
Spark支持Java,Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用;
Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell种使用Spark集群来验证解决问题的方法;
通用:
Spark提供了统一的解决方案,Spark可以用于批处理,交互式查询(Spark SQL),实时流处理(Spark Steaming),机器学习(Spark MLlib)和图计算(GraphX)。
这些不同类型的处理都可以在同一个应用中无缝使用,减少了开发和维护的人力成本和部署平台的物力成本。
兼容性:
Spark可以非常方便地与其他的开源产品进行融合。比如Spark可以使用Hadoop的YARN,Apache Mesos,Kubernetes等作为它的资源管理和调度器;
Spark可以处理所有Hadoop支持的数据,包括HDFS,HBase等,这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。
二.spark运行模式
博主推荐阅读: http://spark.apache.org/docs/2.4.6/cluster-overview.html http://spark.apache.org/docs/2.4.6/ http://spark.apache.org 下载Spark地址: http://spark.apache.org/downloads.html
1>.Local模式
Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。 它可以通过以下的方式设置Master: local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式。 local[K]: 指定使用几个线程来运行计算,比如local[12]就是运行12个worker线程,通常我们的cpu有几个core就指定几个线程,最大化利用CPU的计算能力。 local[*]: 这种模式直接帮你按照CPU最多cores来设置线程数了。
博主推荐阅读: Spark的Local运行模式部署实战案例:https://www.cnblogs.com/yinzhengjie2020/p/13111177.html
2>.Standalone模式
如下图所示,Spark有内置的集群管理起,它是由一个Master和多个Worker节点构成的spark集群,spark应用程序运行在该集群中。 此时spark集群模式我们称之为Standone模式。
如下图所示,我们一起分析一下Spark Driver和Spark Executor之间的关系:
Driver:
创建SparkContext的应用程序称之为Driver,它可以发送任务给Executor。
Executor:
执行其用于接收任务并执行任务,并将任务执行状态反馈给Driver。所有的RRD算子(Opertor)的计算功能全部由Executor执行。
温馨提示:
Driver和Executor可能不在同一台服务器,若在Driver中声明了一个变量需要在Executor中引用时,就需要将Driver的数据序列化后在通过网络IO发送给Executor所在机器,因此若变量的引用无法序列化时Executor就会出现引用失败的情况。
博主推荐阅读: Spark的Standalone运行模式部署实战案例:https://www.cnblogs.com/yinzhengjie2020/p/13122259.html
3>.YARN模式
Spark客户端直接连接YARN,不需要额外构建spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。 yarn-client:
Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出 yarn-cluster:
Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。 博主推荐阅读: Spark的Yarn运行模式部署实战案例:https://www.cnblogs.com/yinzhengjie2020/p/13128488.html
4>.Mesos模式
Spark 2.4.6专为与Mesos 1.0.0或更高版本一起使用而设计,不需要任何特殊的Mesos补丁。基于文件和环境的机密支持需要Mesos 1.3.0或更高版本。 Spark客户端直接连接Mesos;不需要额外构建Spark集群。国内应用比较少,更多的是运用yarn调度。 博主推荐阅读: http://spark.apache.org/docs/2.4.6/running-on-mesos.html
5>.Kubernetes模式
Spark可以在Kubernetes管理的集群上运行。此功能使用已添加到Spark的本地Kubernetes调度程序。 Kubernetes调度程序目前处于试验阶段。在将来的版本中,配置,容器映像和入口点可能会发生行为更改。 博主推荐阅读: http://spark.apache.org/docs/2.4.6/running-on-kubernetes.html
三.案例实操
1>.
2>.
3>.