Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
一、Spark运行模式
部署Spark集群大体上分为两种模式:单机模式与集群模式
大多数分布式框架都支持单机模式,方便开发者调试框架的运行环境。但是在生产环境中,并不会使用单机模式。因此,后续直接按照集群模式部署Spark集群。
下面详细列举了Spark目前支持的部署模式。
1)Local模式:在本地部署单个Spark服务
2)Standalone模式:Spark自带的任务调度模式。(国内常用)
3)YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内常用)
4)Mesos模式:Spark使用Mesos平台进行资源与任务的调度。
Spark安装地址
1)官网地址:Apache Spark™ - Unified Engine for large-scale data analytics
2)文档查看地址:Overview - Spark 2.1.1 Documentation
3)下载地址:Downloads | Apache Spark
链接:https://pan.baidu.com/s/1S2yN1xmMUupYZTlKIq2QZw?pwd=wc7q
提取码:wc7q
1.Local模式
Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。
1.安装使用
1)上传并解压Spark安装包
tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/
mv spark-2.1.1-bin-hadoop2.7 spark-local
2)官方求PI案例
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.11-2.1.1.jar \
10
--class:表示要执行程序的主类;
--master local[2]
(1)local: 没有指定线程数,则所有计算都运行在一个线程当中,没有任何并行计算
(2)local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行
(3)local[*]: 自动帮你按照CPU最多核来设置线程数。比如CPU有4核,Spark帮你自动设置4个线程计算。
spark-examples_2.11-2.1.1.jar:要运行的程序;
10:要运行程序的输入参数(计算圆周率π的次数,计算次数越多,准确率越高);
3)结果展示
利用蒙特·卡罗算法求PI
2.官方WordCount案例
1)需求:读取多个输入文件,统计每个单词出现的总次数。
2)需求分析:
读取外部文件->
对读取到的内容进行切割并进行扁平化处理->
对数据集中的内容进行结构转换->
对相同的单词key的value进行聚合->
将执行结果进行收集->
3)代码实现:
(1)准备文件
mkdir input
在input下创建2个文件1.txt和2.txt,并输入以下内容
(2)启动spark-shell
spark-local]$ bin/spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/04/16 13:03:49 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
22/04/16 13:03:53 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
Spark context Web UI available at http://192.168.58.102:4040
Spark context available as 'sc' (master = local[*], app id = local-1650085429923).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
注意:sc是SparkCore程序的入口;spark是SparkSQL程序入口;master = local[*]表示本地模式运行。
(3)再开启一个hadoop102远程连接窗口,发现了一个SparkSubmit进程
运行任务方式说明:spark-submit,是将jar上传到集群,执行Spark任务;spark-shell,相当于命令行工具,本身也是一个Application。
(4)登录hadoop102:4040,查看程序运行情况(注意:spark-shell窗口关闭掉,则hadoop102:4040页面关闭)
说明:本地模式下,默认的调度器为FIFO。
(5)运行WordCount程序
sc.textFile("/opt/module/spark-local/input").flatMap(_.split("
")).map((_,1)).reduceByKey(_+_).collect
res2: Array[(String, Int)] = Array((hive,1), (zookeeper,1), (hello,7), (kafka,1), (tez,1), (spark,1), (hapdoop,1), (kafaka,1))
注意:只有collect开始执行时,才会加载数据。
3.集群角色
1.Master和Worker
2.Driver和Executor
3.通用运行流程
总结:Master和Worker是Spark的守护进程,即Spark在特定模式下正常运行所必须的进程。Driver和Executor是临时程序,当有具体任务提交到Spark集群才会开启的程序。