Spark从集群环境搭建到运行第一个案例
spark是什么?
Apache Spark是一个快速的,多用途的集群计算系统,相对于Hadoop MapReduce将结果保存在磁盘中,Spark使用了内存保存中间结果,支持迭代计算,能在数据尚未写入磁盘时在内存中进行运算。
spark的发展历史
- 2009年由加州大学伯克利分校AMPLab开创
- 2010年通过BSD许可协议开源发布
- 2013年捐赠给Apache软件基金会并切换开源协议到Apache2.0
- 2014年2月,Spark成为Apache的顶级项目
- 2014年11月,Spark的母公司Databricks团队使用Spark刷新数据排序世界记录
Spark的组成
- Spark Core:
包含Spark的基本功能,包含任务调度,内存管理,容错机制等,内部定义了RDDs(弹性分布式数据集),提供了很多APIs来创建和操作这些RDDs。为其他组件提供底层的服务。
- Spark SQL:
Spark处理结构化数据的库,就像Hive SQL,Mysql一样,企业中用来做报表统计。
- Spark Streaming:
实时数据流处理组件,类似Storm。Spark Streaming提供了API来操作实时流数据。企业中用来从Kafka接收数据做实时统计。
- MLlib:
一个包含通用机器学习功能的包,Machine learning lib包含分类,聚类,回归等,还包括模型评估和数据导入。MLlib提供的上面这些方法,都支持集群上的横向扩展。
- Graphx:
处理图的库(例如,社交网络图),并进行图的并行计算。像Spark Streaming,Spark SQL一样,它也继承了RDD API。它提供了各种图的操作,和常用的图算法,例如PangeRank算法。
Spark运行流程图
流程介绍
- 构建Spark Application的应用程序运行环境,启动SparkContext核心
- SparkContext向资源管理调度器(Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend,
- Executor向SparkContext申请Task
- SparkContext将应用程序分发给各个Executor
- SparkContext构建成DAG图,最后由Task Scheduler将Task发送给Executor运行
- Task在Executor上运行,运行完释放所有资源
运行一个Spark程序需要经历的流程
1.启动 Drive, 创建 SparkContext应用
2.Client 提交程序给 Drive, Drive 跟Cluster Manager申请集群资源
3.资源申请完毕,在worker中运行Executor
4.Driver 将程序转化为 Tasks, 分发给 Executor 执行
Spark集群环境搭建
1.机器与环境准备:
- 1.1:准备node-01 node-02 node-03三台机器完成
- 1.2:三台机器已经正常运行hadoop集群,关闭linux防火墙
- 1.3:准备好三台机器的java环境
2.下载对应版本的安装包并解压到对应目录(node-01)
代码语言:javascript复制# 下载 Spark 创建(mkdir)/export/softwares export/servers目录
cd /export/softwares
wget https://archive.apache.org/dist/spark/spark-2.2.0/spark-2.2.0-bin-hadoop2.7.tgz
# 解压 Spark 安装包
tar xzvf spark-2.2.0-bin-hadoop2.7.tgz
# 移动 Spark 安装包到对应目录并修改名字
mv spark-2.2.0-bin-hadoop2.7.tgz /export/servers/spark
3.修改对应配置文件
代码语言:javascript复制#修改配置文件`spark-env.sh`, 以指定运行参数
cd /export/servers/spark/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
#将以下内容复制进配置文件末尾
# 指定 Java Home(根据自己机器的路径修改)
export JAVA_HOME=/export/servers/jdk1.8.0
# 指定 Spark Master 地址
export SPARK_MASTER_HOST=node01 //主节点
export SPARK_MASTER_PORT=7077 //运行端口
#修改slaves配置文件
cd /export/servers/spark/conf
cp slaves.template slaves
vi slaves
#添加如下内容,node-01
node-01
node-02
node-03
4.分发配置文件
代码语言:javascript复制#将 Spark 安装包分发给集群中其它机器
cd /export/servers
scp -r spark root@node02:$PWD
scp -r spark root@node03:$PWD
启动 Spark Master 和 Slaves,
5.启动集群
代码语言:javascript复制#cd /export/servers/spark
sbin/start-all.sh
6.查看进程
- 在主节点node-01的机器上 输入JPS 可以看到workers与Master进行开启 在node-02与node-03机器出现Master进程 即算安装完成
7.访问WEBUI界面
- 要注意的是8080是spark的WEB UI访问端口,7077是master端口,不要搞混 输入http:IP:8080访问WEBUI界面
Spark测试案例运行
代码语言:javascript复制#1 进入 Spark 安装目录中
cd /export/servers/spark/
#2 运行 Spark 示例任务 spark-submit运行案例jar包
bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://node01:7077,node02:7077,node03:7077
--executor-memory 1G
--total-executor-cores 2
/export/servers/spark/examples/jars/spark-examples_2.11-2.2.3.jar
100
#3 运行结果
Pi is roughly 3.14
到这里Spark搭建完成.