美文网首页
在CentOS7下搭建Hadoop集群及踩坑记

在CentOS7下搭建Hadoop集群及踩坑记

作者: Jackeroo | 来源:发表于2018-09-13 06:14 被阅读80次

    1 准备工作

    1.1 节点准备

    在开始安装系统之前,我们需要先准备5个节点,他们均通过CentOS 7 Minimal方式安装。网络及系统规划如下:

    主机名称 IP地址 操作系统 身份
    master 192.168.137.100 CentOS 7 NameNode、ResourceManager、NtpServer
    secondary 192.168.137.101 CentOS 7 SecondaryNameNode、NodeManager
    slave1 192.168.137.102 CentOS 7 DataNode、NodeManager
    slave2 192.168.137.103 CentOS 7 DataNode、NodeManager
    slave3 192.168.137.104 CentOS 7 DataNode、NodeManager
    主机 NN DN RM NM Hive
    master Y Y Y
    secondary Y Y Y
    slave1 Y Y
    slave2 Y Y
    slave3 Y Y

    1.2 系统架构

    在开始配置master和slave节点之前,了解Hadoop集群的不同组件十分重要。

    1.2.1 Master ——NameNode

    主节点上主要包括了分布式文件系统、资源调度。它主要包括两个守护进程:

    1、NameNode

    主要用来管理分布式文件系统,保存HDFS的元数据信息,比如命名空间信息、块信息等。类似于Linux Ext4文件系统的inode信息,Windows FAT文件系统的文件分配表。

    当它运行的时候,这些信息是放在内存中的,只有重启的时候,才会将这些信息持久化到磁盘中。

    NameNode功能

    2、ResourceManager

    通过YARN来管理资源,让分布式系统中的任务,可以在各个slave节点上正常执行。

    1.2.2 Secondary——NameNode

    单从名字上,它好像是Master NameNode的备份,实际上不是,它是用来在系统中提供CheckPoint Node——辅助NameNode正常工作的。

    Secondary NameNode功能

    1.2.3 slave——数据节点

    数据节点主要用来保存实际的数据,以及运行各种任务。一般也包括两个守护进程:

    1、DataNode

    从物理层面负责数据的存储。

    2、NodeManager

    管理节点上任务的执行。

    2. 系统安装

    为了方便,建议大家使用Vmware虚拟机安装——可以安装一个系统,装好必要的软件JDK并设置好环境变量之后,再克隆生成其他几个。

    2.1 系统准备

    CentOS下载: http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso

    VMware Workstation Pro v14.0下载: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.0.0-6661328.exe

     序列号:**FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA**
    

    2.2 系统安装

    2.2.1 安装CentOS 7

    安装5台CentOS系统,名称分别为master、secondary、slave1、slave2和slave3。

    5个VMware虚拟机系统安装完毕

    2.2.2 创建用户并设置密码

    在每台电脑上,分别执行以下指令创建用户,设置密码:

    useradd -m hadoop -G hadoop -s /bin/bash
    passwd hadoop
    

    2.2.3 配置网络

    我们通过手工方式来设置电脑的IP地址。注意:每台电脑的IP地址应该是不一致的。

    sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static           # 静态IP地址
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=9b6a5e1f-fd3b-4324-ab4c-7b2be4846ca8
    DEVICE=ens33
    ONBOOT=yes                  # 开机自动启用
    IPADDR="192.168.137.100"    # IP地址(同一网络中,每台应该不一致)
    PREFIX="24"
    GATEWAY="192.168.137.2"     # 网关
    DNS1="61.128.192.68"        # DNS服务器
    ZONE=public
    

    2.2.4 配置主机名

    编辑每台电脑上的/etc/hostname,依次设置为:

    master

    master
    

    secondary

    secondary
    

    slave1

    slave1
    

    slave2

    slave2
    

    slave3

    slave3
    

    2.2.5 配置主机域名解析

    将每台电脑上的/etc/hosts,全部按照以下设置(全都一样):

    192.168.137.100 master
    192.168.137.101 secondary
    192.168.137.102 slave1
    192.168.137.103 slave2
    192.168.137.104 slave3
    

    2.3 软件安装

    2.3.1 Java安装

    执行以下指令,安装JDK(Java Development Kit)——Hadoop运行必备。

    yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
    yum install wget
    yum install ntp
    

    2.3.2 设置Java环境变量

    先编辑/etc/profile,在文件最后加入以下内容:

     # Setting Java Home Environment
     export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
     export PATH=$PATH:$JAVA_HOME/bin
    

    然后执行:

    source /etc/profile
    java -version
    

    如果看到以下信息,则说明JDK安装成功:


    Java安装成功

    2.4网络设置

    2.4.1 关闭防火墙

    systemctl disable firewalld
    systemctl stop firewalld
    

    2.4.2 关闭SELinux

    SELinux是用来加强Linux安全的一种机制,不过在使用hadoop的时候,最好在每台电脑上都关闭它:

    1、临时关闭

    命令行执行:

    setenforce 0
    

    2、永久关闭

    编辑/etc/selinux/config文件,将:

    SELINUX=enforcing
    

    修改为:

    SELINUX=disable
    

    重启计算机之后,即永久生效。

    2.4.3 设置免密登录

    Hadoop集群的启动,是master来自动控制其他计算机的。为了达到这个目标,我们首先要在master上可以不用输入密码通过ssh登录secondary、slave1、slave2和slave3计算机。

    1、设置密钥

    在master电脑上,执行以下指令生成密钥(ssh-keygen的生成步骤比较多,可以直接按回车):

    ssh-keygen -t rsa
    

    2、分发密钥

    接下来分发密钥到每台电脑上(包括本机的Master):

    ssh-copy-id master
    ssh-copy-id secondary
    ssh-copy-id slave1
    ssh-copy-id slave2
    ssh-copy-id slave3
    

    3、测试免密登录

    在master电脑上,执行:

    ssh master
    ssh secondary
    ssh slave1
    ssh slave2
    ssh slave3
    

    如果可以全部不用输入密码访问,则大功告成。

    3 安装Hadoop

    绝大多数朋友采用的Hadoop安装方式,都是通过手工方式安装的,本文也是如此。

    3.0 准备hadoop安装目录

    在每台电脑上,执行以下指令准备hadoop安装目录:

    sudo mkdir -p /opt/hadoop
    sudo chown -R hadoop /opt/hadoop
    

    3.1 下载hadoop

    hadoop目前的最新版本,是3.0.1。所有的版本,都可以在 这里下载。

    这个压缩包里面,已经包括了Hadoop HDFS、Yarn、Map Reduce等各种组件,我们不需要单独下载。

    cd /home/hadoop
    wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz
    sudo mkdir -p /opt/hadoop
    sudo chown -R hadoop /opt/hadoop
    

    3.2 解压缩

    tar zxvf hadoop-3.0.1.tar.gz
    

    这样一来,在/home/hadoop/下会出现一个hadoop-3.0.1子目录,Hadoop的所有组件都在这个目录中——它就是Hadoop系统的家目录,将它拷贝到/opt/hadoop下。

    mv hadoop-3.0.1/* /opt/hadoop/
    

    3.3 配置HDFS运行环境

    同样,编辑/etc/profile。在文件的最后,加入以下内容:

     # Hadoop Environment Variables
     export HADOOP_HOME=/opt/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 HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
     export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
     export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
     export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/  lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*
    

    3.4 配置Hadoop

    hadoop的配置文件,都位于$HADOOP_HOME/etc/hadoop目录下。

    3.4.1 hadoop-env.sh

    用vi编辑hadoop-env.sh文件。

    vi /opt/modules/hadoop/etc/hadoop/hadoop-env.sh
    

    配置JAVA_HOME变量:

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
    

    3.4.1 core-site.xml

    用vi编辑core-site.xml文件。

    vi $HADOOP_HOME/etc/hadoop/core-site.xml
    

    具体配置信息如下:

    <?xml version="1.0" encoding="UTF-8"?>
     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     <configuration>
         <!-- 指定HDFS老大(namenode)的通信地址 -->
         <property>
             <name>fs.defaultFS</name>
             <value>hdfs://master:9000</value>
         </property>
    
         <!-- 指定hadoop运行时产生文件的存储路径 -->
         <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/home/hadoop/data/hadoop</value>
         </property>
     </configuration>
    

    3.4.2 hdfs-site.xml

    vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    

    具体配置信息如下:

    <!-- /opt/hadoop/etc/hadoop/hdfs-site.xml --> 
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
            <!-- 设置namenode的http通讯地址 -->
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>master:50090</value>
            </property>
            <!-- 设置hdfs副本数量 -->
            <property>
                    <name>dfs.replication</name>
                    <value>2</value>
            </property>
             <!-- 设置namenode存放的路径 -->
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>file:/home/hadoop/data/hadoop/dfs/name</value>
            </property>
             <!-- 设置datanode存放的路径 -->
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>file:/home/hadoop/data/hadoop/dfs/data</value>
            </property>
            <!-- 设置Secondary NameNode的地址 -->
            <property>
                 <name>dfs.secondary.http.address</name>
                 <value>secondary:50090</value>
             </property>
    </configuration>
    

    3.4.3 配置slaves

    在/opt/hadoop/etc/hadoop/slaves(hadoop 2.x及以前的版本,文件名为slaves, 3.x之后为workers,hostname或者IP地址,一行一个:

    vi $HADOOP_HOME/etc/hadoop/slaves
    
    slave1
    slave2
    slave3
    

    3.4.4 分发

    1、创建需要分发配置文件的机器列表 /opt/hadoop/machines,包括如下内容:

    secondary
    slave1
    slave2
    slave3
    

    2、分发hadoop

    for  x  in  `cat /opt/hadoop/machines` ; \
        do  echo  $x ; \
            scp  -r /opt/hadoop/  $x:/opt/hadoop/ ; \
        done;
    

    3.4.5 运行HDFS

    1、格式化hdfs文件系统

    在master上,执行:

    hdfs  namenode  -format
    

    格式化文件系统。

    2、启动hdfs服务

    在hadoop-master上,执行:

    start-dfs.sh
    

    你会看到启动了一个NameNode,一个Secondary NameNode和3个DataNode。

    HDFS文件系统启动中

    3.4.4 测试启动成功

    在hadoop-master和各台计算机上,分别执行执行:

    jps
    

    你会看到程序的运行结果。

    1、Hadoop-master

    主要包括NameNode进程。

    Master

    2、Hadoop-Secondary

    主要包括Secondary NameNode进程。

    secondary

    3、Hadoop-slave1、Hadoop-slave2和Hadoop-slave3

    主要包括DataNode进程。


    slave

    3.5 配置YARN和Map Reduce

    3.5.1 配置mapreduce

    编辑mapred-site.xml 文件:

    vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     <configuration>
             <!-- 通知框架MR使用YARN -->
             <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>
    

    3.5.2 配置YARN

    编辑yarn-site.xml文件:

    vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
    
    <?xml version="1.0"?>
     <configuration>
      <!-- 设置 resourcemanager 在哪个节点-->
     <!-- Site specific YARN configuration properties -->
             <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>
    
     </configuration>
    

    3.5.3 启动YARN

    执行以下指令启动yarn:

    start-yarn.sh
    
    Yarn启动中

    这将会启动ResourceManager和NodeManager。

    其中,ResourceManager在NodeName上运行,NodeManager在Slave上运行。


    NodeManager在slave上运行

    4 安装ntp时间服务

    hadoop服务,要求各个节点的时间严格同步,所以我们需要在master上创建一个ntp时间服务,其他节点跟它同步。

    4.1 安装ntp服务

    执行以下指令安装:

    sudo yum install ntp
    

    4.2 配置时间同步

    我们使用,hadoop、hbase等服务时,要求各个节点的时间严格同步。这就需要用到时间同步服务器,不过我们常见的Internet时间同步服务器不太靠谱,所以我们需要搭建一个ntp时间服务——最好让其他节点与它同步。

    4.2.1 最简单的方法

    直接与Aliyun时钟服务器同步:

    传送门: ntp时间同步配置

    5 安装hive

    5.1 安装hive

    5.1.1 准备工作

    ​ 在master上下载、解压缩

    wget wget http://mirrors.hust.edu.cn/apache/hive/hive-3.1.0/apache-hive-3.1.0-bin.tar.gz
    tar zxvf apache-hive-3.1.0-bin.tar.gz
    

    5.1.2 转移到Hive目录

    在每台电脑上,创建hive目录:

    sudo mkdir -p /opt/hive
    

    在master电脑上,转移文件到Hive目录

    sudo mv apache-hive-3.1.0-bin/* /opt/hive/
    

    5.1.4 设置hive目录访问权限

    chown -R hadoop:hadoop /opt/hive
    

    5.1.4 分发Hive目录到所有节点

    for  x  in  `cat /opt/hadoop/machines` ; \
        do  echo  $x ; \
            scp  /opt/hive/  $x:/opt/hive/ ; \
        done;
    

    5.1.5 设置Hive环境变量

    sudo vi /etc/profile
    
     export HIVE_HOME=/opt/hive
     export PATH=$PATH:$HIVE_HOME/bin
    
    配置hive环境变量

    5.2 配置hive目录及访问权限

    在hadoop-master上,执行以下指令:

    hadoop fs -mkdir /tmp
    hadoop fs -mkdir /user
    hadoop fs -mkdir /user/hive
    hadoop fs -mkdir /user/hive/warehouse
    hdfs dfs -chmod g+w /tmp
    hdfs dfs -chmod g+w /user/hive/warehouse
    
    创建Hive数据目录

    5.3 配置hive

    默认配置下的Hive,使用的是Derby元数据库,它只能从本地连接,并且只支持一个用户。所以我们就直接改为MySQL数据库作为元数据库。

    5.3.1安装MySQL

    sudo yum install mariadb-server mariadb
    sudo systemctl start mariadb
    sudo systemctl enable mariadb
    

    5.3.2 配置MySQL允许远程访问

    MySQL默认配置下,不允许远程访问。我们要修改为允许远程访问。在Master主机上,执行以下指令登录MySQL:

    mysql -u root
    

    然后新建root可以从远程访问的账号,并授权:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    5.3.1 设置环境变量

    5.3.2 配置hive-env.sh

    cd /opt/hive/conf
    cp hive-env.sh.template hive-env.sh
    vi hive-env.sh
    

    主要配置一个参数:指定HADOOP_HOME目录。如果本机已经安装了Hadoop,并且设置了HADOOP_HOME环境变量,则不需要配置。


    指定hadoop家目录

    5.3.2 设置hive-site.xml

    修改hive配置文件

    cd hive-2.3.3/conf 
    cp hive-default.xml.template hive-site.xml
    vi hive-site.xml
    
       <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
          <name>system:java.io.tmpdir</name>
          <value>/opt/hive/iotmp</value>
        </property>
        <property>
          <name>system:user.name</name>
          <value>${user.name}</value>
      </property>
      <!-- 数据库地址设置 -->
       <property>
         <name>javax.jdo.option.ConnectionURL</name>
         <value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true</value>
       </property>
       <property>
         <name>javax.jdo.option.ConnectionDriverName</name>
         <value>com.mysql.jdbc.Driver</value>
       </property>
      
       <!-- MySQL账号和密码设置 -->
       <property>
         <name>javax.jdo.option.ConnectionUserName</name>
         <value>root</value>
       </property>
       <property>
         <name>javax.jdo.option.ConnectionPassword</name>
         <value>All4Icode</value>
       </property>
    </configuration>
    

    5.3.6 准备MySQL驱动

    sudo yum install unzip
    wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.zip
    unzip mysql-connector-java-5.1.47.zip
    cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47.jar /opt/hive/lib
    

    5.3.7 初始化MySQL元数据库

    schematool -initSchema -dbType mysql
    

    看下初始化的数据库信息:

    schematool -dbType mysql -info
    
    初始化数据库

    5.4 启动

    [hadoop@master ~]$ hive
    
    hive> show databases;
    OK
    default
    Time taken: 1.139 seconds, Fetched: 1 row(s)
    hive> create table test(id int, name string);
    OK
    Time taken: 0.742 seconds
    hive> show tables;
    OK
    test
    Time taken: 0.082 seconds, Fetched: 1 row(s)
    hive>
    

    5.5 简单使用

    5.5.1 看下hive在hdfs中创建的目录

    hadoop fs -ls -R /user/hive
    
    目录创建成功

    5.5.2 看下hive在MySQL中创建的表

    mysql> use metastore;
    mysql> select * from TBLS;
    
    MySQL中也有对应的数据库和表

    6 安装HBase

    6.0 HBase架构图

    HBase架构图

    6.1 准备工作

    1、下载

    wget http://mirrors.shu.edu.cn/apache/hbase/2.0.2/hbase-2.0.2-bin.tar.gz
    

    2、解压缩

    tar zxvf hbase-2.0.2-bin.tar.gz
    

    3、设置目录

    在Master电脑上:

    sudo mkdir /opt/hbase
    sudo chown -R hadoop:hadoop /opt/hbase
    mv hbase-2.0.2/* /opt/hbase/
    

    secondary、slave1、slave2、slave3电脑上:

    sudo mkdir /opt/hbase
    sudo chown -R hadoop:hadoop /opt/hbase
    

    4、设置HBase环境变量
    我们计划在master电脑启用HBase master、几台slave电脑上启用RegionServer。

    在master电脑上,编辑/etc/profile文件,加入相关的环境变量:

    sudo vi /etc/profile
    

    在文件的最后加入以下信息:

    export HBASE_HOME=/opt/hbase
    export PATH=$PATH:$HBASE_HOME/bin
    

    分发到每台电脑上,执行以下指令使设置生效:

    sudo scp /etc/profile root@slave1:/etc/profile
    sudo scp /etc/profile root@slave2:/etc/profile
    sudo scp /etc/profile root@slave3:/etc/profile
    

    master、slave1、slave2、slave3电脑上分别执行以下指令:

    source /etc/profile
    

    6.2 配置

    HBase的配置文件,都位于$HBASE_HOME下的conf目录中:

    1、hbase-env.sh
    主要用来设置JAVA_HOME环境变量,我们是集中在/etc/profile中进行设置——这里可以不用设置。

    # 根据自己的实际JAVA_HOME目录配置
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
    
    # 默认使用自带的Zookeeper,配置为false则使用我们部署的
    export HBASE_MANAGES_ZK=false
    

    2、 hbase-site.xml

         <property>
             <name>hbase.tmp.dir</name>
             <value>home/hadoop/data/hbase/tmp</value>
         </property>
    
          # HBase的hdfs根目录
         <property>
             <name>hbase.rootdir</name>
             <value>hdfs://master:9000/hbase</value>
         </property>
    
        #采用zookeeper分部署部署
         <property>
             <name>hbase.cluster.distributed</name>
             <value>true</value>
         </property>
        
        # zookeeper节点
         <property>
             <name>hbase.zookeeper.quorum</name>
             <value>slave1,slave2,slave3</value>
         </property>
    

    3、 regionservers
    编辑regionservers:

    vi $HBASE_HOME/conf/regionservers
    

    保证内容如下:

     slave1
     slave2
     slave3
    

    6.3 分发文件

    scp -r /opt/hbase/* slave1:/opt/hbase
    scp -r /opt/hbase/* slave2:/opt/hbase
    scp -r /opt/hbase/* slave3:/opt/hbase
    

    6.3 启动HBase

    执行start-hbase.sh。

    start-hbase.sh
    

    至此,包括hadoop、yarn、hive和HBase不适用HA的服务器集群搭建完毕。

    相关文章

      网友评论

          本文标题:在CentOS7下搭建Hadoop集群及踩坑记

          本文链接:https://www.haomeiwen.com/subject/zdjjgftx.html