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 GraphX
GraphX在Spark基础上提供了一站式的数据解决方案,可以高效地完成图计算的完整流水作业。GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。
Structured Streaming(2.X版本)
结构化流是构建在sparksql引擎上的可伸缩且容错的流处理引擎。在内部,默认情况下,结构化流式处理查询使用微批处理引擎进行处理,该引擎将数据流作为一系列小批处理作业进行处理,从而实现低至100毫秒的端到端延迟,并且只保证一次容错。
环境预准备,至少三台机器互通互联,免密登录,时间同步,安装好JDK1.8。
这里我们的三台服务器名为user1、user2、user3。
Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark的Standalone模式体现了经典的master-slave模式。
集群规划:
基本条件:同步时间、免密登录、关闭防火墙、安装JDK1.8
user1 | user2 | user3 | |
spark | Master Worker | Worker | Worker |
1)解压缩文件
通过MobaXterm_CHS将spark压缩安装文件上传至之前建立的/root/softwares 下,通过命令
tar -zxvf /root/softwares/spark-3.1.2-bin-hadoop3.2.tgz -C /usr/local
解压缩在指定位置并进行文件名修改
mv /usr/local/spark-3.1.2-bin-hadoop3.2/ /usr/local/spark-3.1.2
2)修改配置文件
①进入解压缩后路径的conf目录,修改workers.template文件名为workers
mv /usr/local/spark-3.1.2/conf/workers.template /usr/local/spark-3.1.2/conf/workers
②修改workers文件,添加worker节点
vi /usr/local/spark-3.1.2/conf/workers
覆盖为:
- user1
- user2
- user3
这个文件是用来告诉master我的worker在那些节点上启动。
③修改spark-env.sh.template文件名为spark-env.sh
mv /usr/local/spark-3.1.2/conf/spark-env.sh.template /usr/local/spark-3.1.2/conf/spark-env.sh
④ 修改spark-env.sh文件,添加JAVA_HOME环境变量和集群对应的master节点
vi /usr/local/spark-3.1.2/conf/spark-env.sh
文件末尾追加如下内容
- #引入jdk所在路径(具体根据自己jdk路径修改)
- export JAVA_HOME=/usr/local/jdk1.8.0_152/
- #确定把master启动到哪台服务器上面,=user1就说明在user1上启动master
- SPARK_MASTER_HOST=user1
- #Master的内部通信端口设置为7077
- SPARK_MASTER_PORT=7077
注意:7077端口,相当于hadoop3内部通信的9820端口,不能用于外部访问,此处的端口需要确认自己的Hadoop配置
3)配置环境变量
①配置spark的环境变量
vi /etc/profile
修改如下
- #追加
- export SPARK_HOME=/usr/local/spark-3.1.2/
- export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:
② 刷新环境变量和测试环境变量
[root@user1 ~]# source /etc/profile
[root@user1 ~]# which spark-shell
/usr/local/spark-3.1.2/bin/spark-shell
4)分发配置好的内容到其他节点
#分发spark的安装目录
[root@user1 ~]# scp -r /usr/local/spark-3.1.2 user2:/usr/local/
[root@user1 ~]# scp -r /usr/local/spark-3.1.2 user3:/usr/local/#在qianfeng01上分发配置好的环境到user2和user3
[root@user1 ~]# scp /etc/profile user2:/etc/
[root@user1 ~]# scp /etc/profile user3:/etc/#分别在user2和user3上刷新spark的环境变量
[root@user2 ~]# source /etc/profile
[root@user3 ~]# source /etc/profile
从user1进入到安装目录找sbin目录进入
cd /usr/local/spark-3.1.2/sbin/
启动spark集群
./start-all.sh
检查启动情况
spark提供webUI界面端口是一样8080或8081 内部通信7077
http://user1:8080 或 http://user1:8081
spark计算pai值:
spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://qianfeng01:7077 \ --executor-memory 512m \ --total-executor-cores 2 \ /usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100