Standalone模式

Reads: 767 Edit

spark Standalone模式搭建

部署说明

standalone模式是Spark原生的简单集群管理器, 自带完整的服务,无需依赖任何其他资源管理系统, 可单独部署到一个集群中。该模式需要把节点部署在不同主机上,因而主机之间的通信是部署的重点和难点。

这里采用虚拟机的方式,创建3台虚拟主机来集群模式的搭建,主机命名与Hadoop集群模式相同。即主机1(master)、主机2(slave1)和主机3(slave2)。

由于采用虚拟机,所以首先在一台主机上安装必备软件jdk和spark配置;然后将该主机复制2份,修改主机名;最后完成3台主机之间的通信(免密登录),即可完成hadoop集群模式的搭建。

主机1上的配置

下载安装jdk(目前hadoop3只支持java8)

JDK安装包可以从oracle官网(https://www.oracle.com/java/technologies/downloads/ )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。

sudo tar -xzvf jdk-8u202-linux-x64.tar.gz -C /usr/local

配置jdk环境变量

打开~/.bashrc文件

$ sudo vim ~/.bashrc

然后在文件末尾加入以下代码,保存退出。

export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使环境变量生效

$ source  ~/.bashrc

查看java版本

$ java -version

安装成功后,会出现如下信息:

big-38

下载安装spark

Spark安装包可以从官网(https://spark.apache.org/downloads.html )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。

注意需要在spark安装目录下创建logs目录(spark运行时存放临时文件),然后再整体修改spark安装目录可操作权限(否则普通用户和管理员用户无法在该目录下创建目录和输出文件)。

$ sudo tar -xzvf spark-3.3.1-bin-hadoop3-scala2.13.tgz  -C /usr/local
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13
$ sudo mkdir logs
$ cd /usr/local/
$ sudo chmod -R 777 spark-3.3.1-bin-hadoop3-scala2.13

配置spark环境变量(可以在bashrc或profile文件中添加)

打开~/.bashrc文件

$ sudo vim ~/.bashrc

然后在文件末尾加入以下代码,保存退出。

export SPARK_HOME=/usr/local/spark-3.3.1-bin-hadoop3-scala2.13
export PATH=${SPARK_HOME}/sbin:${SPARK_HOME}/bin:$PATH

使环境变量生效

$ source ~/.bashrc

运行Spark自带计算PI的例子

$  cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13
$ run-example SparkPi 10

成功运行后,将给出pi的估计值,如下图所示。表明Spark安装成功!

big-60

修改配置文件

spark standalone的配置相对简单。只需要修改workers和spark-env.sh两个配置文件,其他保持默认即可。配置文件的位于hadoop安装目录下的conf/中。

workers

$/usr/local/spark-3.3.1-bin-hadoop3-scala2.13/conf
$ mv workers.template workers
$sudo vim workers

在文件末尾加入三台主机名,然后保存退出。如下所示:

master
slave1
slave2

spark-env.sh

$ mv spark-env.sh.template spark-env.sh
$ sudo vim spark-env.sh

在文件末尾加入如下内容,配置SPARK_MASTER_HOST的主机名,以及jdk的路径:

export SPARK_MASTER_HOST=master

export JAVA_HOME=/usr/local/jdk1.8.0_202

主机2和主机3的复制

主机1配置好后,需要将其关机。

找到主操作系统VMware虚拟机的存放目录,直接复制粘贴两份。为了区分各主机的名字,分别将文件夹命名为Ubuntu-master、Ubuntu-slave1、Ubuntu-slave2(主机1如果之前没有命名为Ubuntu-master,也可以在这步命名),如下图所示:

big-51

打开master主机

进入VMware主界面,选择打开虚拟机;然后选择Ubuntu-master所在目录。

big-52

进入Ubuntu-master目录,双击Ubuntu.vmx加载虚拟机,然后按开机按钮开机。

big-53

由于之前对主机1进行了重命名,所以会出现如下提示框。注意这里选择我已复制该虚拟机(ip地址保留原来的)。

big-54

进入master主机后,采用ifconfig命令查看ip地址并记下。

big-57

打开slave1和slave2主机

按照同样的方式,在VMware中分别选择Ubuntu-slave1和Ubuntu-slave2目录下的Ubuntu.vmx,打开slave1和slave2主机。

在开机时,会出现如下提示框,注意必须选择我已复制该虚拟机(slave1和slave2会重新分配ip地址,否则三个主机ip地址一致,无法同时联网)。

big-55

同样,进入slave1和slave2主机后,分别采用ifconfig查看ip地址并记下。

主机1、2、3间免密通信(一)

master主机的配置

修改主机名

$ sudo vim /etc/hostname

将文件的第一行改为master,然后保存退出。

修改成功后,shell中以“用户名@主机名:”的形式显示,如下图所示(需要重启)。

big-56

配置主机之间的IP映射

$ sudo vim /etc/hosts

进入hosts文件中,添加如下三下IP映射

big-58

安装ssh-server

$ sudo apt install openssh-server

配置ssh无密码登陆

生成公钥与私钥(注意三次提示都直接按回车)。

$ ssh-keygen -t rsa

切换到".ssh"隐藏目录

cd  ~/.ssh  

将密钥加入到授权中

$ cat ./id_rsa.pub >> ./authorized_keys  

slave1主机的配置

修改主机名

$ sudo vim /etc/hostname

将文件的第一行改为slave1,然后保存退出。

配置主机之间的IP映射

$ sudo vim /etc/hosts

进入hosts文件中,添加如下三下IP映射

big-58

安装ssh-server

$ sudo apt install openssh-server

配置ssh无密码登陆

生成公钥与私钥(注意三次提示都直接按回车)。

$ ssh-keygen -t rsa

切换到".ssh"隐藏目录

cd  ~/.ssh  

将密钥加入到授权中

$ cat ./id_rsa.pub >> ./authorized_keys  

slave2主机的配置

修改主机名

$ sudo vim /etc/hostname

将文件的第一行改为slave2,然后保存退出。

配置主机之间的IP映射

$ sudo vim /etc/hosts

进入hosts文件中,添加如下三下IP映射

big-58

安装ssh-server

$ sudo apt install openssh-server

配置ssh无密码登陆

生成公钥与私钥(注意三次提示都直接按回车)。

$ ssh-keygen -t rsa

切换到".ssh"隐藏目录

cd  ~/.ssh  

将密钥加入到授权中

$ cat ./id_rsa.pub >> ./authorized_keys  

主机1、2、3间免密通信(二)

master主机的配置

将master主机的公钥发送给slave1和slave2主机

$ scp id_rsa.pub chuishuju@slave1:~/.ssh/master_rsa.pub 
$ scp id_rsa.pub chuishuju@slave2:~/.ssh/master_rsa.pub

slave1主机的配置

将slave1主机的公钥发送给master和slave2主机

$ scp id_rsa.pub chuishuju@master:~/.ssh/slave1_rsa.pub
$ scp id_rsa.pub chuishuju@slave2:~/.ssh/slave1_rsa.pub

slave2主机的配置

将slave2主机的公钥发送给master和slave1主机

$ scp id_rsa.pub chuishuju@master:~/.ssh/slave2_rsa.pub
$ scp id_rsa.pub chuishuju@slave1:~/.ssh/slave2_rsa.pub

主机1、2、3间免密通信(三)

master主机的配置

将slave1和slave2的密钥添加到授权文件

$ cat ./slave1_rsa.pub >> ./authorized_keys   
$ cat ./slave2_rsa.pub >> ./authorized_keys   

slave1主机的配置

将master和slave2的密钥添加到授权文件

$ cat ./master_rsa.pub >> ./authorized_keys   
$ cat ./slave2_rsa.pub >> ./authorized_keys   

slave2主机的配置

将master和slave1的密钥添加到授权文件

$ cat ./master_rsa.pub >> ./authorized_keys   
$ cat ./slave1_rsa.pub >> ./authorized_keys   

主机1、2、3间免密通信(四)

前面步骤已经完成了主机1、2、3间免密通信的配置。可以试下是否成功

在master主机中执行如下命名

$ ssh slave1

如下shell中变为“用户名@slave1”,就表明免密登录成功。输入exit退出远程登录,返回master主机。

$ exit

按照相同的步骤,可以试下3台主机之间的相互免密登录是否成功。记得exit退出远程登录。

启动与结束spark集群

启动集群

$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/sbin
$ start-all.sh

启动成功后,在master主机输入jps,会显示如下进程

Jps
Worker
Master

slave1和slave2主机输入jps,会显示如下进程

Jps
Worker

在主系统的浏览器输入:http://192.168.72.142:8080 ,将登录管理页面(需要替换成自己的master主机ip,8080是集群管理页面的端口)。

big-66

结束集群

$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/sbin
$ stop-all.sh

spark standalone的应用

spark-shell方式

进入spark安装目录

$  cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13

创建wcinput目录

$  sudo mkdir wcinput

将“song.txt”文件通过WinSCP上传到虚拟机的Ubuntu系统,并移动到spark安装目录的wcinpu目录下。

$  sudo cp song.txt  /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/wcinput/

song.txt的内容如下:

big41

再次进入spark安装目录

$  cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13

启动spark shell,注意spark standalone需要先启动。

$  spark-shell --master spark://master:7077

启动spark shell后,其也有对应的后台管理页面(和集群的后台管理页面不同):http://192.168.72.142:4040 ,注意其端口是4040.

big-67

在spark-shell中输入单词统计的代码(结果展示在控制台),注意再次执行时需要把spark安装目录下的work目录删除:

scala> sc.textFile("wcinput").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

big-64

client 模式

client 模式适用于测试调试程序,不适用于生产环境。结果直接在控制台输出。

运行自带的计算PI的例子,其中参数“--deploy-mode client”可不加

$  cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/bin

$  spark-submit --master spark://master:7077 --deploy-mode client --class org.apache.spark.examples.SparkPi /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/examples/jars/spark-examples_2.13-3.3.1.jar 100

计算结果如下所示:

big-68

后台管理页面也会显示运行情况:

big-69

cluster 模式

cluster 模式适用于生产环境,结果需要在管理页面的driver中查看。

$  cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/bin

$  spark-submit --master spark://master:7077 --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/examples/jars/spark-examples_2.13-3.3.1.jar 100

运行结果需要从后台管理页面的driver中查看:

big-70

big-71


获取案例软件和数据,请关注微信公众号并回复:big_dt3


Comments

Make a comment