如何在虚拟机上搭建并配置一个分布式的 Spark2.2.0 集群
本文展示了如何在虚拟机上搭建并配置一个分布式的 Spark2.2.0 集群
一、软件准备
VMware-WorkStation
ubuntu-16.04.2-desktop-amd64.iso
jdk-8u144-linux-x64.tar.gz
scala-2.12.3.tgz
spark-2.2.0-bin-hadoop2.7.tgz
二、集群机器准备
在VMware 中安装三台虚拟机,如下:
这三台机器保证环境和用户名一致,这里使用baozi。
使用手动固定ip,否则后面在配置host文件的时候可能因为ip更换而出问题:
ip设置方法
iface eth0 inetstatic
address 192.168.65.128
netmask 255.255.255.0
gateway 192.168.65.2
配置好的ip地址,修改 /etc/hosts 文件,配置如下
三、配置 ssh 无密码访问集群机器
在三台机器中分别执行以下两个命令,以便无密码登录到 localhost。
先安装ssh和openssh-server sudo apt-get install
sudo apt-get install openssh-server
ssh-****** -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将 slave1 和 slave2 的公钥 id_dsa.pub 传给 master。 scp ~/.ssh/id_dsa.pub [email protected]:/home/baozi/ssh/id_dsa.pub.slave1
scp ~/.ssh/id_dsa.pub [email protected]:/home/baozi/ssh/id_dsa.pub.slave2
将 slave1 和 slave2的公钥信息追加到 master 的 authorized_keys文件中。 cat id_dsa.pub.slave1 >> authorized_keys
cat id_dsa.pub.slave2 >> authorized_keys
将 master 的公钥信息 authorized_keys 复制到 slave1 和 slave2 的 .ssh 目录下。 scp authorized_keys [email protected]:/home/baozi/.ssh/authorized_keys
scp authorized_keys [email protected]:/home/baozi/.ssh/authorized_keys
分别 ssh 到 slave1 和 slave2
可以看到从 master 已经不需要密码就可以登录到 slave1 和 slave 2。slave1 和 slave2 也无需密码访问另外两台机器,如下:
四、JDK 和Scala、 Spark 安装配置
分别在三台机器中安装 JDK 和 Scala、Spark,操作流程均是在自己的工作目录中,建立相应的文件夹,本文在/work/目录下分别建立java和scala、spark目录,进入当前目录,将压缩包解压,jdk解压如下,其他的也类似。 [email protected]:/work/java$ tar -zxvf /home/baozi/Downloads/jdk-8u144-linux-x64.tar.gz
之后sudo vim /etc/profile
,在尾部追加环境编辑 export JAVA_HOME=/work/java/jdk1.8.0_144
export HADOOP_HOME=/work/hadoop/hadoop-2.7.4
export SCALA_HOME=/work/scala/scala-2.12.3
export SPARK_HOME=/work/spark/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
三台机器配置完成后,需要source /etc/profile
让其立即生效
五、集群配置
1、修改 master 机器上 Spark配置
进入spark目录的$SPARK_home/conf$
目录。
(1) spark-env.sh
增加如下行配置: export JAVA_HOME=/work/java/jdk1.8.0_144
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1024M
export SPARK_MSATER_WEBUI_PORT=8080
export SPARK_CONF_DIR=/work/spark/spark-2.2.0-bin-hadoop2.7/conf
(2) slaves master
slave1
slave2
master不仅运行master进程也运行worker进程
2、在 slave1 和 slave2 上做同样的配置
六、启动Hadoop集群
1、格式化文件系统
在 master 上执行以下命令:
start-master.sh
start-slaves.sh spark://master:7077
2、确认启动成功
进入浏览器打开http://master:8080
3、进入bin目录启动shell脚本 cd /work/spark/spark-2.2.0-bin-hadoop2.7/bin
spark-shell --master spark://master:7077 --executor-memory 1024m --driver-memory 1024m
最后刷新master:8080可以发现已有有一个application了。