安装 Spark 之前需要先安装 Java,Scala 及 Python。
一、安装java
java安装过程不在多说,可以在我其他文章中查找,下面附上java SE JDK下载链接
http://www.oracle.com/technetwork/java/javase/downloads/index.html
查看java版本
1.2 安装 Scala
[hadoop@cnbugs ~]$ wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
[hadoop@cnbugs ~]$ tar xf scala-2.11.8.tgz
添加scala系统变量
[hadoop@cnbugs ~]$ vi /etc/profile
export SCALA_HOME=/home/hadoop/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin
[hadoop@cnbugs ~]$ source /etc/profile
2、 安装python
一般情况下系统会自动安装好python
查看当前python版本
二、Spark安装
官网上下载已经预编译好的 Spark binary,直接解压即可。
Spark官方下载链接
http://spark.apache.org/downloads.html
spark的版本与scala的版本有关系,需要对应下载!
spark的版本也和hadoop的版本有关!
下载Spark的安装包
[hadoop@cnbugs ~]$ wget https://mirrors.huaweicloud.com/apache/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
解压
[hadoop@cnbugs ~]$ tar xf spark-2.4.4-bin-hadoop2.7.tgz
配置变量
[hadoop@cnbugs ~]$ vim /etc/profile
export SPARK_HOME=/home/hadoop/spark-2.4.4-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
[hadoop@cnbugs ~]$ source /etc/profile
配置配置文件
[hadoop@cnbugs ~]$ cd spark-2.4.4-bin-hadoop2.7/conf/
[hadoop@cnbugs conf]$ cp log4j.properties.template log4j.properties
修改 log4j.rootCategory 为 WARN, console ,可避免测试中输出太多信息:
把INFO改成WARN,只输出警告信息
[hadoop@cnbugs conf]$ vim log4j.properties
修改spark-env.sh配置变量
[hadoop@cnbugs conf]$ cp spark-env.sh.template spark-env.sh
[hadoop@cnbugs conf]$ vim spark-env.sh
export JAVA_HOME=/usr/java
export SCALA_HOME=/home/hadoop/scala-2.11.8
#如果需要提交到yarn上面执行还需要配置hadoop和yarn的路径
# Hadoop 的配置文件目录
#export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# YARN 的配置文件目录
#export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
#配置完成后就可以提交到yarn ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1G --num-executors 3 --executor-memory 1G --executor-cores 1 ./examples/jars/spark-examples_2.11-2.1.1.jar 100
export SPARK_HOME=/home/hadoop/spark-2.4.4-bin-hadoop2.7
spark-env.sh
脚本会在启动 Spark 时加载
Spark安装完成!
三、Spark-Shell
Spark-Shell
是 Spark 自带的一个 Scala 交互 Shell ,可以以脚本方式进行交互式执行,类似直接用 Python 及其他脚本语言的 Shell 。
进入Spark-Shell
只需要执行spark-shell
即可:
执行spark-shell
进入到Spark-Shell
后可以使用Ctrl D
组合键退出 Shell。
在Spark-Shell
中我们可以使用 Scala 的语法进行简单的测试,比如我们运行下面几个语句获得文件/etc/protocols
的行数以及第一行的内容:
var file = sc.textFile("/etc/protocols")
file.count()
file.first()
上面的操作中创建了一个 RDD file
,执行了两个简单的操作:
-
count()
获取 RDD 的行数 -
first()
获取第一行的内容
我们继续执行其他操作,比如查找有多少行含有tcp
和udp
字符串:
file.filter(line => line.contains("tcp")).count()
file.filter(line => line.contains("udp")).count()
查看一共有多少个不同单词的方法,这里用到 Mapreduce 的思路:
var wordcount = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
wordcount.count()
上面两步骤我们发现,/etc/protocols
中各有一行含有tcp
与udp
字符串,并且一共有 243 个不同的单词。
上面每个语句的具体含义这里不展开,可以结合你阅读的文章进行理解,后续实验中会不断介绍。这里仅仅提供一个简单的例子让大家对 Spark 运算有基本认识。
操作完成后,Ctrl D
组合键退出 Shell。
四、Pyspark
Pyspark 类似 Spark-Shell ,是一个 Python 的交互 Shell 。
执行pyspark
启动进入 Pyspark:
pyspark
在 Pyspark 中,我们可以用 Python 语法执行 Spark-Shell 中的操作,比如下面的语句获得文件/etc/protocols
的行数以及第一行的内容:
file = sc.textFile("/etc/protocols")
file.count()
file.first()
五、启动节点
5.1 启动主节点
进入到spark的sbin目录来启动spark主节点服务
[hadoop@cnbugs ~]$ cd spark-2.4.4-bin-hadoop2.7/sbin/
[hadoop@cnbugs sbin]$ ./start-master.sh
查看启动的相关端口
没有报错的话表示 master 已经启动成功,master 默认可以通过 web 访问
图中所示,master 中暂时还没有一个 worker ,我们启动 worker 时需要 master 的参数,该参数为spark://cnbugs:7077
5.2 启动从节点
[hadoop@cnbugs sbin]$ ./start-slave.sh
查看spark的web界面是否有工作节点
5.3 测试实例
[hadoop@cnbugs sbin]$ MASTER=spark://cnbugs:7077 spark-shell
刷新 master 的 web 页面,可以看到新的Running Applications
,如下图所示:
当退出 spark-shell 时,这个 application 会移动到Completed Applications
一栏。
点击页面中的 Application 和 Workers 的链接查看并了解相关信息。
5.4 停止服务
[hadoop@cnbugs sbin]$ ./stop-all.sh
[hadoop@cnbugs sbin]$ jps
六、拓展
Spark集群部署的步骤
上面的步骤介绍了我们在单机模式Standalone Mode
下部署的 Spark 环境,如果要部署 Spark 集群稍有区别:
- 主节点上配置 spark ,例如
conf/spark-env.sh
中的环境变量 - 主节点上配置
conf/slaves
,添加从节点的主机名,注意需要先把所有主机名输入到/etc/hosts
避免无法解析 - 把配置好的 spark 目录拷贝到所有从节点,从节点上的目录路径与主节点一致,例如都设置为
/opt/spark-2.3.1-bin-hadoop2.6
- 配置主节点到所有从节点的 SSH 无密码登录,使用
ssh-keygen -t rsa
和ssh-copy-id
两个命令 - 启动 spark 集群,在主节点上执行
sbin/start-all.sh
- 进入主节点的 web 界面查看所有 worker 是否成功启动
spark 的部署模式:
1, local 本地模式,只要机器上有 spark 的安装包, 仅仅是用于测试不写 master -- master local 一个线程 local[2] local[*] 模拟使用多个线程
2, Standalone spark 自带的集群模式 --master spark://hdp-01:7077
3, yarn 把 spark 任务,运行在 yarn --master yarn