Spark实时大数据系统
Spark概述
如果说Hadoop是用来做分布式数据存储的话,那么Spark就是是用来做分布式数据计算的。
虽然MapReduce也是分布式数据计算引擎,但它基本上都是通过磁盘执行计算任务的。
而Spark完全是基于内存的计算引擎,所以它不仅可以完成和MapReduce同样的离线计算任务,还能执行实时
计算任务,以及和Hive类似的SQL
查询。
所以Spark也被称为统一计算引擎
(MapReduce和Hive能做的它都能做)。
Spark有以下几个显著的特点。
既能做
批处理
(离线计算
),也能做流处理
(实时计算
,流处理
在后面的Flink部分会有深入分析)。虽然Spark基于Scala语言开发,但可以使用多种语言来实现应用程序的快速开发,例如Scala、Java和Python,而且可以实现
函数式编程
+SQL
混合风格的开发。
......
logs = spark.read.json("log.json")
logs.where("date >= 2023-01-01 00:00:00").select("username")
......
words.flatMap(_.split(" ")).map((_, 1)).map(_._2).reduceLeft(_ + _)
......
多种文件读取和任务执行方式。Spark的数据源可以是普通文本文件,可以是HDFS,或者NoSQL中存储的数据,也可以是Kafka等其他几百个数据源中的数据。而它的大数据计算任务,不仅可以通过YARN来执行,也可以通过Mesos和K8S执行。
通过它的几大核心组件:Spark Streaming、Spark SQL、Spark MLib和Spark GraphX,实现一站式的大数据分析和处理。
Spark | Hadoop | |
---|---|---|
综合能力 | 所有的能力都与计算 相关 | 既包括MapReduce计算,也包括HDFS存储,还包括YARN资源管理和任务调度 |
计算模型 | 可以包含多个计算任务,实现复杂的迭代计算 | 仅包含Map 和Reduce 两个阶段,不够灵活 |
处理速度 | 计算任务在内存执行 | MapReduce基于磁盘运行 |
功能定位 | 通用计算引擎 | 大数据基础设施 |

Spark既可以独立运行,也可以在Hadoop的YARN中运行。
下面的部署都是按独立运行
(也叫Standalone
)的方式进行的。
Docker独立部署
安装好Docker,然后执行下面的脚本。
version: '3'
services:
spark-master:
image: bde2020/spark-master:3.2.1-hadoop3.2
container_name: spark-master
ports:
- "8080:8080"
- "7077:7077"
volumes:
- /home/work/volumes/spark:/data
environment:
- INIT_DAEMON_STEP=setup_spark
spark-worker-1:
image: bde2020/spark-master:3.2.1-hadoop3.2
container_name: spark-worker-1
depends_on:
- spark-master
ports:
- "8081:8081"
volumes:
- /home/work/volumes/spark:/data
environment:
- "SPARK_MASTER=spark://spark-master:7077"
spark-worker-2:
image: bde2020/spark-master:3.2.1-hadoop3.2
container_name: spark-worker-2
depends_on:
- spark-master
ports:
- "8082:8082"
volumes:
- /home/work/volumes/spark:/data
environment:
- "SPARK_MASTER=spark://spark-master:7077"
在浏览器中输入http://172.16.185.176:8080/就能看到SparkMaster
节点的基本信息。
本机独立部署
下载并解压Spark安装包。
> cd /home/work
> wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz
> tar zxvf spark-3.2.1-bin-hadoop3.2.tgz
> mv spark-3.2.1-bin-hadoop3.2 spark-3.2.1
> cd spark-3.2.1
修改配置文件spark-env.sh
。
> cd conf
> cp spark-env.sh.template spark-env.sh
> vi spark-env.sh
# 在文件末尾添加内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_401
export SPARK_MASTER_HOST=hadoop
修改配置文件workers
(在Spark 3.x
版本中,已经把文件slaves
的名字改为了workers
)。
> cp workers.template workers
> vi workers
hadoop
启动Spark。
> cd /home/work/spark-3.2.1
> ./sbin/start-all.sh
如果启动成功,就能用jps
命令看到Master
和Worker
这两个进程。
> jps
171873 Jps
171820 Worker
171709 Master
在浏览器中输入http://172.16.185.176:8080/就能看到SparkMaster
节点的基本信息。
提交测试任务
官方给出了比较详细的文档来说明如何向Spark提交计算任务,照着它里面给出的提示来做就行了。
例如,向Spark提交一个PI计算
任务。
> ./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop:7077 \
examples/jars/spark-examples_2.12-3.2.1.jar \
10
运行后得到结果如下。
......
24/07/17 15:42:08 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:38) finished in 44.468 s
24/07/17 15:42:08 INFO DAGScheduler: Job 0 is finished. Cancelling potential speculative or zombie tasks for this job
24/07/17 15:42:08 INFO TaskSchedulerImpl: Killing all running tasks in stage 0: Stage finished
24/07/17 15:42:08 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 44.574533 s
Pi is roughly 3.1395231395231393
24/07/17 15:42:08 INFO SparkUI: Stopped Spark web UI at http://hadoop:4040
......
感谢支持
更多内容,请移步《超级个体》。