【基于OpenEuler国产操作系统大数据实验环境搭建】

一、实验简介

1.1 实验内容

本次实训是基于国产化操作系统openEuler上搭建大数据学习环境,实验主要内容分为两部分:

  1. 环境搭建,具体包括:
    • Hadoop的分布式环境
    • Spark分布式环境
    • Zookeeper分布式环境
    • HBase分布式环境
    • Flume单机环境
    • Hive单机环境
    • Sqoop单机环境
  2. 大数据组件的基本用法

1.2 环境及其资源规划

  1. 所需软件

    软件说明
    VMware workstation 16虚拟机软件
    Hadoop版本为 2.7.4
    HBase版本为 1.4.8
    Spark版本为 2.3.2
    Zookeeper版本为 3.4.5
    Hive版本为 2.3.3
    Flume版本为 1.9.0
    Sqoop版本为 1.4.7
    JDK版本为 1.8+
  2. 拓扑图
    三台虚拟机构建一个全分布式的环境,拓扑图如下:
    在这里插入图片描述

    主从节点上各自运行的进程分布规划:

    节点类型资源规划主要组件名称主要进程名称
    主节点至少4GB内存 2vCPUHadoop、Spark、HBase、Zookeeper、FlumeNameNode、SecondaryNameNode、DataNode、ResourceManager、NodeManager、HMatster、HRegionServer、QuorumPeerMain、Bootstrap、Master、Worker
    从节点至少2GB内存 1vCPUHadoop、Spark、HBase、ZookeeperDataNode、NodeManager、HRegionServer、Worker、QuorumPeerMain

二、实验目的

本次实验的目的是希望学生能够从零开始搭建一套用于学习的大数据环境,包括Hadoop、HBase、Spark等分布式环境。

三、实验过程

3.1 安装虚拟机软件及操作系统

请自行参考如下资料进行操作,确保虚拟机及操作系统正常安装

  • 安装虚拟机VMware或者VirtualBox
    可以参考我另外一篇博客: Linux基础之虚拟机的创建
  • 创建虚拟机和安装操作系统openEuler或者CentOS7
    可以参考我另外一篇博客:在VMware上虚拟机上安装CentOS-7操作系统
    这里选择安装openEuler,具体步骤如下
    1. 创建虚拟机
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. 安装操作系统
      在这里插入图片描述
      在这里插入图片描述
      然后确定。最后,启动虚拟机,进行操作系统的安装。
      在这里插入图片描述
      启动后,选择如下选项,选择好后,回车:
      在这里插入图片描述
      之后,等待一小会儿,就会出现如下界面,保持默认,点击continue按钮:
      在这里插入图片描述
      然后进入下一个界面,如下图所示,其中红色框框起来的部分是需要进行修配置的:
      在这里插入图片描述
      安装上图顺序,先从序号为1的地方开始,点击Installation Destination,进入配置页面,如下图所示,只需要点击Done按钮即可:
      在这里插入图片描述
      然后点击序号为2的部分,进入配置页面,如下图所示:
      在这里插入图片描述
      然后点击序号为3的部分,进入配置页面,如下图所示:
      在这里插入图片描述
      然后点击序号为4的部分,进入配置页面,如下图所示:
      在这里插入图片描述
      上述4个地方都配置后,就可以点击Begin Installation按钮了,如下图所示:
      在这里插入图片描述
      接下来就是比较漫长的等待过程了,这个过程估计5-15分钟左右不等。
      在这里插入图片描述
      当安装结束后,点击Reboot System按钮重启下系统:
      在这里插入图片描述
      系统如正常启动,就会显示登录的交互式界面,然后你输入root以及对应的密码即可正常进入到系统中了。
      在这里插入图片描述
      到此,openEuler22.03版本的操作系统已经被正常的安装。

    3. 克隆出另外两台虚拟机
      我们需要三台虚拟机,另外两台虚拟机就可以利用VMWare Workstation软件的克隆功能,以之前新建好的虚拟机作为克隆的对象即可。具体操作如下:

      1. 先将新建好的虚拟机关机,然后再进行克隆
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
      2. 重复上述操作,然后再次克隆出s3虚拟机出来。
      3. 修改新克隆出来的虚拟机s2和s3的内存大小和CPU核心数
        在这里插入图片描述
        在这里插入图片描述
  1. 将三台虚拟机按顺序启动,设置静态IP地址
    • 登录s1虚拟机中,设置静态IP地址:
      进入网卡配置文件所在目录:
      cd /etc/sysconfig/network-scripts/
      
      编辑网卡配置文件:
      vim ifcfg-ens33
      
      按照如下图所示,进行设置:
      在这里插入图片描述
      为方便将上图所示内容进行复制后修改,提供如下内容作为参考,大家根据自己虚拟机实际IP地址进行修改即可:
      BOOTPROTO=static
      IPADDR=192.168.85.142
      NETMASK=255.255.255.0
      GATEWAY=192.168.85.2
      DNS1=192.168.85.2
      DNS2=114.114.114.114
      
      最后,重启网卡:
      重启命令为:
      ifdown ens33 # 停止,ens33是网卡名称
      ifup ens33 # 启动
      
      效果如下:在这里插入图片描述
    • 登录s2和s3,按照上述相同的操作设置:
      • 将s2的IP地址设置成: 192.168.85.143
      • 将s3的IP地址设置成: 192.168.85.144

3.2 创建安装目录(在主节点上操作)

  • 连接虚拟机:使用MobaXterm工具连接到刚刚创建的好的虚拟机
    在这里插入图片描述
    在这里插入图片描述
    输入密码,当输入密码时界面上没有任何反应上正常的,只要输入正确后,按回车即可正常登录系统中了:
    在这里插入图片描述
    后续实验涉及到利用该工具连接虚拟机,可按照这个方法登录即可。

  • 创建必要的目录:在所有主机上的根目录/下创建tools和mysoft两个目录

    mkdir  /tools
    mkdir /mysoft
    

    执行成功如下:
    在这里插入图片描述

  • 上传安装包:利用MobXtrem工具上传jdk、hadoop等安装包到/tools目录下
    在这里插入图片描述
    在这里插入图片描述
    上传成功后,会在这里看到:
    在这里插入图片描述
    后续实验涉及到的其他的安装包按照这种方式自行上传即可。

3.2 安装JDK及基本设置(所有节点都需要操作)


  1. 设置虚拟机主机名
    先登录s2虚拟机,然后执行如下命令:

     # 设置s2的主机名称
      hostnamectl --static set-hostname s2
      exit
    

    在这里插入图片描述
    再登录s3虚拟机,然后执行如下命令:

        # 设置s3的主机名称
       hostnamectl --static set-hostname s3
       exit
    

    在这里插入图片描述

  2. JDK的安装

    • 分别登录s1、s2、s3三台虚拟机,然后在各自的节点上执行如下操作这里我以s1节点为例子进行说明,其他两个节点执行相同操作即可。
    • 进入tools目录,然后执行下面的命令进行解压安装
       cd /tools
       tar -zvxf jdk-8u171-linux-x64.tar.gz  -C /mysoft/
      
    • 配置环境变量,执行:
      vim ~/.bash_profile
      
      在.bash_profile文件中添加如下信息:
      export JAVA_HOME=/mysoft/jdk1.8.0_171
      export JRE_HOME=$JAVA_HOME/jre
      export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
      export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin;
      
    • 让环境变量生效
      source  ~/.bash_profile
      
    • 验证jdk是否安装成功
      java -version
      
      结果如下:
      [root@s1 tools]# java -version
      java version "1.8.0_171"
      Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
      [root@s1 tools]#
      
      其他s2和s3需要执行上述相同的操作。
  3. 虚拟机中配置主机名与ip地址的映射关系

    • 所有主机都需要配置主机名映射关系,编辑hosts文件,执行:
      vim /etc/hosts
      
      在文件末尾添加如下内容,注意IP地址改成你自己环境的IP地址:
      192.168.85.142 s1
      192.168.85.143 s2
      192.168.85.144 s3
      
      效果如下:
      在这里插入图片描述
  4. 关闭防火墙

    • 所有主机都需要关闭防火墙,每台节点都需要执行命令:

      systemctl stop firewalld.service
      systemctl disable firewalld.service
      

      效果如下所示:
      在这里插入图片描述

  5. 配置免密码登录

    • 所有主机都需要生成密钥对并将公钥分发给其他节点,每台节点都需要执行命令:
      生成密钥对:

      cd /root
      ssh-keygen -t rsa  # 执行命令后,只需敲三次回车键
      

      效果如下:
      在这里插入图片描述

      三台虚拟机上都需要执行如下命令:在执行命令时需要先输入yes,然后输入对于节点的密码:

      ssh-copy-id -i .ssh/id_rsa.pub root@s1
      ssh-copy-id -i .ssh/id_rsa.pub root@s2
      ssh-copy-id -i .ssh/id_rsa.pub root@s3
      

      s1虚拟机上执行的效果如下(s2和s3上也需要执行相同的命令):
      在这里插入图片描述
      在这里插入图片描述
      当三台虚拟机都执行完成后,可以验证一下是否可以从s1通过ssh协议登录到s2,执行如下命令:

      ssh s2
      

      如能正常登录的话,会如下图所示:
      在这里插入图片描述

3.3 安装Hadoop


以下操作只需在主节点s1上执行如下操作,如有特殊说明的请注意按照要求进行执行。

  • 上传hadoop-2.7.4.tar.gz到/tools目录下
    执行下面的命令进行解压安装

    tar -zvxf /tools/hadoop-2.7.4.tar.gz -C /mysoft/
    mv /mysoft/hadoop-2.7.4  /mysoft/hadoop
    
  • 配置环境变量:

    vim ~/.bash_profile
    

    添加如下信息:

    export HADOOP_HOME=/mysoft/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
  • 让环境变量生效:

    source ~/.bash_profile
    
  • 验证是否生效:
    执行:hdfs version
    效果如下:

    [root@s1 tools]# hdfs version
    Hadoop 2.7.4
    Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r cd915e1e8d9d0131462a0b7301586c175728a282
    Compiled by kshvachk on 2017-08-01T00:29Z
    Compiled with protoc 2.5.0
    From source with checksum 50b0468318b4ce9bd24dc467b7ce1148
    This command was run using /mysoft/hadoop/share/hadoop/common/hadoop-common-2.7.4.jar
    [root@s1 tools]#
    
    
  • 新建tmp目录:
    进入到hadoop安装目录下,执行:

    mkdir /mysoft/hadoop/tmp
    
  • 配置Hadoop配置文件

    只需对五个配置文件进行配置即可:

     hadoop-env.sh
     hdfs-site.xml
     core-site.xml
     mapred-site.xml
     yarn-site.xml
    

    配置文件所在目录:
    /mysoft/hadoop/etc/hadoop

  • 配置 hadoop-env.sh文件
    编辑该文件,执行:

    vim /mysoft/hadoop/etc/hadoop/hadoop-env.sh
    

    找到JAVA_HOME所在地方,将${JAVA_HOME}改成/mysoft/jdk1.8.0_171:

    export JAVA_HOME=/mysoft/jdk1.8.0_171
    
  • 配置 hdfs-site.xml
    编辑该文件,执行:

    vim /mysoft/hadoop/etc/hadoop/hdfs-site.xml
    

    <configuration></configuration>之间添加

    <property>
         <name>dfs.replication</name>
         <value>3</value>
     </property>
     <property>
         <name>dfs.permissions</name>
         <value>false</value>
     </property>
    

    效果如下:
    在这里插入图片描述

  • 配置 core-site.xml
    编辑该文件,执行:

    vim /mysoft/hadoop/etc/hadoop/core-site.xml
    

    <configuration></configuration>之间添加

    <property>
         <name>fs.defaultFS</name>
         <value>hdfs://s1:9000</value>
     </property>              
     <property>
         <name>hadoop.tmp.dir</name>
         <value>/mysoft/hadoop/tmp</value>
     </property>
    

    效果如下:
    在这里插入图片描述

  • 配置 mapred-site.xml
    编辑该文件,执行:

    cp /mysoft/hadoop/etc/hadoop/mapred-site.xml.template /mysoft/hadoop/etc/hadoop/mapred-site.xml
    vim /mysoft/hadoop/etc/hadoop/mapred-site.xml
    

    <configuration></configuration>之间添加

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
    <property>
            <name>mapreduce.jobhistory.address</name>
            <value>s1:10020</value>
    </property>
    <!-- 历史服务器 web 端地址 -->
    <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>s1:19888</value>
    </property>
    
  • 配置 yarn-site.xml
    编辑该文件,执行:

    vim /mysoft/hadoop/etc/hadoop/yarn-site.xml
    

    <configuration></configuration>之间添加

    <!-- Site specific YARN configuration properties -->
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>s1</value>
    </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    <!-- 设置内存 -->
    <property>
       <name>yarn.nodemanager.resource.memory-mb</name>
       <value>1600</value>
    </property>
    <!-- 设置cpu 核数 -->
    <property>
       <name>yarn.nodemanager.resource.cpu-vcores</name>
       <value>1</value>
    </property>
    <!-- 日志聚集功能使能 -->
    <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
    </property>
    <!-- 日志保留时间设置7天 -->
    <property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>604800</value>
    </property>
    <!--配置Log Server -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://s1:19888/jobhistory/logs</value>
    </property>
    
  • 修改slaves文件,将原来的内容删除掉,然后添加如下内容:
    编辑该文件,执行:

    vim /mysoft/hadoop/etc/hadoop/slaves
    

    添加如下内容:

    s1
    s2
    s3
    
  • 格式化:HDFS
    执行命令:

    hdfs namenode -format
    

    如格式化成功,在打印出来的日志可以看到如下信息:

    ……
    Storage directory /mysoft/hadoop/tmp/dfs/name has been successfully formatted.
    ……
    

    在这里插入图片描述

  • 分发到从节点
    将上述配置好后的环境即hadoop整个目录分别远程复制到其他两台从节点上(s2,s3)上,在s1节点上执行如下命令:

     scp -r /mysoft/hadoop/ root@s2:/mysoft/
     scp -r /mysoft/hadoop/ root@s3:/mysoft/
    
  • 分别在s2和s3两个节点上配置hadoop环境变量:

    vim ~/.bash_profile
    

    添加如下信息:

    export HADOOP_HOME=/mysoft/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    让环境变量生效:

    source ~/.bash_profile
    
  • 在主节点(s1)上启动Hadoop集群
    启动hadoop集群服务 :

    start-all.sh  
    

    效果如下:
    在这里插入图片描述

  • 验证:
    首先在 web界面进行验证,浏览器分别访问如下地址:
    访问HDFS: http://IP(s1的IP地址):50070,正常会看到如下界面
    在这里插入图片描述

    访问Yarn: http://IP(s1的IP地址):8088,正常会看到如下界面
    在这里插入图片描述

    然后,在主机点s1上执行jps命令,正常情况下会有如下进程:

    NameNode
    DataNode
    SecondaryNameNode
    ReourceManager
    NodeManager
    

    最后,在两台从节点(s2和s3)上执行jps命令,正常情况下会有如下进程:

    DataNode
    NodeManager
    

    如需要关闭hadoop集群,在s1主节点上执行:

    stop-all.sh
    

    至此,Hadoop全分布式环境已经全部搭建完成,大家试试看吧!

3.4 安装Zookeeper


以下操作只需要在s1主节点上进行操作,有特别说明的除外

  1. 上传zookeeper-3.4.5.tar.gz到/tools目录下

  2. 解压安装

    cd /tools
    tar -zvxf zookeeper-3.4.5.tar.gz -C /mysoft/
    mv /mysoft/zookeeper-3.4.5 /mysoft/zookeeper
    
  3. 配置环境变量(所有节点都需要配置)
    编辑~/.bash_profile文件:

    vim ~/.bash_profile
    

    在文件尾部添加如下内容:

    export ZK_HOME=/mysoft/zookeeper
    export PATH=$PATH:$ZK_HOME/bin
    
  4. 创建临时目录tmp和myid文件
    在zookeeper安装路径下创建tmp目录,用于存储临时文件:

    mkdir /mysoft/zookeeper/tmp
    

    在/mysoft/zookeeper/tmp目录下创建一个myid的空文件:

    echo 1 > /mysoft/zookeeper/tmp/myid
    
  5. 配置zoo.cfg文件
    该文件并不存在,需要从模板文件复制:

    cp /mysoft/zookeeper/conf/zoo_sample.cfg /mysoft/zookeeper/conf/zoo.cfg
    

    编辑zoo.cfg:

    vim /mysoft/zookeeper/conf/zoo.cfg
    

    然后将zoo.cfg内容中的dataDir的值改成/mysoft/zookeeper/tmp

    dataDir=/mysoft/zookeeper/tmp
    

    在zoo.cfg的末尾,再添加如下内容:

    server.1=s1:2888:3888
    server.2=s2:2888:3888
    server.3=s3:2888:3888
    

    效果如下:
    在这里插入图片描述

  6. 分发安装包
    将配置好的zookeeper拷贝到s2和s3两个节点上:

    scp -r /mysoft/zookeeper/ s2:/mysoft/
    scp -r /mysoft/zookeeper/ s3:/mysoft/
    
  7. 修改s2节点上的myid
    登录s2节点上,修改myid内容为2:

    echo 2 > /mysoft/zookeeper/tmp/myid
    
  8. 修改s3节点上的myid
    登录s3节点上,修改myid内容为3:

    echo 3 > /mysoft/zookeeper/tmp/myid
    
  9. 让所有节点环境变量生效
    所有节点上都需要执行让环境变量生效的命令:

    source ~/.bash_profile
    
  10. 在所有节点上启动zookeeper
    所有节点上都需要执行启动命令,执行:

    zkServer.sh start
    

    效果如下图所示:
    在这里插入图片描述

  11. 在所有节点上检查zookeeper启动状态
    所有节点上都需要执行启动命令,执行:

    zkServer.sh status
    

    效果如下:
    在这里插入图片描述

  12. 如果需要停止zookeeper集群,则需在所有节点上执行:

    zkServer.sh stop
    

3.5 安装HBase


以下没有特殊说明的情况下,在s1主节点上进行配置,有特殊说明按照说明进行:

  1. 上传hbase-1.4.8-bin.tar.gz到/tools目录下

  2. 解压安装

    cd /tools
    tar -zvxf hbase-1.4.8-bin.tar.gz -C /mysoft/
    mv /mysoft/hbase-1.4.8 /mysoft/hbase
    
  3. 配置环境变量三台节点都需要配置
    编辑:

    vim ~/.bash_profile
    

    添加如下内容:

    export HBASE_HOME=/mysoft/hbase
    export PATH=$HBASE_HOME/bin:$PATH
    
  4. 修改配置文件

    • 修改hbase-env.sh配置文件:

      vim /mysoft/hbase/conf/hbase-env.sh
      

      找到# export JAVA_HOME=/usr/java/jdk1.6.0/这句代码,将#号去掉,将/usr/java/jdk1.6.0改成你自己的JAVA_HOME路径。修改好之后的样子为:export JAVA_HOME=/mysoft/jdk1.8.0_171
      找到# export HBASE_MANAGES_ZK=true, 将#号去掉,然后将true改成false
      按照下图所示,用#号注释掉如下两行代码即可:
      在这里插入图片描述

    • 修改hbase-site.xml配置文件:
      编辑:

       vim /mysoft/hbase/conf/hbase-site.xml
      

      <configuration></configuration>之间添加配置内容:

       <!--HBase的数据保存在HDFS对应目录,hadoop是全分布式-->
       <property>
         <name>hbase.rootdir</name>
         <value>hdfs://s1:9000/hbase</value>
       </property>    
       <!--是否是分布式环境-->
       <property>
         <name>hbase.cluster.distributed</name>
         <value>true</value>
       </property>            
       <!--配置ZK的地址-->
       <property>
         <name>hbase.zookeeper.quorum</name>
         <value>s1,s2,s3</value>
       </property>                
       <!--冗余度-->
       <property>
         <name>dfs.replication</name>
         <value>3</value>
       </property>    
       <!--主节点和从节点允许的最大时间误差-->
       <property>
         <name>hbase.master.maxclockskew</name>
         <value>180000</value>
       </property>    
      
    • 修改regionservers配置文件:
      编辑:

       vim /mysoft/hbase/conf/regionservers
      

      将localhost删除掉,再添加如下内容:

      s1
      s2
      s3
      
  5. 分发HBase安装目录
    /mysoft/hbase整个目录复制到其他两个从节点上:

    scp -r /mysoft/hbase/ root@s2:/mysoft/
    scp -r /mysoft/hbase/ root@s3:/mysoft/
    
  6. 让所有节点环境变量生效
    所有节点上都需要执行让环境变量生效的命令:

    source ~/.bash_profile
    
  7. 启动HBase

    特别注意启动HBase之前,必须确保hadoop集群、zookeeper集群已经事先启动了。如没有启动hadoop和zookeeper,需要先启动这两个组件。否则,HBase将启动失败。

    s1主节点上启动HBase:

    start-hbase.sh
    
  8. 检查HBase的启动状态

    • 使用jps命令查看,是否已经启动了如下进程,如果进程存在,则说明安装配置hbase成功了:
      从节点:HRegionServer
      主节点:HMaster
    • 登录http://IP(s1的IP):16010地址查看HBase的Web页面是否正常打开:
      在这里插入图片描述

3.6 安装Spark


以下没有特殊说明的情况下,在s1主节点上进行配置,有特殊说明按照说明进行:

  1. 上传spark-2.3.2-bin-hadoop2.7.tgz到/tools目录下

  2. 解压安装

    cd /tools
    tar -zvxf spark-2.3.2-bin-hadoop2.7.tgz -C /mysoft/
    mv /mysoft/spark-2.3.2-bin-hadoop2.7 /mysoft/spark
    
  3. 修改配置文件

    • 修改spark-env.sh
      编辑:
      mkdir /mysoft/spark/history
      cp  /mysoft/spark/conf/spark-env.sh.template /mysoft/spark/conf/spark-env.sh
      vim /mysoft/spark/conf/spark-env.sh
      
      修改如下内容:
      export JAVA_HOME=/mysoft/jdk1.8.0_171
      export SPARK_MASTER_HOST=s1
      export SPARK_MASTER_PORT=7077
      #history 配置历史服务
      export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=file:///mysoft/spark/history"
      
    • 修改slaves
      编辑:
      cp  /mysoft/spark/conf/slaves.template /mysoft/spark/conf/slaves
      vim /mysoft/spark/conf/slaves
      
      将localhost先删除,然后添加如下内容:
      s1
      s2
      s3
      
    • 修改spark-defaults.conf
      编辑:
      mkdir /mysoft/spark/logs
      cp /mysoft/spark/conf/spark-defaults.conf.template /mysoft/spark/conf/spark-defaults.conf
      vim /mysoft/spark/conf/spark-defaults.conf
      
      在末尾添加如下内容:
      spark.eventLog.enabled           true
      spark.eventLog.dir               /mysoft/spark/logs
      
  4. 分发spark目录
    /mysoft/spark整个目录复制到其他两个从节点上:

    scp -r /mysoft/spark/ root@s2:/mysoft/
    scp -r /mysoft/spark/ root@s3:/mysoft/
    
  5. 启动Spark集群
    s1主节点,执行启动命令:

    /mysoft/spark/sbin/start-all.sh
    

    效果如下:
    在这里插入图片描述

  6. 检查Spark集群状态

    • 执行jps命令,验证进程:
      在这里插入图片描述

    • 访问SparkUI界面:http://IP(s1的IP):8080
      在这里插入图片描述

3.7 安装Hive


Hive默认的元数据存储是Derby,在测试时使用。由于生成环境中需要使用其他的存储系统替换Derby数据库,以支持高并发场景。故,这里我们需要安装MySQL来作为Hive元数据存储系统。接下来,需先安装MySQL,然后再安装hive。以下操作是在s1主节点上操作

  1. 安装MySQL(这里安装MySQL5.7)

    • 以root用户执行如下命令,使用yum来简单安装MySQL5.7+:
      # 用yum查询目前操作系统下yum仓库中支持的MySQL版本,目前该仓库只支持MySQL5
      yum search mysql
      # 利用yum来安装MySQL5
      yum install mysql5-server.x86_64 -y
      
      注意:安装成功后,root用户密码默认为空
      启动MySQL服务:
      systemctl start mysqld
      
      启动成功后,查看下MySQL的运行状态,如下图所示:
      在这里插入图片描述
    • 修改root默认密码为123456,并授权允许root用户远程访问,执行如下命令:
      [root@s1 ~]# mysql -uroot -p
      Enter password: # 这里执行回车即可
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 4
      Server version: 5.7.21 MySQL Community Server (GPL)
      
      Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
      mysql> alter user 'root'@'localhost' identified by '123456';   # 修改MySQL密码为123456
      Query OK, 0 rows affected (0.00 sec)
      mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;   # 修改允许root用户远程登录MySQL
      Query OK, 0 rows affected, 1 warning (0.00 sec)
      mysql> exit;
      Bye
      
      效果如下图所示:
      在这里插入图片描述
    • 创建用于存储hive元数据的数据库
      重新登录MySQL:
      mysql -uroot -p123456
      
      创建名为hive的database:
      CREATE DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
      效果如下:
      在这里插入图片描述
  2. 安装Hive

    • 上传apache-hive-2.3.3-bin.tar.gz到/tools目录下

    • 解压安装

      cd /tools
      tar -zvxf apache-hive-2.3.3-bin.tar.gz -C /mysoft/
      mv /mysoft/apache-hive-2.3.3-bin /mysoft/hive
      
    • 配置环境变量
      编辑:

      vim ~/.bash_profile
      

      添加如下内容:

      export HIVE_HOME=/mysoft/hive
      export PATH=$HIVE_HOME/bin:$PATH
      

      让环境变量生效:

      source ~/.bash_profile
      
    • 新增hive-site.xml配置文件
      编辑:

      vim /mysoft/hive/conf/hive-site.xml
      

      添加如下内容:

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
       <configuration>
        <property>
        	<name>javax.jdo.option.ConnectionURL</name>
        	<value>jdbc:mysql://s1:3306/hive?useSSL=false</value>
        </property>
        
        <property>
        	<name>javax.jdo.option.ConnectionDriverName</name>
        	<value>com.mysql.jdbc.Driver</value>
        </property>
        
        <property>
        	<name>javax.jdo.option.ConnectionUserName</name>
        	<value>root</value>
        </property>
        
        <property>
        	<name>javax.jdo.option.ConnectionPassword</name>
        	<value>123456</value>
        </property>
       </configuration>
      
    • 上传MySQL驱动到hive安装路径下的/lib目录下
      注意一定要使用高版本的MySQL驱动(5.1.43以上的版本)
      在这里插入图片描述

    • 初始化MySQL
      以root用户执行如下命令:

      schematool -dbType mysql -initSchema
      

      效果如下:
      在这里插入图片描述

    • 验证Hive是否可用

      • 需保证hadoop集群处于正常运行状态,可参考hadoop实验
      • 需保证MySQL是处于正常运行状态
      • hadoop正常和MySQL正常运行状态下,进行如下测试
        在s1主节点上,执行如下命令:
        hive  # 回车即可
        
        正常情况下,如下图所示:
        在这里插入图片描述
    • 启动hiveserver2服务(可选做)
      该服务用于支持其他程序连接到Hive中,且可以使用beeline进行操作,便于写SQL。
      以后台方式启动,执行:

      hive --service hiveserver2 &
      

      效果如下:
      在这里插入图片描述
      使用beeline命令登录hive的验证:

      beeline -u jdbc:hive2://s1:10000 -n root
      

      如果报错:

      beeline> !connect jdbc:hive2://s1:10000
        Connecting to jdbc:hive2://s1:10000
        Enter username for jdbc:hive2://s1:10000: root
        Enter password for jdbc:hive2://s1:10000: ******
        24/12/10 16:48:56 [main]: WARN jdbc.HiveConnection: Failed to connect to s1:10000
        Error: Could not open client transport with JDBC Uri: jdbc:hive2://s1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)
        beeline>
      

      则需要配置hadoop安装目录下/mysoft/hadoop/etc/hadoop/core-site.xml,加入如下配置:

      <property>
         <name>hadoop.proxyuser.root.hosts</name>
         <value>*</value>
      </property>
      <property>
         <name>hadoop.proxyuser.root.groups</name>
         <value>*</value>
      </property>
      

      还需要修改/mysoft/hadoop/etc/hadoop/hdfs-site.xml,添加如下:

      <property>
      	<name>dfs.webhdfs.enabled</name>
      	<value>true</value>
      </property>
      

      重启hadoop集群与hive的hiveserver2服务,再重新使用beeline连接:
      先停止:
      在这里插入图片描述
      再次启动hadoop和hiveserver2:

      start-all.sh
      hive --service hiveserver2 &
      

      效果如下:
      在这里插入图片描述
      此时,再次使用beeline重新登录,正常登录的效果如下
      在这里插入图片描述
      在这里插入图片描述

3.8 安装Flume


以下操作均在s1主节点上进行操作:

  1. 上传apache-flume-1.9.0-bin.tar.gz到/tools目录下

  2. 解压安装

    cd /tools
    tar -zvxf apache-flume-1.9.0-bin.tar.gz -C /mysoft/
    mv /mysoft/apache-flume-1.9.0-bin /mysoft/flume
    
  3. 配置环境变量
    编辑:

    vim ~/.bash_profile
    

    添加如下内容:

    export FLUME_HOME=/mysoft/flume
    export PATH=$PATH:$FLUME_HOME/bin
    

    让环境变量生效:

    source ~/.bash_profile
    
  4. 验证Flume环境是否正常

     flume-ng version
    

    正常情况下,会打印如下内容:

    [root@s1 mysoft]#  flume-ng version
    Flume 1.9.0
    Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
    Revision: d4fcab4f501d41597bc616921329a4339f73585e
    Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
    From source with checksum 35db629a3bda49d23e9b3690c80737f9
    [root@s1 mysoft]#
    
  5. 入门小案例测试Flume功能正常与否
    本案例是通过在s1节点上安装NetCat工具(简称nc),然后由nc发送数据,最后由部署在s1节点中的flume接收数据。具体步骤如下:

    • s1节点上安装nc

      yum install nc -y
      
    • s1节点上创建flume配置文件
      新建配置文件:nc-to-flume.conf

      vim /mysoft/flume/conf/nc-to-flume.conf
      

      添加如下内容:

      #声明Agent三种组件
      a1.sources = r1
      a1.channels = c1
      a1.sinks = k1
      
      #定义source信息
      a1.sources.r1.type=netcat
      a1.sources.r1.bind=s1
      a1.sources.r1.port=8888
      
      #定义sink信息
      a1.sinks.k1.type=logger
      
      #定义channel信息
      a1.channels.c1.type=memory
      
      #绑定在一起
      a1.sources.r1.channels=c1
      a1.sinks.k1.channel=c1
      
    • s1节点上启动flume

      flume-ng agent -f /mysoft/flume/conf/nc-to-flume.conf -n a1 -Dflume.root.logger=INFO,console
      

      启动成功后,当前会话会处于类似卡死的状态,这是因为当前flume是以前台方式启动,属于正常现象,启动效果如下图所示:
      在这里插入图片描述

    • 重新打开一个SSH会话连接到s1节点,然后在s1节点上启动nc客户端,发送数据:

      nc s1 8888
      

      并输入数据,如hello world
      此时观察另外flume启动的窗口是否能接收到数据,正常如下图所示:
      在这里插入图片描述
      到此,flume采集nc的数据实验到此结束,大家可以自行测试。

  6. 入门案例2:监听日志目录,将其采集到HDFS上

    1. 将hadoop-2.7.4安装路径下的依赖的jar导入到/apache-flume-1.9.0-bin/lib下:

      share/hadoop/common/hadoop-common-2.7.4.jar
      share/hadoop/common/lib/commons-configuration-1.6.jar
      share/hadoop/common/lib/hadoop-auth-2.7.4.jar
      share/hadoop/hdfs/hadoop-hdfs-2.7.4.jar
      share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar
      share/hadoop/common/lib/commons-io-2.4.jar
      

      可以执行如下命令:

      cp /training/hadoop-2.7.4/share/hadoop/common/hadoop-common-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/
      cp /training/hadoop-2.7.4/share/hadoop/common/lib/commons-configuration-1.6.jar /training/apache-flume-1.9.0-bin/lib/
      cp /training/hadoop-2.7.4/share/hadoop/common/lib/hadoop-auth-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/
      cp /training/hadoop-2.7.4/share/hadoop/hdfs/hadoop-hdfs-2.7.4.jar /training/apache-flume-1.9.0-bin/lib/
      cp /training/hadoop-2.7.4/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar /training/apache-flume-1.9.0-bin/lib/
      cp /training/hadoop-2.7.4/share/hadoop/common/lib/commons-io-2.4.jar /training/apache-flume-1.9.0-bin/lib/
      
    2. 配置Flume HDFS Sink:
      在/training/apache-flume-1.9.0-bin/conf/新建一个flume-hdfs.conf
      添加如下内容:

      # define the agent
      a1.sources=r1
      a1.channels=c1
      a1.sinks=k1
      
      # define the source
      #上传目录类型
      a1.sources.r1.type=spooldir
      a1.sources.r1.spoolDir=/training/nginx/logs/flumeLogs
      #定义自滚动日志完成后的后缀名
      a1.sources.r1.fileSuffix=.FINISHED
      #根据每行文本内容的大小自定义最大长度4096=4k
      a1.sources.r1.deserializer.maxLineLength=4096
      
      # define the sink
      a1.sinks.k1.type = hdfs
      #上传的文件保存在hdfs的/flumeLogs目录下
      a1.sinks.k1.hdfs.path = hdfs://bigdata:9000/flumeLogs/%y-%m-%d/%H/%M/%S
      a1.sinks.k1.hdfs.filePrefix=access_log
      a1.sinks.k1.hdfs.fileSufix=.log
      a1.sinks.k1.hdfs.batchSize=1000
      a1.sinks.k1.hdfs.fileType = DataStream
      a1.sinks.k1.hdfs.writeFormat= Text 
      # roll 滚动规则:按照数据块128M大小来控制文件的写入,与滚动相关其他的都设置成0
      #为了演示,这里设置成500k写入一次
      a1.sinks.k1.hdfs.rollSize= 512000
      a1.sinks.k1.hdfs.rollCount=0
      a1.sinks.k1.hdfs.rollInteval=0
      #控制生成目录的规则:一般是一天或者一周或者一个月一次,这里为了演示设置10秒 
      a1.sinks.k1.hdfs.round=true
      a1.sinks.k1.hdfs.roundValue=10
      a1.sinks.k1.hdfs.roundUnit= second    
      #是否使用本地时间
      a1.sinks.k1.hdfs.useLocalTimeStamp=true   
      
      #define the channel
      a1.channels.c1.type = memory
      #自定义event的条数
      a1.channels.c1.capacity = 500000
      #flume事务控制所需要的缓存容量1000条event
      a1.channels.c1.transactionCapacity = 1000
      
      #source channel sink cooperation
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1
      

      注意:- 需要先在/training/nginx/logs/创建flumeLogs
      - 需要在hdfs的根目录/下创建flumeLogs

    3. 修改conf/flume-env.sh(该文件事先是不存在的,需要复制一份)
      复制:

      cp flume-env.template.sh flume-env.sh
      

      编辑文件,并设置如下内容:

      #设置JAVA_HOME:
      export JAVA_HOME = /training/jdk1.8.0_171          
      #修改默认的内存:  
      export JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256k -Xmn2g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"   
      
    4. 启动flume

    • 测试数据:把 /training/nginx/logs/access.log 复制到
      /training/nginx/logs/flumeLogs/access_201904251200.log
    • 启动
      在/training/apache-flume-1.9.0-bin目录下,执行如下命令进行启动:
      bin/flume-ng agent --conf ./conf/ -f ./conf/flume-hdfs.conf --name a1 -Dflume.root.logger=INFO,console
      
    • 到Hadoop的控制台http://bigdata:50070/flumeLogs 查看有没有数据
    1. 编写Linux脚本rollingLog.sh,实现/training/nginx/logs/access.log日志的自动滚动到flumeLogs目录下
    • 在~目录下新建rollingLog.sh,并添加如下内容:
      	#!/bin/bash
      	#定义日期格式
      	dataformat=`date +%Y-%m-%d-%H-%M-%S`
      	
      	#复制access.log并重命名
      	cp /training/nginx/logs/access.log /training/nginx/logs/access_$dataformat.log
      	
      	host=`hostname`
      	sed -i 's/^/'${host}',&/g' /training/nginx/logs/access_$dataformat.log
      	#统计日志文件行数
      	lines=`wc -l < /training/nginx/logs/access_$dataformat.log`
      	
      	#将格式化的日志移动到flumeLogs目录下
      	mv /training/nginx/logs/access_$dataformat.log /training/nginx/logs/flumeLogs
      	
      	#清空access.log的内容
      	sed -i '1,'${lines}'d' /training/nginx/logs/access.log
      	
      	#重启nginx , 否则 log can not roll.
      	kill -USR1 `cat /training/nginx/logs/nginx.pid`
      	
      	##返回给服务器信息
      	ls -al /training/nginx/logs/flumeLogs/
      
    1. 编写启动Flume脚本 flume_start.sh,启动Flume
      #!/bin/bash
      /training/apache-flume-1.9.0-bin/bin/flume-ng agent -c /training/apache-flume-1.9.0-bin/conf/ -f /training/apache-flume-1.9.0-bin/conf/flume-hdfs.conf -n a1 -Dflume.root.logger=INFO,console &
      
    2. 编写停止Flume脚本 flume_stop.sh,停止Flume
      #!/bin/bash
      
      JAR="flume"
      
      #停止flume函数
      echo "begin stop flume process.."
      num=`ps -ef|grep java|grep $JAR|wc -l`
      echo "当前已经启动的flume进程数:$num"
      if [ "$num" != "0" ];then
      #正常停止flume
      ps -ef|grep java|grep $JAR|awk '{print $2;}'|xargs kill
      echo "进程已经关闭..."
      else
      echo "服务未启动,无须停止..."
      fi
      
    3. 编写重启Flume脚本 flume_to_hdfs.sh,综合了前两个脚本
      #!/bin/bash
      
      #先停止正在启动的flume
      ./flume_stop.sh
      
      #用法:nohup ./start-dishi.sh >output 2>&1 &
      nohup ./flume_start.sh > nohup_output.log 2>&1 &
      echo "启动flume成功……"
      
      

3.9 安装Sqoop


以下操作在s1节点上进行:

  1. 上传sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz到/tools目录下

  2. 解压安装

    cd /tools
    tar -zvxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /mysoft/
    mv /mysoft/sqoop-1.4.7.bin__hadoop-2.6.0 /mysoft/sqoop
    
  3. 配置环境变量
    编辑:

    vim ~/.bash_profile
    

    添加如下内容:

    # sqoop
    export SQOOP_HOME=/mysoft/sqoop
    export PATH=$PATH:$SQOOP_HOME/bin
    

    让环境变量生效:

    source ~/.bash_profile
    
  4. 修改配置文件

    • 配置【sqoop-site.xml】
      echo "" >  /mysoft/sqoop/conf/sqoop-site.xml
      vim /mysoft/sqoop/conf/sqoop-site.xml
      
      添加如下内容:
      <?xml version="1.0"?>
        <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
        <configuration>
        
          <property>
            <name>sqoop.metastore.client.enable.autoconnect</name>
            <value>true</value>
            <description>If true, Sqoop will connect to a local metastore
              for job management when no other metastore arguments are
              provided.
            </description>
          </property>
          
          <property>
            <name>sqoop.metastore.client.autoconnect.url</name>
            <value>jdbc:hsqldb:file:/tmp/sqoop-meta/meta.db;shutdown=true</value>
            <description>The connect string to use when connecting to a
              job-management metastore. If unspecified, uses ~/.sqoop/.
              You can specify a different path here.
            </description>
          </property>
          
          <property>
            <name>sqoop.metastore.client.autoconnect.username</name>
            <value>SA</value>
            <description>The username to bind to the metastore.
            </description>
          </property>
          
          <property>
            <name>sqoop.metastore.client.autoconnect.password</name>
            <value></value>
            <description>The password to bind to the metastore.
            </description>
          </property>
          
          <property>
            <name>sqoop.metastore.client.record.password</name>
            <value>true</value>
            <description>If true, allow saved passwords in the metastore.
            </description>
          </property>
          
          <property>
            <name>sqoop.metastore.server.location</name>
            <value>/tmp/sqoop-metastore/shared.db</value>
            <description>Path to the shared metastore database files.
            If this is not set, it will be placed in ~/.sqoop/.
            </description>
          </property>
        
          <property>
            <name>sqoop.metastore.server.port</name>
            <value>16000</value>
            <description>Port that this metastore should listen on.
            </description>
          </property>
        </configuration>
      
    • 配置【sqoop-env.sh】
      cp /mysoft/sqoop/conf/sqoop-env-template.sh /mysoft/sqoop/conf/sqoop-env.sh 
      vim /mysoft/sqoop/conf/sqoop-env.sh
      
      添加如下内容:
      #Set path to where bin/hadoop is available
      export HADOOP_COMMON_HOME=/mysoft/hadoop
      
      #Set path to where hadoop-*-core.jar is available
      export HADOOP_MAPRED_HOME=/mysoft/hadoop
      
      #set the path to where bin/hbase is available
      export HBASE_HOME=/mysoft/hbase
      
      #Set the path to where bin/hive is available
      export HIVE_HOME=/mysoft/hive
      
      #Set the path for where zookeper config dir is
      export ZOOCFGDIR=/mysoft/zookeeper
      
  5. 将MySQL数据库的驱动mysql-connector-java-5.1.44-bin.jar上传到sqoop安装目录下的lib目录下
    在这里插入图片描述

  6. 由于sqoop缺少java-json.jar包进行解析json,需上传到sqoop安装目录下的lib目录下
    在这里插入图片描述

  7. 验证,命令行中输入:sqoop version,看到如下即为安装成功:
    在这里插入图片描述
    关于sqoop的测试案例,可以参考我的一篇博客:Sqoop-1.4.7基本命令使用案例说明

四、实验小结

本次实训我们已经完成了hadoop集群、zookeeper集群、hbase集群、spark集群的安装配置以及hive、flume、sqoop单机安装部署。希望大家能够对大数据环境搭建的过程有所了解和掌握安装的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若兰幽竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值