1、定义
Spark是由Scala编写的一个实时计算系统。
Spark的API包括Java、Python、R、Scala.
2、功能
Spark Core:
①将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
②是Spark核心编程,类似Hadoop中的MR编程框架,但比MR拥有更丰富的算子,且几乎所有对数据的处理都放置在内存中,所以比MR更高效。
Spark SQL: 类似Hive,但是Spark的SQL可以和SparkCore无缝集合,使用起来非常方便。对应的,MR和Hive并不能无缝集合。
Spark Streaming: 类似Storm,用来进行流式处理。
Spark MLlib: 用于机器学习,
Graphx: 用于图计算。
3、部署方式
①YARN : 采用Yarn模式的话,其实就是把spark作为一个客户端提交作业给YARN,实际运行程序的是YARN。所以安装部署只需要在其中一台机器上安装spark就行。
②standalone: 使用spark内置的资源管理与调度器。
注:还有其他的部署方式,比如Apache Mesos等。但是最常见的Spark on Yarn
4、Spark运行方式
Spark程序,无论是Spark core、Spark Sql、Spark Streaming,都可以通过以下两种形式运行: ①Spark-shell 类似于scala的控制台,spark会自动帮我们做以下几件事情: 1.会在启动spark-shell的机器的4040端口上绑定spark的web监控页面 2.将SparkContext类的对象命名为sc 3.将SparkSession类的对象命名为spark 类型: ①spark-shell on StandaLone //可以使用shell连接内置的资源管理(standalone),进行任务提交,这里不研究 ②spark-shell on YARN //可以使用shell连接yarn,进行任务提交。分为客户端、集群模式 1、spark on YARN 之 cluster 集群模式 我们提交的spark应用程序对于YARN来说,也只不过是一个分布式应用程序而已, 在YARN看来,一个MR程序和一个spark程序是没有区别的。所以spark程序提交后, 同样要跟YARN申请一个Continer来启动当前spark程序的Application Master, YARN会选择一个空闲的Datanode启动AM,其实这种情况下,Spark的Driver程序运行在AM内。 提交程序之后,客户端连接可以断开。 2、spark on YARN 之 client 客户端模式 同样会跟YARN申请Continer用以执行AM程序,但是这个AM的作用就只有向YARN申请资源这么一个功能了。 在这种情况下,Spark的Driver程序在提交程序的客户端执行,也就是说Driver程序没有在AM内运行。 这个时候我们可以利用spark-shell进行交互,连接不能断开,也就不能多用户操作 注:在实际开发中我们都使用cluster模式。 eg: sc.textFile("/spark/all").flatMap(line => line.split(" ")). map(word => (word, 1)).reduceByKey(_ + _). saveAsTextFile("/spark/wcall") //在spark-shell中输入上述wordcount语句就行,因为自动构建了SparkContext对象 ②spark-submit 将程序打包成jar包,进行运行。 自己创建SparkContext类的对象,自己确定什么时候程序终止退出等相关所有操作。 命令:spark-submit --master yarn --deploy-mode cluster bigdata-spark-test.jar