ambari2.7.3 + HDP3.1.0离线搭建HA高可用集群

2,952 阅读11分钟
  1. 参考文档:

    1. ambari2.7.3离线安装HDP3.1.0+CentOS7
    2. Ambari Documentation Version 2.7.3.0
    3. 官方文档pdf下载:bk_ambari-installation.pdf
  2. 安装包下载地址:

    1. MySQL Product Archives
    2. HDP 3.1.0 Repositories
    3. Ambari Repositories
    4. RPM resource yum

安装说明

  1. 软件版本

    软件版本说明
    ambari2.7.3.0hdp管理软件
    HDP3.1.0.0
    JDK1.8.0_181版本必须大于1.8
    mysql5.7.30版本必须大于5.7

    hpd官网中有软件兼容性表格,不同的HDP版本对其他软件有兼容性要求:

  2. 集群规划,当前规划使用五个节点,搭建HA进行集群安装。规划如下:

    组件node1node2node3node4node5
    ambari-server
    ambari-agent
    zookeeper
    namenode
    datanode
    resourcemanager
    nodemanager
    hiveserver
    hiveserver2
    hiveserver2 interactive
    livy
    HMaster
    HRegionServer
    kafka
    client(hive、spark、zookeeper...)
    mysql

环境检查

  1. 关闭selinux:

    # 查看selinux状态
    getenforce
    Disabled #enforceing代表开启,permissive代表警告,disabled代表关闭
    
    # 如果已关闭跳过后面步骤,如果没关闭,修改/etc/sysconfig/selinux
    vim /etc/sysconfig/selinux
    # 修改以下内容为disabled
    SELINUX=disabled
    
    # 重启服务器
    reboot
    
  2. 关闭防火墙,每个节点都需要:

    # 查看防火墙状态
    service firewalld status
    Redirecting to /bin/systemctl status firewalld.service
    ● firewalld.service
       Loaded: masked (/dev/null; bad)
       Active: inactive (dead)
       
    # 关闭防火墙
    service firewalld stop
    # 关闭防火墙自启动
    chkconfig firewalld off
    
  3. JDK安装,每个节点都需要:

    # 查看用的是哪个java,如果是系统自带的,进行卸载和安装,如果已经安装好,跳过后续步骤
    which java
    /usr/java/jdk1.8.0_181/bin/java
    
    # 查看系统安装的java
    yum list installed | grep java
    # 卸载系统安装的java
    yum remove -y java*
    
    # 安装java,需先将tar包上传至服务器
    mkdir /usr/local/java
    tar -zxvf jdk-8u188-linux-x64.tar.gz -C /usr/local/java
    
    # 配置环境变量,在/etc/profile文件中添加一下内容
    #JAVA_HOME
    export JAVA_HOME=/usr/local/java/jdk1.8.0_181
    export CLASSPATH=.:$JAVA_HOME/lib:/lib
    export PATH=$JAVA_HOME/bin:$PATH
    
    # 使得环境变量生效
    source /etc/profile
    
    # 检查是否生效
    java -version
    
    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
  4. hostname修改,每个节点/etc/hostname下填入各自的hostname:

    noed1
    
  5. ssh配置:

    # 主节点node1上尝试远程登录其他节点,注意远程节点hostname修改为环境所对应的
    ssh node2
    Last login: Fri Aug 28 09:37:53 2020 from 192.168.0.3
    
    ## 如果没有设置,进行免密登录设置:
    # 主节点上生成密钥对(一路回程):
    ssh-keygen -t rsa
    # 复制公钥
    cd ~/.ssh; cp id_rsa.pub authorized_keys
    
    ## 将公钥分发至其他节点
    # 其他所有节点先创建目录
    mkdir ~/.ssh;
    
    # 方式一,知道root密码:
    scp authorized_keys root@node2:~/.ssh/authorized_keys
    # 方式二,不知道密码的话只能手动将密钥复制过去了
    cat ~/.ssh/id_rsa.pub # 主节点
    vim ~/.ssh/authorized_keys # 其他节点,将公钥复制进去
    
    # 复制公钥后其他节点修改目录权限
    chmod -R 600 ~/.ssh 
    
    # 在主节点上再次尝试远程登录其他节点
    ssh node2
    
  6. hosts配置(/etc/hosts):

    vim /etc/hosts
    # 加入以下内容,根据具体环境修改:
    192.168.0.81 node1
    192.168.0.82 node2
    192.168.0.83 node3
    192.168.0.84 node4
    
    # 将hosts分发到其他节点
    scp /etc/hosts root@node2:/etc/hosts
    

创建centos本地源

centos本地源的创建只有当系统为minimal且没有外部网络的时候(或者外部网络很慢)时进行创建,如果网络良好的话跳过该步骤

  1. 选择对应版本的centos-dvd或者everything版本下载:Download CentOS Linux ISO images

  2. httpd服务安装且自启动:

    rpm -ivh mailcap-2.1.48-2.mga7.noarch.rpm
    rpm -ivh apr-1.4.8-5.el7.x86_64.rpm
    rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
    rpm -ivh httpd-tools-2.4.6-93.el7.centos.x86_64.rpm
    rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm 
    
    service httpd start
    chkconfig httpd on
    
  3. 将下载的CentOS-7-x86_64-DVD-1810.iso上传到服务器/opt/os目录下并进行挂载:

    #  -o loop:指定设备的挂载方式,loop表示把一个文件当成硬盘分区挂载到系统
    #  -t iso9660:指定文件系统的类型,ISO文件的类型对应为iso9660,其他文件类型可以自行查资料
    mount -o loop -t iso9660 /opt/os/CentOS-7-x86_64-DVD-1810.iso /var/www/html/centos
    
    mount: /dev/loop0 写保护,将以只读方式挂载
    
  4. 删除现有yum库:

    cd /etc/yum.repos.d/
    mkdir ../etc/yum.repos.d.bak
    mv ./* ../etc/yum.repos.d.bak
    
  5. /etc/yum.repos.d/base.repo下填入以下内容:

    [centos]
    name=centos
    baseurl=http://192.168.0.251/centos
    enabled=1
    gpgcheck=0
    
    #参数含义:
    #  name:表示该yum源的名称
    #  baseurl:表示yum源的软件目录,"http://"表示该yum源为一个远程的http协议的yum源。当然此处还可以为ftp协议或者是其他的文件传输协议;
    #  enabled:表示该yum配置段是否生效,1表示生效,0表示无效
    #  gpgcheck:表示是否对yum源指定的软件包进行安全校验,0表示不校验,本地挂载的镜像可以认为软件就是安全的,不必校验;
    
  6. 执行一下命令进行yum源的情况和更新,之后就可以通过yum安装一些iso中的包的了:

    yum clean all
    yum update
    

依赖库预装

  1. 系统如果是minimal的,以下的库都是缺少的需要安装,如果不是也最好确认下是否存在避免安装的时候报错;

  2. 系统库安装:

    yum install -y redhat-lsb yum-utils createrepo net-tools
    
  3. 依赖库安装,mysql和hdp等会需要用到:

    yum install -y libaio libaio-devel postgresql-devel
    
    # 只挂载centos dvd是没有libtirpc-devel文件的,没有网络的话要下载对应的rpm包上传上去手动安装,rpm下载地址见 安装说明章节之前安装包下载地址
    rpm -ivh libtirpc-0.2.4-0.16.el7.x86_64.rpm
    rpm -ivh libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm
    

mysql安装

  1. 卸载linux自带的mysql

    rpm -qa | grep mysql
    rpm -e --nodeps mysql-connector-java-5.1.25-3.el7.noarch
    
  2. 卸载linux自带的mariadb

    rpm -qa | grep mariadb
    rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
    
    #删除mysql配置文件(不一定存在,存在删除即可)
    rm -f /etc/my.cnf
    
  3. 查看是否有mysql用户和组:

    cat /etc/passwd | grep mysql
    cat /etc/group | grep mysql
    
    #如果不存在,创建不登录用户和组
    useradd -s /sbin/nologin mysql
    
  4. mysql安装

    1. 将mysql安装包上传到对应服务器节点

    2. rpm进行mysql安装:

      rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
      rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
      rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm 
      rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm
      
    3. 启动mysql服务:service mysqld start

    4. mysql服务开机启动:chkconfig mysqld on

    5. 查看mysql服务运行状态:service mysqld status

    6. 查看自动初始化的root密码:grep password /var/log/mysqld.log

    7. 初始密码登录mysql:mysql -u root -p

    8. 重置密码:set password = password("ABcd_123456")。第一次登录一定要重置密码才能进行其他操作,密码要求长达大于8,包含大消息特殊符号和数字,如果需要设置简单密码,参考Your password does not satisfy the current policy requirements进行修改;

    9. 修改字符集为utf8mb4,在/etc/my.cnf中添加以下内容:

      [client] 
      default-character-set=utf8mb4 
      
      [mysql] 
      default-character-set=utf8mb4 
      
      [mysqld] 
      
      character-set-server=utf8mb4
      collation-server=utf8mb4_unicode_ci      
      init_connect='SET NAMES utf8mb4'
      
    10. 将pid、data、log目录所属设置为mysql:

    chown -R mysql:mysql /var/lib/mysql
    chown -R mysql:mysql /var/run/mysqld/
    chown mysql:mysql /var/log/mysqld.log
    
    1. 重启mysql:service mysqld restart

    2. 查看字符集信息:SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

  5. root用户登录,创建hive和ambari数据库及其对应用户,注意密码修改为自己的密码:

    CREATE DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    CREATE DATABASE ambari CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    CREATE USER 'hive'@'%'IDENTIFIED BY 'Hive_123';
    CREATE USER 'ambari'@'%'IDENTIFIED BY 'Ambari_123';
    
    GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' identified by 'Hive_123';
    GRANT ALL PRIVILEGES ON ambari.* TO 'ambari'@'%' identified by 'Ambari_123';
    
    flush privileges;
    

hdp安装

  1. 在进行hdp安装之前,确保所有节点都有安装好JDK8、配置好master节点到其他节点的SSH免密登录以及关闭防火墙和SELinux;

  2. 将安装文件上传到master节点,包含以下文件:

    ambari-2.7.3.0-centos7.tar.gz
    HDP-3.1.0.0-centos7-rpm.tar.gz
    HDP-GPL-3.1.0.0-centos7-gpl.tar.gz
    HDP-UTILS-1.1.0.22-centos7.tar.gz
    
  3. 安装yum工具库:

    yum install -y yum-utils
    yum install -y createrepo
    yum repolist
    
    #离线安装采用如下命令:
    rpm -ivh ./yum-utils-1.1.31-54.el7_8.noarch.rpm
    rpm -ivh ./createrepo-0.9.9-28.el7.noarch.rpm
    
  4. master节点安装apache httpd,启动服务并设置开机启动:

    yum install -y httpd
    
    #离线安装采用如下命令:
    rpm -ivh mailcap-2.1.48-2.mga7.noarch.rpm
    rpm -ivh apr-1.4.8-5.el7.x86_64.rpm
    rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
    rpm -ivh httpd-tools-2.4.6-93.el7.centos.x86_64.rpm
    rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm 
    
  5. 在httpd生成的/var/www/html目录下创建ambari和hdp目录

    mkdir /var/www/html/ambari
    mkdir /var/www/html/hdp
    
  6. 将ambari和hdp安装文件解压到对应html目录中:

    tar -zxvf ambari-2.7.3.0-centos7.tar.gz -C /var/www/html/ambari/
    tar -zxvf HDP-3.1.0.0-centos7-rpm.tar.gz -C /var/www/html/hdp/
    tar -zxvf HDP-GPL-3.1.0.0-centos7-gpl.tar.gz -C /var/www/html/hdp/
    tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/hdp/
    
  7. 配置ambari的本地repo,往/etc/yum.repos.d/ambari.repo中写入一下内容,注意baseurl和gpgkey修改为本地路径:

    #VERSION_NUMBER=2.7.3.0-139
    [ambari-2.7.3.0]
    #json.url = http://public-repo-1.hortonworks.com/HDP/hdp_urlinfo.json
    name=ambari Version - ambari-2.7.3.0
    #baseurl=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.3.0
    baseurl=http://192.168.0.251/ambari/ambari/centos7/2.7.3.0-139
    gpgcheck=1
    #gpgkey=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.3.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
    gpgkey=http://192.168.0.251/ambari/ambari/centos7/2.7.3.0-139/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
    enabled=1
    priority=1
    
  8. 配置hdp的本地repo**(可不做,ambari会根据页面配置自动生成)**,在/etc/yum.repos.d/hdp.repo中填入以下内容:

    #VERSION_NUMBER=3.1.0.0-78
    
    [HDP-3.1.0.0]
    name=HDP Version - HDP-3.1.0.0
    baseurl=http://192.168.0.251/hdp/HDP/centos7/
    gpgcheck=1
    gpgkey=http://192.168.0.251/hdp/HDP/centos7/3.1.0.0-78/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
    enabled=1
    priority=1
    
    [HDP-GPL-3.1.0.0]
    name=HDP-GPL Version - HDP-GPL-3.1.0.0
    baseurl=http://192.168.0.251/hdp/HDP-GPL/centos7/
    gpgcheck=1
    gpgkey=http://192.168.0.251/hdp/HDP-GPL/centos7/3.1.0.0-78/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
    enabled=1
    priority=1
    
    
    [HDP-UTILS-1.1.0.22]
    name=HDP-UTILS Version - HDP-UTILS-1.1.0.22
    baseurl=http://192.168.0.251/hdp/HDP-UTILS/centos7/
    gpgcheck=1
    gpgkey=http://192.168.0.251/hdp/HDP-UTILS/centos7/1.1.0.22/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
    enabled=1
    priority=1
    
  9. 生成本地源(这里不确定hdp相关的直接创建到hdp目录即可):

    createrepo /var/www/html/ambari/ambari/centos7
    createrepo /var/www/html/hdp/HDP/centos7
    createrepo /var/www/html/hdp/HDP-UTILS/centos7
    createrepo /var/www/html/hdp/HDP-GPL/centos7
    

    浏览器打开http://192.168.0.251/ambari/http://192.168.0.251/hdp/ 能看到以下内容即可:

  10. 更行yum源:

    yum clean all
    yum update
    yum repolist
    

  11. master节点安装ambari-server

    1. 将mysql驱动程序上传到服务器任意目录,我是放到/usr/share/java

    2. 安装ambari-server:yum install -y ambari-server

    3. ambari数据库初始化:

      mysql -u ambari -p
      use ambari;
      source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
      show tables;
      
      #共111个表
      
    4. 所有节点创建ambari用户**(hdp安装的时候用的是root,安装好后所有的启动都用ambari)**:

      useradd ambari
      passwd ambari
      
    5. 给ambari用户添加sudo权限,/etc/sudoers中添加以下内容:

      ambari  ALL=(ALL)       NOPASSWD:ALL
      
    6. 配置ambari-server:ambari-server setup,主要需要设置用户(用户设置为ambari,默认为root)、javahome和mysql连接信息等信息:

  12. 启动ambari服务

    ambari-server start
    
  13. hdp安装:

    1. 登录ambari ui:192.168.0.251:8080, 默认用户名密码为admin:admin

    2. 设置集群名称:

    3. 添加版本信息,下拉选择Add Version,填入前面httpd服务中HDP的HDP-3.1.0.0-78.xml文件路径,这里为http://192.168.0.251/hdp/HDP/centos7/3.1.0.0-78/HDP-3.1.0.0-78.xml,添加后以该版本信息进行hdp安装:

    4. 选择HDP版本,这里勾选Use Local Repository,删除其他OS,留下redhat7对应填入对应的http路径:

      http://192.168.0.251/hdp/HDP/centos7/
      http://192.168.0.251/hdp/HDP-GPL/centos7/
      http://192.168.0.251/hdp/HDP-UTILS/centos7/
      

    5. 配置节点和密钥,密钥为master节点root用户的私钥,默认路径为~/.ssh/id_rsa,如果ssh端口有修改,做对应配置:

    6. 节点选择,等安装好后点击下click here to see the wamings,有错误的话需要解决:

    7. 服务选择,选择需要的服务即可,这里选择了HDFS、yarn、tez、hive、zookeeper、ambari metrics、SmartSense、spark2、hbase、kafkahbase和kafka不是必选项

    8. master配置,根据前面的集群规划进行组件的配置:

    9. slave配置,根据前面的集群规划进行组件的配置:

    10. hive连接设置,database url填入mysql对应节点即可:jdbc:mysql://dp-slave3/hive,填好账号密码后测试下连接,如果连接出错尝试执行下:ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.47.jar进行数据库驱动指定后再试:

      数据目录等其他配置,用默认即可,数据目录不需要手动创建,如果已经存在需要确保hdfs:hadoop用户和组有读写权限,不然服务启动会出错,可根据磁盘挂载将目录修改为磁盘空间大的数据目录,通过df -ah查看磁盘挂载情况;

    11. review:

    12. 安装和启动服务:

      安装完成后可能某些服务启动失败进入管理页面尝试手动重启,根据日志查找原因,大部分都是因为目录权限或者端口占用的原因:

      最终确保以下组件正常启动即可:

hdfs HA搭建

HA的搭建是搭建好完全分布式集群、启动服务后进行的

  1. 在HDFS服务中启动HA配置:

  2. 设置HA集群的namespace:

  3. 选择节点部署额外的NameNode:

  4. 节点间删除和增加的组件清单:

  5. 登录到NameNode节点设置checkpoints,按步骤执行里面的命令即可:

  6. 组件配置:

  7. JournalNode配置,登录到NameNode节点执行给出的命令即可:

  8. 服务安装:

  9. ZKFC格式化和NameNode元数据初始话(注意ZKFC的格式化是在NameNode1执行的,NameNode的元数据初始话是在新的NameNode节点中执行):

  10. 服务启动:

yarn HA搭建

yarn的HA的搭建同样也是搭建好完全分布式集群、启动服务后进行的
  1. 在yarn组件中启用yarn HA后:

  2. 选择节点安装ResourceManager服务:

  3. 增加和删除服务清单:

  4. 安装服务:

hiveserver2 HA搭建

  1. 在hosts中进入需要装额外和iveserver2的节点:

  2. 在add中选择hiveserver2安装即可:

服务启动

在安装好所有服务后,之后的服务管理就不应该在通过root用户启动维护了,这里通过ambari管理:

  1. 先在ambari-ui中将所有服务关闭,然后停止ambari服务:

    # 所有节点执行
    service ambari-agent stop
    # 主节点执行
    service ambari-server stop
    # 所有节点执行
    chown -R ambari:ambari /var/log/ambari-agent/ /var/log/ambari-server/
    chown -R ambari:ambari /var/lib/ambari-agent /var/lib/ambari-server
    chown -R ams:hadoop /var/lib/ambari-metrics-monitor/
    chown -R ambari:ambari /var/run/ambari-agent /var/run/ambari-server
    
  2. 然后切换到ambari用户重启启动ambari服务,再登录ambari-ui将集群服务启动:

    # 所有节点执行
    su ambari
    # 主节点执行
    sudo service ambari-server start
    # 所有节点执行
    sudo service ambari-agent start
    
  3. 最终选择要用的服务启动即可:

问题解决

  1. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 2: ordinal not in range(128):

    python的str默认是ascii编码,和unicode编码冲突,就会报这个错误,在/usr/lib/python2.7/site-packages/sitecustomize.py添加以下内容:

    # encoding=utf-8
    
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf-8')