zoukankan      html  css  js  c++  java
  • Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(一)

        本文详细阐述如何搭建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.搭建一个样板虚拟机

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

         

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

    等待数秒。。。

    选择软件安装(重要)

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

    等待数秒,设置安装位置

    点击一下就行

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

    完成,重启

    然后

    网络进去后在配置

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

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

    设置ip地址

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

    这是我windows笔记本网络

    设置主机名

    打开终端,以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

     重启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

    [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
    

    4配置集群环境

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

    先关机

    右键-管理-克隆

    然后重复克隆操作

    更改slave1、2的内存配置

    slave1、2操作相同

    然后启动master、slave1、slave2

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

    打开终端,root登录

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

           修改:

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

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

        

    重启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

    然后按回车多次得到

    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/

    如下

    在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@master .ssh]$ scp authorized_keys spark@slave1:/home/spark/.ssh/ (同样需要输入yes,密码)
    [spark@master .ssh]$ scp authorized_keys spark@slave2:/home/spark/.ssh/
    

    配置权限(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

    在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>


    注:修改两处,您可以输入 / 然后输入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@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

    验证

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

    ——————————

    注:下面的编译,阁下可以选择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
    

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

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

    最后出现

    ——————————

    同理编译2.2.0也可以得到

    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@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

    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 

    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

    slave1

    salve2

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

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

    许振东LifeFireBomb
    CNBLOG:http://www.cnblogs.com/xuzhendong/
    CSDN:http://blog.csdn.net/lifefirebomb
    【转载文章请注明出处和署名,谢谢!】
  • 相关阅读:
    LINQ -2015-04-27
    wireshark的安装
    c#中的classes和objects一些知识【1】
    初学C#,用vs去开始hello world!
    file_get_contents HTTP request failed! Internal Server Error
    验证码二(验证码使用)
    接口调用 POST
    接口调用 GET方式
    百度地图改标注样式
    Linux-常用命令
  • 原文地址:https://www.cnblogs.com/xuzhendong/p/8464109.html
Copyright © 2011-2022 走看看