配置:
spark根目录:/usr/local/share/spark
启动spark:进入/usr/local/share/spark/sbin 执行 start-all.sh
关闭spark:进入/usr/local/share/spark/sbin 执行 stop-all.sh
一 下载spark安装包
安装的第一步就是下载spark安装包,从官网进行下载
spark的官网是:http://spark.apache.org/downloads.html
下载的时候要按照自己hadoop的版本进行衡量,这里下载的是2.4.3版本
可以使用命令直接在服务器上进行下载
wget https://www.apache.org/dyn/closer.lua/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz
下载成功后使用解压命令解压在share目录下即可
解压命令为:
tar -xzvf 压缩包名称
二 安装基础
1、Java8安装成功
2、zookeeper安装成功
3、hadoopHA安装成功
4、Scala安装成功
三 spark环境变量配置
- 配置环境变量 /etc/profile
进入profile文件后,进行spark所在路径的环境变量配置
在文件中添加如下内容:
export SPARK_HOME=/usr/local/share/spark
PATH=$PATH:$SPARK_HOME/bin
编辑文件保存退出后,记得source使配置文件生效
四 spark环境配置过程
- 进入spark/conf文件夹
spark的配置文件都在这个文件夹里面
在修改配置之前,要先进行用户权限的修改
chmod 775 -R 文件名
- 修改配置文件
进入到conf文件夹中,复制 spark-env.sh.template 文件夹并改名为 spark-env.sh
所用命令为:
cp spark-env.sh.template spark-env.sh
编辑spark-env.sh文件,添加如下内容:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export JAVA_HOME=/usr/local/share/jdk
export HADOOP_HOME=/usr/local/share/hadoop
# export PATH=$JAVA_HOME/bin:$PATH
export SCALA_HOME=/usr/local/share/scala
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_MASTER_IP=dn1
export SPARK_MASTER_PORT=7077
完成配置即可
复制slaves.template成slaves
使用的命令如下:
cp slaves.template slaves
编辑文件添加如下内容
dn1
dn2
dn3
- 将安装包分发给其他节点
把nna上的spark安装包内容分发给其他四个节点,nns,dn1,dn2,dn3
命令如下:
#使用scp,命令传输到其他节点
#scp用法:scp -r 本地目录 用户@#ip:/目录
scp -r /usr/local/share/spark root @nns://usr/local/share
scp -r /usr/local/share/spark root @dn1://usr/local/share
scp -r /usr/local/share/spark root @dn2://usr/local/share
scp -r /usr/local/share/spark root @dn3://usr/local/share
五 spark启动过程
- 先启动zookeeper集群
-所有节点均要启动Zookeper集群服务,具体实现命令如下:
zkServer.sh start
之后,通过zkServer.sh status来查看集群启动状态
共有三个DataNode节点,所以在启动完毕之后,会呈现一个leader和两个follower。
-再启动HDFS集群
任意一个节点执行即可,执行命令如下:
start-dfs.sh
-再 启动spark进程
进入sbin目录下,输入./start-all.sh启动spark进程
输入命令是:
./start-all.sh
这里一定一定要注意,输入的命令前面有./
如果没有./的话,会报没有该命令的错误。
之后输入jps查看进程,
Master和worker是spark的进程 剩下的几个是hadoop的进程
查看进程发现spark集群只有dn1成功启动了Master进程,其他三个节点均没有启动成功,需要手动启动
进入到spsrk/sbin目录下,执行下面的命令,其他两个节点都要执行
start-master.sh
(这个start-master.sh文件和hadooop的是一样的,要想开关spark集群都要来spark的sbin目录下进行操作)
- jps查看进程
执行成功,jps查看进程,Master进程和Worker进程都以启动成功
六 验证
1 查看web界面master状态
通过浏览器进行查看,输入
http://n dn1ip:8080
2 启动spark shell
先进入到spark的bin目录下,在终端输入下面的命令:
>. spark-shell \
> --master spark://dn1:7077 \
> --executor-memory 500m \
> --total-executor-cores 1
参数说明:
–master spark://dn1:7077 指定Master的地址
–executor-memory 500m:指定每个worker可用内存为500m
–total-executor-cores 1: 指定整个集群使用的cup核数为1个
这个地方的master只能是nna nns 而其他的不可以
成功之后会出现下方的界面:
注意:如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
3 在spark shell中编写WordCount程序
(1)编写一个testabc.txt文件并上传到HDFS上的spark目录下
在终端执行的命令如下:
vi testabc.txt
hadoop fs -mkdir -p /spark
hadoop fs -put test123.txt /spark
执行效果如下:
test123.txt 文件的内容如下:
you,jump
i,jump
you,jump
i,jump
jump
(2)在spark shell中用scala语言编写spark程序
先进入scala,然后执行scala命令,执行命令如下:
sc.textFile("/spark/test23.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/spark/out1")
代码说明:
sc是SparkContext对象,该对象是提交spark程序的入口
textFile("/spark/hello.txt")是hdfs中读取数据
flatMap(.split(" "))先map再压平
map((,1))将单词和1构成元组
reduceByKey(+)按照key进行reduce,并将value累加
saveAsTextFile("/spark/out")将结果写入到hdfs中
(3)使用hdfs命令查看结果
在datanode上查看结果,输入命令如下:
hadoop fs -cat /spark/out1/p*
输出结果如下图:
4 执行spark on yarn
在hadoop的bin目录下,执行下面的命令:
spark-shell --master yarn --deploy-mode client
报错:
报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。
解决方法:
先停止YARN服务,然后修改yarn-site.xml,增加如下内容
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
然后把yarn-site,xml 的内存分配从1024,改成2048.
重新执行命令启动spark on yarn
重启成功出现下面的界面,这个时候的master是yarn
ok 测试完成