Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

时间:2021-10-30 09:18:22

    本文详细阐述如何搭建Spark集群,并分别使用Maven和SBT编译部署Spark,最后在CentOS中安装IDEA进行开发。

CentOS 7

JDK:1.8

Spark:2.0.0、2.2.0

Scala:2.11.8

Hadoop: 2.7

Maven:3.3.9

以下所有步骤均亲自完成并详细截图!(本文为原创,转载请标明本文地址,谢谢!)

一、准备工作:

CentOS镜像:http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso

二、用VMware搭建虚拟机集群

1.规划

master:1核、4G内存

slave1:1核、2G内存

slave2:1核、2G内存

2.搭建一个样板虚拟机

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

接下来进入安装,期间需设置语言、密码。

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)     

选择语言,我这里选择英文,您也可以下拉选择中文

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

等待数秒。。。

选择软件安装(重要)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

这里给出中文翻译,参考选择

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

等待数秒,设置安装位置

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

点击一下就行

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

点进去自行设置密码、用户

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

完成,重启

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

然后

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

网络进去后在配置

————————————

3登录进入CentOS,进行相关配置

设置ip地址

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

注意:这里的ip,子网掩码,网关,DNS是根据我的笔记本电脑上的网络情况设定的,请您根据您的实际情况设置

这是我windows笔记本网络

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

设置主机名

打开终端,以root登录

[root@localhost spark]# vi /etc/sysconfig/network

       添加或修改:

NETWORKING=yes

HOSTNAME=master

[root@localhost spark]# vi /etc/hosts

       添加:

192.168.1.191 master

192.168.1.192 slave1

192.168.1.193 slave2

(slave1、2 见下文)

关闭防火墙和SELinux(Hadoop和Spark运行时需要通过端口通信,关闭其就不会受到阻拦)

查看系统

[root@localhost spark]# rpm -q centos-release
centos-release-7-4.1708.el7.centos.x86_64

CentOS 7 查看防火墙状态

[root@localhost spark]# firewall-cmd --state
running

关闭并禁止开机启动防火墙

[root@localhost spark]# systemctl stop firewalld.service
[root@localhost spark]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost spark]# firewall-cmd --state
not running

关闭SELinux

[root@localhost spark]# vi /etc/selinux/config

       修改:SELINUX=disabled

重启

————————

更新OpenSSL(防止编译过程无法通过ssh连接节点)

[root@localhost spark]# yum update openssl

更改OpenSSL配置(确认使用RSA算法)

[root@localhost spark]# vi /etc/ssh/sshd_config

设置以下三项:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

 重启ssh

[root@localhost spark]# service sshd restart

创建Spark用户目录,方便管理(前面装系统时设置了用户和用户组)

[root@localhost spark]# vi /etc/sysconfig/network
[root@localhost spark]# mkdir /spark
[root@localhost spark]# mkdir /spark/soft
[root@localhost spark]# mkdir /spark/compile
[root@localhost spark]# chown -R spark:spark /spark/

下载

jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

scala:https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

[root@localhost Downloads]# mv /home/spark/Downloads/jdk-8u162-linux-x64.tar.gz /spark/soft/
[root@localhost Downloads]# mv /home/spark/Downloads/scala-2.11.8.tgz /spark/soft/
[root@localhost Downloads]# mv /home/spark/Downloads/spark-2.0.0.tgz /spark/soft/ 
[root@localhost soft]# cd /spark/soft/
[root@localhost soft]# tar -zxvf scala-2.11.8.tgz
[root@localhost soft]# tar -zxvf jdk-8u162-linux-x64.tar.gz

 

配置环境变量

[root@localhost soft]# vi /etc/profile

 

      最后一行添加:

export JAVA_HOME=/spark/soft/jdk1.8.0_162
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export SCALA_HOME=/spark/soft/scala-2.11.8

export PATH=$PATH:$SCALA_HOME/bin

保存配置:

[root@localhost soft]# source /etc/profile

配置使用上面的jdk

[root@localhost soft]# update-alternatives --install /usr/bin/java java /spark/soft/jdk1.8.0_162 170130
[root@localhost soft]# update-alternatives --config java

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

4配置集群环境

将上面做好的样板虚拟机,克隆2份,再修改ip和主机名。

先关机

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

 

 

右键-管理-克隆

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

然后重复克隆操作

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

更改slave1、2的内存配置

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

slave1、2操作相同

然后启动master、slave1、slave2

修改网络连接(3个节点操作相同)

打开终端,root登录

[root@localhost spark]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

       修改:

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

修改主机名(salve1、2相同操作)

[root@slave1 spark]# vi /etc/sysconfig/network

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)    

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

重启master、slave1、2

————————————

配置SSH无密码登录

3个节点都打开终端(注意不是root登录,而是spark用户登录)

[spark@master ~]$ ssh-keygen -t rsa
[spark@slave1 ~]$ ssh-keygen -t rsa
[spark@slave2 ~]$ ssh-keygen -t rsa

然后按回车多次得到

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

3个节点对应以下操作(注意看主机名操作,别搞混淆了)

[spark@master ~]$ cd /home/spark/.ssh/
[spark@master .ssh]$ mv id_rsa.pub master.pub
[spark@slave1 .ssh]$ cd /home/spark/.ssh/
[spark@slave1 .ssh]$ mv id_rsa.pub slave1.pub
[spark@slave1 .ssh]$ scp slave1.pub spark@master:/home/spark/.ssh/(注:之后输入yes,再输入密码)
[spark@slave2 ~]$ cd /home/spark/.ssh/
[spark@slave2 .ssh]$ mv id_rsa.pub slave2.pub
[spark@slave2 .ssh]$ scp slave2.pub spark@master:/home/spark/.ssh/

如下

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

在master节点是合并

[spark@master .ssh]$ cat master.pub >> authorized_keys
[spark@master .ssh]$ cat slave1.pub >> authorized_keys 
[spark@master .ssh]$ cat slave2.pub >> authorized_keys 

得到

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

把合并的公钥发送到两个节点

[spark@master .ssh]$ scp authorized_keys spark@slave1:/home/spark/.ssh/ (同样需要输入yes,密码)
[spark@master .ssh]$ scp authorized_keys spark@slave2:/home/spark/.ssh/

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

 

配置权限(3个节点均需要)

[spark@master .ssh]$ chmod 400 authorized_keys
[spark@slave1 .ssh]$ chmod 400 authorized_keys
[spark@slave2 .ssh]$ chmod 400 authorized_keys

验证ssh(3个节点都验证)

ssh master
ssh slave1
ssh slave2

如果通就好,可能让输入yes,输入即可,如

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

三、编译Spark

在master节点上进行以下操作(不想编译可直接看:四)

1解压Spark

下载spark源码(2.0.0):https://archive.apache.org/dist/spark/spark-2.0.0/spark-2.0.0.tgz

下载spark源码(2.2.0):https://www.apache.org/dyn/closer.lua/spark/spark-2.2.0/spark-2.2.0.tgz

下载完成后解压,配置国内阿里镜像

[spark@master ~]$ mv /home/spark/Downloads/spark-2.0.0.tgz /spark/compile/
[spark@master ~]$ cd /spark/compile/
[spark@master compile]$ tar -zxf spark-2.0.0.tgz
[spark@master compile]$ cd spark-2.0.0/
[spark@master spark-2.0.0]$ vi pom.xml 

修改url为:<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

注:修改两处,您可以输入 / 然后输入repo1定位到那里

2使用Maven编译Spark

Maven:https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

[spark@master ~]$ mv /home/spark/Downloads/apache-maven-3.3.9-bin.tar.gz /spark/soft/
[spark@master ~]$ cd /spark/soft/
[spark@master soft]$ tar -zxvf apache-maven-3.3.9-bin.tar.gz

配置环境变量(使用root用户)

[root@master soft]# vi /etc/profile

     最后添加:

export MAVEN_HOME=/spark/soft/apache-maven-3.3.9
export PATH=$PATH:${MAVEN_HOME}/bin

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

验证

[root@master soft]# vi /etc/profile
[root@master soft]# source /etc/profile
[root@master soft]# mvn -version

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

——————————

注:下面的编译,阁下可以选择2.2.0,也可以选择2.0.0,我的截图为2.0.0的,使用root权限编译,初次编译会下载很多东西,根据网络情况,可能需要一个多小时。我在测试时编译过多次,所以19分钟完事。

开始编译(2.0.0)

[root@master ~]$ cd /spark/compile/
[root@master compile]# cp -r spark-2.0.0 spark-2.0.0-mvn
[root@master compile]# cd spark-2.0.0-mvn/
[root@master spark-2.0.0-mvn]# ./build/mvn -Pyarn -Phadoop-2.7 -Pspark-ganglia-lgpl -Pkinesis-asl -Phive -DskipTests clean package

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

然后构建部署包(生成tar.gz)

./dev/make-distribution.sh --name dev --tgz -Pyarn -Phadoop-2.7 -Phadoop-provided -Phive -Phive-thriftserver -Pnetlib-lgpl

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

最后出现

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

——————————

同理编译2.2.0也可以得到

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

3使用SBT编译Spark

[root@master spark]# cd /spark/compile/
[root@master compile]# cp -r spark-2.0.0 spark-2.0.0-sbt
[root@master compile]# cd spark-2.0.0-sbt/
[root@master spark-2.0.0-sbt]# build/sbt assembly -Pyarn -Phadoop-2.7 -Pspark-ganglia-lgpl -Pkinesis-asl-Phive

注:我在SBT编译时,提示SBT下载网络代理有错,试了多种方法未果,遂放置。建议使用maven编译,或者无定制版本需求的话直接下载官网提供编译好的包。

四搭建Spark集群

安装包准备:

可以用上一步编译好的(2.0.0):spark-2.0.0-bin-dev.tgz(位于/spark/compile/spark-2.0.0-mvn/)

或者上一步编译好的(2.2.0):spark-2.2.0-bin-dev.tgz(位于/spark/compile/spark-2.2.0mvn/)

也可以到官网下载编译好Spark的版本:http://spark.apache.org/downloads.html

Hadoop:http://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

master节点下操作:

1搭建hadoop集群环境(如果下载Spark官网spark-2.x.x-bin-hadoop2.x.tgz则可以不用这一步)

[spark@master ~]$ mkdir /spark/hadoop/
[spark@master ~]$ mkdir /spark/hadoop/data
[spark@master ~]$ mkdir /spark/hadoop/name
[spark@master ~]$ mkdir /spark/hadoop/tmp
[spark@master ~]$ mv /home/spark/Downloads/hadoop-2.7.2.tar.gz /spark/soft/
[spark@master soft]$ tar -zxf hadoop-2.7.2.tar.gz
配置环境:
[spark@master soft]$ cd hadoop-2.7.2/etc/hadoop/
[spark@master hadoop]$ vi core-site.xml 
       添加:
<configuration>
    <!-- 指定HDFS(namenode)的通信地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/spark/hadoop/tmp</value>
    </property>
</configuration>

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

[spark@master hadoop]$ vi hdfs-site.xml

       添加:

<configuration>
    <!-- 设置namenode存放的路径 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/spark/hadoop/name</value>
    </property>

    <!-- 设置hdfs副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 设置datanode存放的路径 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/spark/hadoop/data</value>
    </property>
</configuration>
[spark@master hadoop]$ vi mapred-site.xml

       添加:

<configuration>
    <!-- 通知框架MR使用YARN -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- mapreduce任务记录访问地址-->
    <property>
          <name>mapreduce.jobhistory.address</name>
          <value>master:10020</value>
     </property>
    <property>
           <name>mapreduce.jobhistory.webapp.address</name>
            <value>master:19888</value>
     </property>

</configuration>
[spark@master hadoop]$ vi yarn-site.xml 

       添加:

<configuration>

<!-- Site specific YARN configuration properties -->
    <!-- 设置 resourcemanager 在哪个节点-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>

    <!-- reducer取数据的方式是mapreduce_shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>
[spark@master hadoop]$ vi slaves

       添加:

master
slave1
slave2
[spark@master hadoop]$ vi hadoop-env.sh 

       添加修改:

export JAVA_HOME=/spark/soft/jdk1.8.0_162
export HADOOP_HOME=/spark/soft/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

root 权限添加环境变量

[root@master hadoop]# vi /etc/profile

       最下面添加:

export HADOOP_HOME=/spark/soft/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HADOOP_CONF_DIR=/spark/soft/hadoop-2.7.2/etc/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
[root@master hadoop]# source /etc/profile

将hadoop复制到两个从节点

[spark@master hadoop]$ scp -r /spark/soft/hadoop-2.7.2 spark@slave1:/spark/soft/
[spark@master hadoop]$ scp -r /spark/soft/hadoop-2.7.2 spark@slave2:/spark/soft/

启动验证

[spark@master hadoop]$ cd /spark/soft/hadoop-2.7.2/
[spark@master hadoop-2.7.2]$ ./sbin/start-all.sh 

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

2搭建Spark集群环境

用spark用户创建一个目录

[spark@master ~]$ mkdir /spark/work

放置、解压安装包

[spark@master ~]$ mkdir /spark/work
[spark@master ~]$ mkdir /spark/work/mvn1
[spark@master ~]$ cp /spark/compile/spark-2.0.0-mvn/spark-2.0.0-bin-dev.tgz /spark/work/mvn1/
[spark@master ~]$ cd /spark/work/mvn1/
[spark@master mvn1]$ tar -zxf spark-2.0.0-bin-dev.tgz 

配置conf/slavers

[spark@master mvn1]$ cd spark-2.0.0-bin-dev/conf/
[spark@master conf]$ cp slaves.template slaves
[spark@master conf]$ vi slaves

      修改添加:

master
slave1
slave2

配置conf/spark-enc.sh

[spark@master conf]$ cp spark-env.sh.template spark-env.sh
[spark@master conf]$ vi spark-env.sh

       最下面添加:

export JAVA_HOME=/spark/soft/jdk1.8.0_162
export SCALA_HOME=/spark/soft/scala-2.11.8
export SPARK_HOME=/spark/work/mvn1/spark-2.0.0-bin-dev
export HADOOP_HOME=/spark/soft/hadoop-2.7.2
export HADOOP_CONF_DIR=/spark/soft/hadoop-2.7.2/etc/hadoop
export SPARK_DIST_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
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_MASTER_WEBUI_PORT=8080
export SPARK_CONF_DIR=$SPARK_HOME/conf

复制Spark到其他两个节点

[spark@master conf]$ cd /spark/work/mvn1/
[spark@master mvn1]$ rm -rf spark-2.0.0-bin-dev.tgz
[spark@master mvn1]$ scp -r /spark/work/ spark@slave1:/spark/
[spark@master mvn1]$ scp -r /spark/work/ spark@slave2:/spark/

启动Spark

[spark@master mvn1]$ cd /spark/work/mvn1/spark-2.0.0-bin-dev/
[spark@master spark-2.0.0-bin-dev]$ ./sbin/start-all.sh

结果:

master

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

slave1

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

salve2

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

至此编译部署、搭建Spark集群完成,IDEA开发见下一篇,谢谢!

Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(二)