前言
上一篇文章我写了如何利用Docker搭建一个Hadoop-muti-node-cluster,从中我们得知Hadoop可以通过MapReduce机制实现一些计算任务,但是由于MapReduce任务需要跑很多次而且需要多次迭代,每次迭代计算结果都要存到HDFS中,而HDFS本质上就是硬盘,相当于把每次运算结果写入硬盘,而且还要考虑备份的问题,所以在MapReduce的传统计算中存储占用了绝大部分时间。而Spark不同,它是将中间计算结果存储在内存中并直接在内存中执行迭代计算,速度会更快(CPU直接访问内存速度远远快于访问磁盘),是现在非常流行的通用云计算引擎/框架。
官网描述: Apache Spark 是用于大规模数据处理的统一分析引擎。它提供了 Java、Scala、Python 和 R 中的高级 API,以及支持通用执行图的优化引擎。它还支持一组丰富的更高级别的工具,包括SparkSQL用于SQL和结构化数据的处理,MLlib机器学习,GraphX用于图形处理,以及结构化流的增量计算和流处理。
1 - 搭建前注意事项
官网说明:
Spark 应用程序作为集群上的独立进程集运行,由SparkContext
主程序(称为驱动程序)中的对象协调。
具体来说,为了在集群上运行,SparkContext 可以连接到多种类型的集群管理器 (Spark 自己的独立集群管理器、Mesos、YARN 或 Kubernetes),它们在应用程序之间分配资源。连接后,Spark 会在集群中的节点上获取执行程序,这些进程为您的应用程序运行计算和存储数据。接下来,它将您的应用程序代码(由传递给 SparkContext 的 JAR 或 Python 文件定义)发送到执行程序。最后,SparkContext 将任务发送给执行程序以运行。
Spark支持的集群管理器如下:
- Standalone– Spark 附带的简单集群管理器,可以轻松设置集群。
- Apache Mesos – 一个通用的集群管理器,也可以运行 Hadoop MapReduce 和服务应用程序。(已弃用)
- Hadoop YARN – Hadoop 2 中的资源管理器。
- Kubernetes – 一个开源系统,用于自动部署、扩展和管理容器化应用程序。
由以上说明在不同的集群模式(即选用不同的集群管理器)下,Spark有不同的部署方法,本文选用最简单的Standalone模式部署(其实Docker和Kubernetes搭建更好,最近没时间学,之后再写相关文章吧)
2 - 下载Spark&Scala
要安装 Spark Standalone 模式,您只需在集群的每个节点上放置一个编译版本的 Spark。
- 关于Spark的下载,一定要寻找对应Hadoop版本的Spark,否则可能会出现奇奇怪怪的问题。
- Spark下载网址在这里:https://spark.apache.org/downloads.html
- 按照Spark下载网站上的说明下载对应的Scala版本(比如下面这个版本官网的说明就是建议下载Scala2.12版本)
- Scala下载网址在这里:https://www.scala-lang.org/download/
关于二者的下载,如果看过我上篇文章的读者,应该已经发现在上篇文的Dockerfile中我已经下载了相应版本的Spark和Scala
3 - 配置环境变量
设置一下Spark必须用到的环境变量:(将下面这些环境变量配置的键值对写入~/.bashrc
)
|
|
更新bash配置:
|
|
4 - 配置Spark配置文件(conf目录)
1 - spark-env.sh文件
-
将下面这些配置写入
$SPARK_HOME/conf
目录下的spark-env.sh
配置文件中(其中SPARK_MASTER_HOST出换成你master的ip地址,或者直接写master应该也可以) -
注意,当Spark安装时,conf/spark-env.sh默认是不存在的。你可以复制conf/spark-env.sh.template创建它(
cp spark-env.sh.template spark-env.sh
),其他配置文件也同理。
|
|
2 - Workers
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# A Spark Worker will be started on each of the machines listed below.
# 在这里写上包括master节点在内的所有工作节点
master
slave1
slave2
3 - log4j.properties
- 打印Spark运行日志,方便后期排错和检查运行情况
|
|
5 - 启动Spark
-
可以使用以下 shell 脚本启动或停止集群,基于 Hadoop 的部署脚本,并在
$SPARK_HOME/sbin
以下位置可用:sbin/start-master.sh
- 在执行脚本的机器上启动主实例。sbin/start-workers.sh
- 在conf/workers
文件中指定的每台机器上启动一个工作实例。sbin/start-worker.sh
- 在执行脚本的机器上启动一个工作实例。sbin/start-all.sh
- 如上所述启动一个主节点和多个工作节点。sbin/stop-master.sh
- 停止通过sbin/start-master.sh
脚本启动的 master 。sbin/stop-worker.sh
- 停止执行脚本的机器上的所有工作实例。sbin/stop-workers.sh
- 停止conf/workers
文件中指定的机器上的所有工作实例。sbin/stop-all.sh
- 如上所述停止主节点和工作节点。
-
使用
jps
就可以看到现在正在运行的进程了
6 - 启动spark-shell并测试运行一个简单的Scala字数计算程序
- 启动Spark-shell:
spark-shell
- 完整代码如下:
|
|
- 运行效果如下:
结语
作为上一篇文章的补充,简单了解一下Spark这个现在流行的通用云计算框架。
感谢您看到最后,如果本文对您有所帮助的话,还希望给我一个一键三连(狗头保命),如果对于我和我的文章感兴趣的话,欢迎点一个关注,您会收到我回答和文章的更新通知,也欢迎加入我建立的技术交流群QQ:725133797 讨论交流。
最后附上我的个人博客站:https://blog.calvinhaynes.top/,欢迎访问和交流