Spark概述
Spark定义
Apache Spark 是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算.
Spark 只是一个计算框架, 不像 Hadoop 一样包含了分布式文件系统和完备的调度系统, 如果要使用 Spark, 需要搭载其它的文件系统和更成熟的调度系统
Spark组件
Spark 提供了 批处理(RDDs), 结构化查询(DataFrame), 流计算(SparkStreaming), 机器学习(MLlib), 图计算(GraphX) 等组件
这些组件均是依托于通用的计算引擎 RDDs 而构建出的, 所以 spark-core
的 RDDs 是整个 Spark 的基础
Spark的优点
-
速度快
- Spark 的在内存时的运行速度是 Hadoop MapReduce 的100倍
- 基于硬盘的运算速度大概是 Hadoop MapReduce 的10倍
- Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理
-
易用
df = spark.read.json("logs.json") df.where("age > 21") .select("name.first") .show()
- Spark 支持 Java, Scala, Python, R, SQL 等多种语言的API.
- Spark 支持超过80个高级运算符使得用户非常轻易的构建并行计算程序
- Spark 可以使用基于 Scala, Python, R, SQL的 Shell 交互式查询.
-
通用
- Spark 提供一个完整的技术栈, 包括 SQL执行, Dataset命令式API, 机器学习库MLlib, 图计算框架GraphX, 流计算SparkStreaming
- 用户可以在同一个应用中同时使用这些工具, 这一点是划时代的
-
兼容
-
Spark 可以运行在 Hadoop Yarn, Apache Mesos, Kubernets, Spark Standalone等集群中
-
Spark 可以访问 HBase, HDFS, Hive, Cassandra 在内的多种数据库
-
Spark与Hadoop
Hadoop | Spark | |
---|---|---|
类型 | 基础平台, 包含计算, 存储, 调度 | 分布式计算工具 |
场景 | 大规模数据集上的批处理 | 迭代计算, 交互式计算, 流计算 |
延迟 | 大 | 小 |
易用性 | API 较为底层, 算法适应性差 | API 较为顶层, 方便使用 |
价格 | 对机器要求低, 便宜 | 对内存有要求, 相对较贵 |
Spark集群搭建
-
下载
[Spark]:
, 下载时候选择对应的 Hadoop 版本
-
修改配置文件
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
,以指定从节点为止, 从在使用sbin/start-all.sh
启动集群的时候, 可以一键启动整个集群所有的 Worker-
进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改
cd /export/servers/spark/conf cp slaves.template slaves vi slaves
-
配置所有从节点的地址
node02 node03
-
-
配置
HistoryServer
-
默认情况下, Spark 程序运行完毕后, 就无法再查看运行记录的 Web UI 了, 通过 HistoryServer 可以提供一个服务, 通过读取日志文件, 使得我们可以在程序运行结束后, 依然能够查看运行过程
-
复制
spark-defaults.conf
, 以供修改cd /export/servers/spark/conf cp spark-defaults.conf.template spark-defaults.conf vi spark-defaults.conf
-
将以下内容复制到
spark-defaults.conf
末尾处, 通过这段配置, 可以指定 Spark 将日志输入到 HDFS 中spark.eventLog.enabled true spark.eventLog.dir hdfs://node01:8020/spark_log spark.eventLog.compress true
-
将以下内容复制到
spark-env.sh
的末尾, 配置 HistoryServer 启动参数, 使得 HistoryServer 在启动的时候读取 HDFS 中写入的 Spark 日志# 指定 Spark History 运行参数 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:8020/spark_log"
-
为 Spark 创建 HDFS 中的日志目录
hdfs dfs -mkdir -p /spark_log
-
-
分发和运行
-
将 Spark 安装包分发给集群中其它机器
cd /export/servers scp -r spark root@node02:$PWD scp -r spark root@node03:$PWD
-
启动 Spark Master 和 Slaves, 以及 HistoryServer
cd /export/servers/spark sbin/start-all.sh sbin/start-history-server.sh
-
-
sa
Spark 集群高可用搭建
保证zookeeper可用
-
停止 Spark 集群
cd /export/servers/spark sbin/stop-all.sh
-
修改配置文件, 增加 Spark 运行时参数, 从而指定 Zookeeper 的位置
-
进入
spark-env.sh
所在目录, 打开 vi 编辑cd /export/servers/spark/conf vi spark-env.sh
-
编辑
spark-env.sh
, 添加 Spark 启动参数, 并去掉 SPARK_MASTER_HOST 地址# 指定 Java Home export JAVA_HOME=/export/servers/jdk1.8.0_141 # 指定 Spark Master 地址 # export SPARK_MASTER_HOST=node01 export SPARK_MASTER_PORT=7077 # 指定 Spark History 运行参数 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:8020/spark_log" # 指定 Spark 运行时参数 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
-
-
分发配置文件到整个集群
cd /export/servers/spark/conf scp spark-env.sh node02:$PWD scp spark-env.sh node03:$PWD
-
启动
-
在
node01
上启动整个集群cd /export/servers/spark sbin/start-all.sh sbin/start-history-server.sh
-
在
node02
上单独再启动一个 Mastercd /export/servers/spark sbin/start-master.sh
-
-
查看
node01 master
和node02 master
的 WebUI -
Spark各服务端口
Service port Master WebUI node01:8080 Worker WebUI node01:8081 History Server node01:4000