VirtualBox+Centos7+Hadoop2.6.0+scala-2.11.8+spark2.2.0搭建spark集群环境

来源:互联网 发布:对于人工智能的感想 编辑:程序博客网 时间:2024/05/22 12:58

      最近想做spark开发,于是就动手搭建spark集群环境,由于没有服务器可用,只能采用在个人pc上采用虚机这种形式,捣鼓了两天终于将spark集群搭建起来了,先将详细的搭建过程做一下记录,以备之后查询。如果你不小心看到来了这篇文章,希望能给你带来帮助。但是,就本人观读别人笔记的经验,多半还是会有问题,毕竟每个人所具备的软硬件环境不可能完全一样,搭建过程中的软件安装流程也不可能完全一样。

      下面结合一些截图来详细说明具体搭建过程。

1. 必要软件准备

  •  VirtualBox:版本5.1.30,  直接百度,下载地址:http://rj.baidu.com/soft/detail/15321.html?ald,另外也可以去官网下载相应版本,官网软件下载地址为:     https://www.virtualbox.org/wiki/Download_Old_Builds_5_1;
  •  Centos:版本:CentOS-7-x86_64-DVD-1511.iso,官网下载地址:http://vault.centos.org/7.2.1511/isos/x86_64/
  •  hadoop: 版本Hadoop2.6.0,下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/,下载  hadoop-2.6.0.tar.gz
  •  scala: 版本scala-2.11.8, 下载地址:http://www.scala-lang.org/download/2.11.8.html, 下载 scala-2.11.8.tgz
  •  spark: 版本spark2.2.0, 下载地址:http://spark.apache.org/downloads.html,下载spark-2.2.0-bin-hadoop2.6.tgz
  •  jdk:版本JDK1.8.0_91,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
         这些地址还是很重要的,不用每次都搜索下载源啦!

2. 基础准备

2.1 VirualBox安装与配置

      这个基本上没什么可说的,本 人用的win10系统,双机安装,一路next就可以了。给个安装参考:http://www.jb51.net/article/94065.htm

这样默认设置的问题是,当安装多个虚机后,造成系统盘占用很厉害。

      解决方法:通过更改虚拟硬盘存放目录,将其放到一个大空间的磁盘上。


2.2 Centos7系统安装

1)在VirtualBox中,新建虚拟电脑实例

 a. 启动VirtualBox,点击新建,在弹出的窗口中,填写虚拟电脑名称,并选择系统类型,如下图所示:


b. 为虚拟电脑分配内存大小


c. 创建虚拟硬盘





到这里,在virtualbox的虚拟电脑列表中就能看到刚刚建立的虚拟电脑了,如下图所示:


2)安装centos7操作系统

双击Centos7,在弹出的窗口中,选着Centos7系统的安装程序,点击启动就可以开始安装系统,后续安装过程和正常安装Centos7系统一样。具体可参考:http://www.linuxidc.com/Linux/2016-09/135593.htm


2.3 实现虚拟机访问互联网及多台虚拟机之间无密码访问

1)虚拟网卡设置

      主要是为虚拟机配置两块虚拟网卡,一个采用NAT方式,一个采用Host-only方式,如下面所示,配置好就可以了。两者有什么区别呢?不是很清楚,这里就不解释了。

2)虚拟主机设置

启动Centos7系统,输入密码登陆后,完成如下设置。

a. 更改用户的权限

打开终端,切换到root账户,编辑/etc/sudoers文件,找到root  ALL=(ALL)    ALL这一行,然后添加一行,比如xhcentos7 ALL=(ALL)    ALL,xhcentos7表示要赋予root权限的用户。

b.设置主机名

打开终端,编辑/etc/sysconfig/network,进行下图设置:


c. 设置ip和主机名映射

    打开终端,编辑/etc/hosts,添加集群中所有主机的ip和主机名映射(每一台虚拟电脑的设置相同),本文配置的三台虚拟主机的ip和主机名设置如下:

  

d. 关闭selinux

     通过vi /etc/selinux/config打开文件编辑,将SELINUX=enforcing修改为SELINUX=disabled, 重启机器可生效。

e. 设置虚拟主机之间相互ssh免口令连接(会遇到莫名奇妙的问题,小心啊)

   (1)切换回当前账户(如果当前是root用户),查看当前账户下是否存在.ssh目录(通过cd ~/.ssh,如果没有,会提示不存在,可通过mkdir创建,也可以不创建,在执行ssh-keygen -t rsa时会自动生成),然后通过ssh-keygen -t rsa为每个主机生成ssh密钥,遇到提示,直接按entor健就可以了。如下图:


       (2)进入.ssh目录,cd ~/.ssh,通过密钥文件生成授权文件:cat id_rsa.pub>>authorized_keys,此时可以通过使用ssh无密码登陆本机了。


  (3)然后,将该虚拟电脑复制2份,我这里是搭建1个master和2个slaver的集群,如果需要可以复制多份。



(4)最后一步啦,将所有test1,test2 节点上的id_rsa.pub通过scp拷贝到test 节点上,在test上,将所有公钥加到用于认证的公钥文件authorized_keys中,将公钥文件authorized_keys分发到test1,test2节点。(只是使用rsync -av 将authority_keys拷贝到其它节点,也可以了,有点懵逼啊,还是要多学习啊!)

       注意:其实上述描述不一定能行,我就遇到了,第一次可以,第二次就不可以了。出现如下问题:

[hadoop@localhost .ssh]$ ssh xhp1
Agent admitted failure to sign using the key.

       【不能成功配置ssh信任,提示Agent admitted failure to sign using the key】

     不知道是什么原因?搜到一个解决方法如下:

         [hadoop@local ~]$ ssh-add ~/.ssh/id_rsa
         Identity added: /home/hadoop/.ssh/id_rsa (/home/hadoop/.ssh/id_rsa) 

     还是不行啊?又搜了一个解决方法如下:

 [hadoop@local ~]$ chmod 600 ~/.ssh/authorized_keys

     解决啦!我是一脸的懵逼啊!

3. 安装并配置JDK

    首先,通过mkdir java在/usr下建立java目录,将jdk1.8.0_91.tar.gz拷贝到/usr/java目录下,执行tar -zxvf jdk1.8.0_91.tar.gz

    配置jdk环境变量,编辑/etc/profile文件,添加java环境变量,如下图所示:

 

每台机器都做一遍,后悔啊!

4. 安装并配置Hadoop2.6.0

4.1 安装配置单机版hadoop

      具体步骤:

      (1)将hadoop-2.6.0.tar.gz拷贝到/usr/local目录下,

      (2)执行tar -zxvf hadoop-2.6.0.tar.gz进行解压,

      (3)通过mv hadoop-2.6.0 hadoop修改目录名,

      (4)并通过chown -R test:test hadoop,修改hadoop目录的所属用户名和组;

      (5)配置hadoop环境变量,修改/etc/profile,见”3安装并配置JDK“图。

    修改etc/hadoop目录下的相关文件,具体配置如下:

      (1)hadoop-env.sh,通过vi hadoop-env.sh做如下修改:

 # The java implementation to use.
                export JAVA_HOME=/usr/java/jdk1.8.0_91

      (2)slaves,通过vi slaves做如下修改:
localhost
    运行测试:
运行自带的example,在hadoop根目录下新建input目录,并将待分析文件放到该目录下,然后执行:

         ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar



4.2 安装配置伪分布式hadoop 

      a. 修改hadoop-env.sh,在里面设置JAVA_HOME。

                # The java implementation to use.
                export JAVA_HOME=/usr/java/jdk1.8.0_91

      b. 修改slaves。

             localhost
      c. 修改core-site.xml,通过vi core-site.xml进行编辑。
     < configuration>
    < property>
        < name>fs.defaultFS</name>
        < value>hdfs://localhost:9000/</value>
    < /property>
    < property>
        < name>hadoop.tmp.dir</name>
          < value>file:/usr/local/hadoop//tmp</value>
< /property>

< /configuration>

       d.  修改hdfs-site.xml,添加如下内容。

                   < configuration>
       < property>
        < name>dfs.namenode.name.dir</name>
        < value>file:/usr/local/hadoop/dfs/name</value>
    < /property>
    < property>
        < name>dfs.datanode.data.dir</name>
        < value>file:/usr/local/hadoop/dfs/data</value>
    < /property>
    <property>
        < name>dfs.replication</name>
        < value>1</value>
    < /property>

< /configuration>

        e.  修改mapred-site.xml,添加如下内容。

< configuration>
       < property>
             < name>mapreduce.framework.name</name>
             < value>yarn</value>
    < /property>

< /configuration>

         f. yarn-site.xml,添加如下内容。

< configuration>
    < property>
        < name>yarn.nodemanager.aux-services</name>
        < value>mapreduce_shuffle</value>
    < /property>
< /configuration>

4.3 安装配置分布式hadoop

设置环境变量,通过vi修改/etc/profile,添加如下内容:

  • export HADOOP_HOME=/usr/local/hadoop
  • export HADOOP_INSTALL=$HADOOP_HOME
  • export HADOOP_MAPRED_HOME=$HADOOP_HOME
  • export HADOOP_COMMON_HOME=$HADOOP_HOME
  • export HADOOP_HDFS_HOME=$HADOOP_HOME
  • export YARN_HOME=$HADOOP_HOME
  • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin   

     a. 修改hadoop-env.sh,在里面设置JAVA_HOME。

                # The java implementation to use.
                export JAVA_HOME=/usr/java/jdk1.8.0_91

      b. 修改slaves。

             test1 注:slave节点的主机名,如果有多台,就填写多行

      c. 修改core-site.xml,通过vi core-site.xml进行编辑。
< configuration>
      < property>
         < name>fs.defaultFS</name>
        < value>hdfs://localhost:9000/</value>
    < /property>
    < property>
         < name>hadoop.tmp.dir</name>
          < value>file:/usr/local/hadoop//tmp</value>
< /property>

< /configuration>

       d.  修改hdfs-site.xml,添加如下内容。

                   < configuration>
       < property>
         < name>dfs.namenode.name.dir</name>
        < value>file:/usr/local/hadoop/dfs/name</value>
     < /property>
     < property>
         < name>dfs.datanode.data.dir</name>
         < value>file:/usr/local/hadoop/dfs/data</value>
     < /property>
     < property>
         < name>dfs.replication</name>
         < value>1</value>
       < property>
         < name>dfs.namenode.name.dir</name>
        < value>file:/usr/local/hadoop/dfs/name</value>
     < /property>
     < property>
         < name>dfs.datanode.data.dir</name>
         < value>file:/usr/local/hadoop/dfs/data</value>
     < /property>
     < property>
         < name>dfs.replication</name>
         < value>1</value>

     < /property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>master:50090</value><--主节点的主机名称及端口号 -->

</property>

< /configuration>

        e.  修改mapred-site.xml,添加如下内容。

< configuration>
       < property>
              < name>mapreduce.framework.name</name>
            < value>yarn</value>
    < /property>

< /configuration>

         f. yarn-site.xml,添加如下内容。

< configuration>
     < property>
         < name>yarn.nodemanager.aux-services</name>
         < value>mapreduce_shuffle</value>
     < /property>

<property>

<name>yarn.resourcemanager.name</name>

</value>master</value><--主节点的主机名-->

</property>
< /configuration>

         g. mapred-site.xml,添加如下内容。

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

</property>

</configuration>


4.4 将配置好的hadoop文件夹分发给test1,注意权限问题。

scp -r hadoop test1:/usr/local/

4.5 启动hadoop

        a. cd到hadoop的bin目录,先格式化namenode。

    hdfs namenode -format

b. cd到hadoop的sbin目录

start-all.sh

c. 用jps命令查看hadoop进程。

在master上应该有:
26786 SecondaryNameNode
27077 ResourceManager
27333 Jps
26454 NameNode
在test1与test2上应该有:
6499 DataNode
6787 NodeManager
7147 Jps
并且,在master节点,浏览器输入 master:8088 能够访问hadoop管理界面,并看到slaves的存在。



5. 安装配置spark

由于spark可能会用到scala,所以需要安装scala,首先将scala,spark解压到/usr/local下,并分别重名为scala2118,spark22,然后配置环境变量,具体如下:

export SCALA_HOME=/usr/local/scala2118
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_HOME=/usr/local/spark22
export PATH=$PATH:$SPARK_HOME/bin

       配置spark,首先编辑spark-env.sh,具体如下:

export SCALA_HOME=/usr/local/scala2118
export JAVA_HOME=/usr/java/jdk1.8.0_91
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_HOST=xhs5m (主节点的主机名,如果是单节点模式,即为当前节点主机名)
#SPARK_DRIVER_MEMORY=512M
export SPARK_WORKER_MEMORY=1G

然后,编辑slaves,添加slave节点的主机名。

比如test1(主节点的主机名,如果是单节点模式,即为当前节点主机名)

启动spark集群和测试是否安装成功

首先启动hdfs,到hadoop安装目录的sbin目录下,通过执行start-dfs.sh来启动

其次,到spark安装目录的sbin目录下,通过执行start-all.sh来启动spark服务

查看是否启动成功,成功启动后,输入jps,会看到如下结果(单机版):

5763 DataNode
6132 SecondaryNameNode
5563 NameNode
6717 Jps
6575 Worker

打开浏览器,输入xhs5:8080会显示如下结果(单机版):


分布式情况下,主节点情况如下:

6816 SecondaryNameNode
6466 NameNode
7476 Jps
7414 Master

从节点:

6816 Worker
6529 DataNode
7339 Jps

打开浏览器,输入xhs5m:8080会显示如下结果:


参考:http://www.powerxing.com/install-hadoop/