CentOS7+Postgres+非root用户离线安装部署Ambari2.7.5+HDP3.1.5

883 阅读14分钟

想要进行大数据相关开发、学习,就必须先有一个大数据环境。而面对如此繁多的大数据组件,维护和管理将异常困难,因此有一个好的管理工具,将事半功倍。而 Ambari 就是这样的一个角色,有了它我们将轻松上手大数据。利用这次机会,在公司测试机器上进行部署实践一下。

在这里由衷感谢几篇博客,给予帮助:

blog.csdn.net/m0_37739193…

zhuanlan.zhihu.com/p/44270177?…

blog.csdn.net/qq_33684569…

一、基础环境配置

1.1 软硬件设施

这边直接用已有的数据库和虚拟机,因此不详细介绍安装过程了

  1. 准备一个关系型数据库(这里选PG),创建一个 db_bigdata

  2. 准备3台 CentOS7 虚拟机。一台 master(bigdata1),两台 worker(bigdata2,bigdata3)【注意本次操作均为普通用户ambari,但是具有sudo权限,因为虚拟机不允许 root 用户操作

    • ambari 用户(3台主机都要创建,并拥有 sudo 权限)
    • test 用户(作为普通用户,3台都创建)
    • python 2.7.5(系统自带)
  3. 准备一个关系型数据库(本文采用PG库,MYSQL也可以,不过推荐5.7,如果是MYSQL8会有问题

    • 创建一个用户(具体用户名、密码自行决定)
    • 创建一个库 db_bigdata
    • 创建一个模式 ambari
  4. 本文所使用的软件版本为ambari-2.7.5.0-72HDP-3.1.5.0-152,以下网盘提供对应包,以及离线的 rpm 包,以及一些相关的东西。【由于虚拟机是提供好的,所以如果本文中出现了一些程序没有安装,且网盘中提供的 rpm 包也没有,请自行放入对应 rpm 包。如果想自己制作,可以等遇到报错的时候,再去下载对应的 rpm 包,可以参考另一片博客 《CentOS离线安装RPM及其依赖包》

    点击获取相关安装包 提取码:bs20

    目录清单:

    |- mysql-connector-java.jar(数据库驱动)
    |- jdk-8u251-linux-x64.tar.gz(JDK8)
    |- jce_policy-8.zip(后面安装kerberos需要)
    |- Ambari-DDL-Postgres-CREATE.sql(Ambari在PG库中初始化表和数据的脚本)
    |- Ambari2.7.5+HDP3.1.5
    |   |- HDP-UTILS-1.1.0.22-centos7.tar.gz
    |   |- HDP-GPL-3.1.5.0-centos7-gpl.tar.gz
    |   |- HDP-3.1.5.0-centos7-rpm.tar.gz
    |   |- ambari-2.7.5.0-centos7.tar.gz
    |- rpm
    |   |- httpd(目录,里面是安装httpd服务的rpm包,考虑到离线环境,第一个程序包也不多就直接rpm安装了)
    |   |- rpms(目录,里面是各类程序的rpm及其依赖包,httpd搭建好后,制作本地yum源,就可以和联网一样使用了)
    |   |   |- repodata(目录,虚拟机可能没有 createrepo 命令,先打包好)
    |   |   |- ...(各种 rpm 文件)
    

    如果链接失效了,可以自行制作,其中 rpm 主要为:

    createrepo
    gcc
    httpd
    ntp
    krb5
    krb5-libs
    krb5-server
    krb5-workstation
    python-devel
    python-kerberos
    redhat-lsb
    yum-utils
    postgresql
    

1.2 环境设置

1.2.1 关闭防火墙

所有主机执行以下命令:

# 关闭防火墙
sudo systemctl stop firewalld.service
# 查看状态
systemctl status firewalld.service
# 关闭开机自启
sudo systemctl disable firewalld.service

image-20221027235919343

1.2.2 设置 hostname、hosts、FQDN

hostname

分别到各主机节点上设置对应的主机名(这个随意自己来定):

# 在 bigdata1 上执行
sudo hostnamectl set-hostname bigdata1
​
# 在 bigdata2 上执行
sudo hostnamectl set-hostname bigdata2
​
# 在 bigdata3 上执行
sudo hostnamectl set-hostname bigdata3

hosts

所有主机进行配置 hosts:

sudo vi /etc/hosts
192.168.1.111 bigdata1.wbw.cn bigdata1
192.168.1.112 bigdata2.wbw.cn bigdata2
192.168.1.113 bigdata3.wbw.cn bigdata3

FQDN

分别到各主机节点上设置对应的 FQDN:

sudo vi /etc/sysconfig/network
​
# 不同机器使用对应的FQDN
# 在 bigdata1 追加
NETWORKING=yes
HOSTNAME=bigdata1.wbw.cn
​
​
# 在 bigdata2 追加
NETWORKING=yes
HOSTNAME=bigdata2.wbw.cn
​
​
# 在 bigdata3 追加
NETWORKING=yes
HOSTNAME=bigdata3.wbw.cn

以 bigdata1 为例:

image-20221108234736279

1.2.3 关闭 SELINUX

所有主机执行以下命令:

# 临时关闭SELINUX(master node)
sudo setenforce 0
# 永久关闭则需要修改配置文件,【并重启】
sudo vi /etc/selinux/config
​
# SELINUX=enforcing修改为
SELINUX=disabled

image-20221028013933755

重启机器 reboot,查看状态:sestatus

image-20221028181738913

1.2.5 设置最大打开文件数

查看最大打开文件数,发现只有1024:

image-20221028014134238

所有节点追加内容:

sudo vi /etc/security/limits.conf
​
*       soft   noproc  65535
*       hard   noproc  65535
*       soft   nofile  65535
*       hard   nofile  65535

image-20221028014250337

重新登入会话生效。

1.2.7 设置免密登陆

  1. 生成 bigdata1 私钥(连续按3次回车)

    ssh-keygen -t rsa
    

    image-20221028014432926

  2. 设置 bigdata1 到 所有节点的免密登陆

    ssh-copy-id bigdata1
    ssh-copy-id bigdata2
    ssh-copy-id bigdata3
    
  3. 测试是否可以进行免密登陆

    ssh bigdata1
    exit
    ssh bigdata2
    exit
    ssh bigdata3
    exit
    

1.2.8 配置 MySQL 驱动包

上传 mysql 驱动包 mysql-connector-java.jar ,并放入所有机器的 /usr/share/java/ 下:

sudo cp mysql-connector-java.jar /usr/share/java/

分发到另外两台

scp mysql-connector-java.jar ambari@bigdata2:/home/ambari/
scp mysql-connector-java.jar ambari@bigdata3:/home/ambari/

分别在另外两台机器上,执行刚才命令,将包放入指定位置。

1.2.9 离线安装 http 服务 (httpd)

  1. 下载 rpm 包,上传到 bigdata1 服务器节点

    apr-1.4.8-7.el7.x86_64.rpm
    apr-util-1.5.2-6.el7.x86_64.rpm
    mailcap-2.1.41-2.el7.noarch.rpm
    httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
    httpd-2.4.6-95.el7.centos.x86_64.rpm
    

    下载地址:(可以用迅雷下载会快一些,也可以用国内阿里镜像)

    mirror.centos.org/centos/7/os… mirror.centos.org/centos/7/os… mirror.centos.org/centos/7/os… mirror.centos.org/centos/7/os… mirror.centos.org/centos/7/os…

  2. 顺序安装

    sudo rpm -ivh apr-1.4.8-7.el7.x86_64.rpm
    sudo rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
    sudo rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
    sudo rpm -ivh httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
    sudo rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
    

    image-20221028020352401

  3. 启动服务、查看状态、设置开机自启

    sudo systemctl start httpd
    systemctl status httpd
    sudo systemctl enable httpd
    

    image-20221028020429019

  4. 访问 bigdata1 节点 IP 网址 http://bigdata1.wbw.cn (如果显示如下结果,即成功。如果无法访问,可能是防火墙或者 SELINUX 没有关闭的原因)

    image-20221020015236209

1.2.10 配置 yum 源

  1. 准备 tar 包

    ambari-2.7.5.0-centos7.tar.gz
    HDP-3.1.5.0-centos7-rpm.tar.gz
    HDP-GPL-3.1.5.0-centos7-gpl.tar.gz
    HDP-UTILS-1.1.0.22-centos7.tar.gz
    
  2. 将Ambari、HDP、HDP-UTILS、HDP-GPL文件上传到 bigdata1 ,并解压

    sudo tar -zxvf ambari-2.7.5.0-centos7.tar.gz -C /var/www/html/
    sudo tar -zxvf HDP-3.1.5.0-centos7-rpm.tar.gz -C /var/www/html/
    sudo tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/
    sudo tar -zxvf HDP-GPL-3.1.5.0-centos7-gpl.tar.gz -C /var/www/html/
    

    同时将提前准备好的 rpm 包(1.1 中有网盘获取地址,也可以自己下载)也上传,放入 httpd 服务可以访问的目录下:

    sudo mv rpms /var/www/html/ 
    
  3. 所有节点,配置 ambari 本地 repo 文件

    sudo vi /etc/yum.repos.d/ambari.repo
    ​
    # 添加以下内容
    [ambari-2.7.5.0-72]
    name=ambari Version - ambari-2.7.5.0-72
    baseurl=http://bigdata1.wbw.cn/ambari/centos7/2.7.5.0-72/
    enabled=1
    gpgcheck=0
    
  4. 所有节点,配置 hdp 本地 repo 文件

    sudo vi /etc/yum.repos.d/hdp.repo
    ​
    # 添加以下内容
    [HDP-3.1.5.0-152]
    name=HDP Version - HDP-3.1.5.0-152
    baseurl=http://bigdata1.oss.wbw.cn/HDP/centos7/3.1.5.0-152/
    enabled=1
    gpgcheck=0
    [HDP-UTILS-1.1.0.22]
    name=Hortonworks Data Platform Utils Version - HDP-UTILS-1.1.0.22
    baseurl=http://bigdata1.oss.wbw.cn/HDP-UTILS/centos7/1.1.0.22/
    gpgcheck=0
    enabled=1
    [HDP-GPL-3.1.5.0-152]
    name=HDP-GPL Version - HDP-GPL-3.1.5.0-152
    baseurl=http://bigdata1.oss.wbw.cn/HDP-GPL/centos7/3.1.5.0-152/
    enabled=1
    gpgcheck=0
    
  5. 所有节点,配置 基础软件包 本地 repo 文件

    sudo vi /etc/yum.repos.d/rpms.repo
    ​
    # 添加以下内容
    [rpms]
    name=rpms
    baseurl=http://bigdata1.wbw.cn/rpms/
    enabled=1
    gpgcheck=0
    
  6. 在 bigdata1 上执行 createrepo 命令,创建 yum 本地源

    sudo createrepo /var/www/html/ambari/centos7/2.7.5.0-72/
    sudo createrepo /var/www/html/HDP/centos7/3.1.5.0-152/
    sudo createrepo /var/www/html/HDP-UTILS/centos7/1.1.0.22/
    sudo createrepo /var/www/html/HDP-GPL/centos7/3.1.5.0-152/
    

    如果机器上没有 createrepo 命令,那么先执行第7步,更新一下 yum 源,然后利用刚才上传的基础软件包进行安装:

    sudo yum install createrepo -y
    
  7. 更新各个节点yum源

    sudo yum clean all && yum makecache
    

    报错

    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
    14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
    ​
    ​
     One of the configured repositories failed (Unknown),
     and yum doesn't have enough cached data to continue. At this point the only
     safe thing yum can do is fail. There are a few ways to work "fix" this:
    ​
         1. Contact the upstream for the repository and get them to fix the problem.
    ​
         2. Reconfigure the baseurl/etc. for the repository, to point to a working
            upstream. This is most often useful if you are using a newer
            distribution release than is supported by the repository (and the
            packages for the previous distribution release still work).
    ​
         3. Run the command with the repository temporarily disabled
                yum --disablerepo=<repoid> ...
    ​
         4. Disable the repository permanently, so yum won't use it by default. Yum
            will then just ignore the repository until you permanently enable it
            again or use --enablerepo for temporary usage:
    ​
                yum-config-manager --disable <repoid>
            or
                subscription-manager repos --disable=<repoid>
    ​
         5. Configure the failing repository to be skipped, if it is unavailable.
            Note that yum will try to contact the repo. when it runs most commands,
            so will have to try and fail each time (and thus. yum will be be much
            slower). If it is a very temporary problem though, this is often a nice
            compromise:
    ​
                yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
    ​
    Cannot find a valid baseurl for repo: base/7/x86_64
    

    解决方案

    由于是离线状态无法连接该网址,所以我们只要把系统自带的源先移走,等有用的时候再发放回去【所有节点都要操作

    # 创建临时目录
    [ambari@bigdata1 etc]$ sudo mkdir /etc/yum.repos.d_tmp
    # 查看源
    [ambari@bigdata1 yum.repos.d]$ ll /etc/yum.repos.d
    total 60
    drwxr-xr-x.   2 root root  255 Oct 21 17:57 .
    drwxr-xr-x. 146 root root 8192 Oct 21 18:16 ..
    -rw-r--r--.   1 root root  248 Oct 21 17:57 ambari.repo
    -rw-r--r--.   1 root root 1664 Oct 23  2020 CentOS-Base.repo
    -rw-r--r--.   1 root root 1309 Oct 23  2020 CentOS-CR.repo
    -rw-r--r--.   1 root root  649 Oct 23  2020 CentOS-Debuginfo.repo
    -rw-r--r--.   1 root root  314 Oct 23  2020 CentOS-fasttrack.repo
    -rw-r--r--.   1 root root  630 Oct 23  2020 CentOS-Media.repo
    -rw-r--r--.   1 root root 1331 Oct 23  2020 CentOS-Sources.repo
    -rw-r--r--.   1 root root 8515 Oct 23  2020 CentOS-Vault.repo
    -rw-r--r--.   1 root root  616 Oct 23  2020 CentOS-x86_64-kernel.repo
    -rw-r--r--.   1 root root  795 Oct 21 17:17 hdp.repo
    -rw-r--r--.   1 root root   75 Oct 21 17:17 rpms.repo
    # 将系统自带的源(CentOS开头的)移到临时目录
    [ambari@bigdata1 yum.repos.d]$ sudo mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d_tmp/
    

    然后再次运行命令

  1. 验证(如果第6步还没做,记得回头看哦)

    yum repolist
    
  1. 打开浏览器查看是否可以访问:http://bigdata1.wbw.cn/HDP/centos7/3.1.5.0-152/ ,其他类似

    image-20221028175051565

    可能会遇到访问空白的情况,原因是没办法访问该网址:(不过显示问题对安装不影响)

    image-20221028174911031

    所以只要把对应的 index.html 换个名字即可:

    sudo mv /var/www/html/HDP/centos7/3.1.5.0-152/index.html /var/www/html/HDP/centos7/3.1.5.0-152/index.html.bak
    sudo mv /var/www/html/ambari/centos7/2.7.5.0-72/index.html /var/www/html/ambari/centos7/2.7.5.0-72/index.html.bak
    

    还是不行的,可能要强制刷新下缓存。

1.2.11 离线安装时间同步服务 (ntp)

  1. 所有节点安装

    sudo yum install ntp -y
    
  2. 修改 bigdata1 节点配置文件

    sudo vi /etc/ntp.conf
    ​
    # 1.设置允许 bigdata2 和 bigdata3 机器可以从这台机器上查询和同步时间,直接追加以下内容
    restrict bigdata2 mask 255.255.255.0 nomodify notrap
    restrict bigdata3 mask 255.255.255.0 nomodify notrap
    ​
    # 2.注释以下代码
    #server 0.centos.pool.ntp.org iburst
    #server 1.centos.pool.ntp.org iburst
    #server 2.centos.pool.ntp.org iburst
    #server 3.centos.pool.ntp.org iburst# 3.追加以下内容(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    

    image-20221028015917189

  3. 启动 ntp 服务、查看状态、并设置开机自启

    sudo systemctl start ntpd
    systemctl status ntpd
    sudo systemctl enable ntpd
    

    image-20221028020117472

  4. 在 bigdata2 和 bigdata3 上配置定时时间同步

    sudo crontab -e
    

    追加如下内容:

    # 每10分同步一次时间
    */10 * * * * /usr/sbin/ntpdate bigdata1.wbw.cn
    

1.2.12 安装 JDK8

  1. 在 bigdata1 上执行以下命令,解压到指定目录

    sudo tar -zxvf jdk-8u251-linux-x64.tar.gz -C /opt/
    
  2. 修改配置文件

    sudo vi /etc/profile
    ​
    # 追加内容
    JAVA_HOME=/opt/jdk1.8.0_251
    export PATH=$JAVA_HOME/bin:$PATH
    
  3. 更新配置文件

    source /etc/profile
    
  4. 验证版本

    [ambari@bigdata1 ambari_package]$ java -version
    java version "1.8.0_251"
    Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
    Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
    
  5. 分发到 bigdata2 和 bigdata3

    scp jdk-8u251-linux-x64.tar.gz ambari@bigdata2:/home/ambari/
    scp jdk-8u251-linux-x64.tar.gz ambari@bigdata3:/home/ambari/
    
  6. 在 bigdata2 和 bigdata3 上分别执行刚才解压、添加 JAVA 环境变量、并验证

二、Ambari 安装

2.1 安装 Ambari-Server

  1. 执行安装命令

    sudo yum install -y ambari-server
    

    这里没有用提供的rpm包集合,可能会报错:

    Error: Package: ambari-server-2.7.5.0-72.x86_64 (ambari-2.7.5.0-72)
               Requires: postgresql-server >= 8.1
    

    解决方案

    离线安装 postgresql

    1. 下载 rpm 包(由于需要8.1版本以上,这里选12.4)

      postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
      postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
      postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
      postgresql12-contrib-12.4-1PGDG.rhel7.x86_64.rpm
      

      下载地址:

      download.postgresql.org/pub/repos/y… download.postgresql.org/pub/repos/y… download.postgresql.org/pub/repos/y… download.postgresql.org/pub/repos/y…

    2. 按顺序安装

      sudo rpm -ivh postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
      sudo rpm -ivh postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
      sudo rpm -ivh postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
      sudo rpm -ivh postgresql12-contrib-12.4-1PGDG.rhel7.x86_64.rpm
      
    3. 重新执行安装命令

  2. 执行 ambari 配置命令

    sudo ambari-server setup
    

    可能报错

    Enter Database Password (ambari): 
    Invalid characters in password. Use only alphanumeric or _ or - characters
    

    解决方案

    这里由于密码中带有特殊字符(#),触发报错。最简单的方法就是改数据库用户密码,让密码只包含字母、数字和下划线(_)

    执行过程(这里使用PG库来安装,如果显示如下步骤遍执行成功)

    注:如果使用MYSQL,MYSQL5.7(没有安装不知道运行情况,不过之前安装过一次其他版本是可以的),但是MYSQL8会有不兼容情况,表名会变成关键字。这也是为什么后来选PG的原因。

    [ambari@bigdata1 ~]$ sudo ambari-server setup
    Using python  /usr/bin/python
    Setup ambari-server
    Checking SELinux...
    SELinux status is 'disabled'
    Customize user account for ambari-server daemon [y/n] (n)? y【自定义ambar -server守护进程的用户帐户】
    Enter user account for ambari-server daemon (root):ambari【这里选 ambari 用户】
    Adjusting ambari-server permissions and ownership...
    Checking firewall status...
    Checking JDK...
    [1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
    [2] Custom JDK
    ==============================================================================
    Enter choice (1): 2【这里选2,自定义的JDK】
    WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.
    WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts.
    Path to JAVA_HOME: /opt/jdk1.8.0_251【输入刚刚配置的 JAVA_HOME】
    Validating JDK on Ambari Server...done.
    Check JDK version for Ambari Server...
    JDK version found: 8
    Minimum JDK version is 8 for Ambari. Skipping to setup different JDK for Ambari Server.
    Checking GPL software agreement...
    GPL License for LZO: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
    Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? y【允许】
    Completing setup...
    Configuring database...
    Enter advanced database configuration [y/n] (n)? y【是否进行数据库配置】
    Configuring database...
    ==============================================================================
    Choose one of the following options:
    [1] - PostgreSQL (Embedded)
    [2] - Oracle
    [3] - MySQL / MariaDB
    [4] - PostgreSQL
    [5] - Microsoft SQL Server (Tech Preview)
    [6] - SQL Anywhere
    [7] - BDB
    ==============================================================================
    Enter choice (1): 4【PG库是(4),MYSQL的话,就选(3)。注意!(1)是内嵌的PG库,这里我们外部有自己的PG库】
    Hostname (localhost): 192.168.xxx.xxx【这里输入数据库地址】
    Port (5432): 5432【输入数据库端口,如果不写默认是括号中的内容,可以直接回车】
    Database name (ambari): db_bigdata【输入数据库名】
    Postgres schema (ambari): 【输入模式,这里直接回车】
    Username (ambari): xxxxxx【输入用户名】
    Enter Database Password (bigdata): 【输入密码】
    Re-enter password: 【再次输入密码】
    Configuring ambari database...
    Configuring remote database connection properties...
    WARNING: Before starting Ambari Server, you must run the following DDL directly from the database shell to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-Postgres-CREATE.sql
    Proceed with configuring remote database connection properties [y/n] (y)? 【连接数据库创建表,这里肯定会执行失败,因为配置的JDBC URL有问题,导致连不上数据库,但是没关系可以按照下面的步骤来解决】
    Extracting system views...
    ambari-admin-2.7.5.0.72.jar
    ....
    Ambari repo file doesn't contain latest json url, skipping repoinfos modification
    Adjusting ambari-server permissions and ownership...
    Ambari Server 'setup' completed successfully.
    

    从语句中获取到对应的数据库初始化 DDL 脚本文件,并进入数据库执行,手动创建元数据表:

    WARNING: Before starting Ambari Server, you must run the following DDL directly from the database shell to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-Postgres-CREATE.sql
    
  3. 启动 Amber-Server(注意,这里需要用 amber 用户启动,而且不能用 sudo 来执行

    ambari-server start
    

    如果显示如下那么,启动成功:(这里有一个修改 ulimit 失败的,因为我们 ambari 用户没有权限,不过影响)

    image-20221028031820680

    报错

    Using python  /usr/bin/python
    Starting ambari-server
    Ambari Server running with administrator privileges.
    Organizing resource files at /var/lib/ambari-server/resources...
    Ambari database consistency check started...
    Server PID at: /var/run/ambari-server/ambari-server.pid
    Server out at: /var/log/ambari-server/ambari-server.out
    Server log at: /var/log/ambari-server/ambari-server.log
    Waiting for server start.............................ERROR: Exiting with exit code -1. 
    REASON: Ambari Server java process has stopped. Please check the logs for more information.
    

    进一步查看日志文件:/var/log/ambari-server/ambari-server.log

    Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "metainfo" does not exist
    

    继续往上找,发现是 JDBC 中没有 schema 信息造成的:【这也是上面为什么不能自动创建表的原因】

    jdbcUrl -> jdbc:postgresql://192.168.xxx.xxx:5432/db_bigdata
    

    解决方案

    直接修改配置文件:

    sudo vi /etc/ambari-server/conf/ambari.properties
    

    发现有两处地方涉及 JDBC URL,添加上 schema 连接信息:

    server.jdbc.rca.url=jdbc:postgresql://192.168.xxx.xxx:5432/db_bigdata?currentSchema=ambari
    server.jdbc.url=jdbc:postgresql://192.168.xxx.xxx:5432/db_bigdata?currentSchema=ambari
    

    修改后再次启动服务,如果显示如下信息,则启动成功:

    Starting ambari-server
    Ambari Server running with administrator privileges.
    Organizing resource files at /var/lib/ambari-server/resources...
    Ambari database consistency check started...
    Server PID at: /var/run/ambari-server/ambari-server.pid
    Server out at: /var/log/ambari-server/ambari-server.out
    Server log at: /var/log/ambari-server/ambari-server.log
    Waiting for server start.........
    Server started listening on 8080
    Ambari Server 'start' completed successfully.
    

    有可能会启动失败,可以试试删除 PID 文件后再执行:

    sudo rm /var/run/ambari-server/ambari-server.pid
    
  4. 访问 WEB-UI,如果显示如下界面则安装成功。(默认用户名/密码:admin/admin,端口:8080

    http://bigdat.wbw.cn:8080/
    

    image-20221027021256001

2.2 安装 Ambari-Agent

  1. 所有主机安装

    sudo yum install ambari-agent -y 
    
  2. 所有主机配置文件修改

    sudo vi /etc/ambari-agent/conf/ambari-agent.ini
    ​
    # 修改hostname为主节点的IP或者地址
    [server]
    hostname=bigdata1.wbw.cn
    
  3. 启动服务、查看状态(这里需要用到 sudo)

    sudo ambari-agent start
    sudo ambari-agent status
    

    如果显示下图所示,则启动成功(可能需要等一段时间 agent 才会起来):

    image-20221028033527052

到此为止,就完成了一半了。接下来,就是对各个大数据组件进行安装了。

三、HDP 安装

3.1 安装基础组件(HDFS、YARN+MapReduce2、Zookeeper、Ambari Metrics)

  1. 登陆 Amber web 界面

    image-20221028164036856

  1. 创建集群

    image-20221028164132092

  1. 设置集群名字

    image-20221028164343970

  1. 选择 HDP 版本

    image-20221028164538585

  1. 删除掉除了"Redhat7"之外的其他操作系统(这里选择redhat7,因为是CentOS7系统)

    image-20221028181052327

  1. 设置本地 repository,只保留 redhat7,并填写配置好的 HDP本地源【图中hosts可能和文本对不上,没关系,因为涉及公司相关信息,因此图片会有打码,后续整理文章的时候也会对IP、hosts等进行修改。知道换成自己的就可以。后面同理,不做说明

    http://bigdata1.wbw.cn/HDP/centos7/3.1.5.0-152/
    http://bigdata1.wbw.cn/HDP-GPL/centos7/3.1.5.0-152/
    http://bigdata1.wbw.cn/HDP-UTILS/centos7/1.1.0.22/
    

    image-20221028181518547

  2. 注册主机,填写 FQDN 以及 SSH 私钥信息

    私钥可以通过以下文件获取(注意,里面所有内容,包括-符号)

    vi ~/.ssh/id_rsa
    

    image-20221028183440729

    image-20221028190702173

  3. 选择需要安装的组件,这边我们先简单的选一下基础组件(Hadoop 和 zookeeper,以及 Ambari Metrics),后续再根据需要进行添加(中间会重启多次组件,所以不要装那么多)

    image-20221028191455578

    忽略2次告警

    image-20221028191531869

    image-20221028191607751

  4. 选择服务安装的机器(尽可能的分散一些,缓解压力)

    image-20221109015105650

  5. 选择安装的内容和位置

    image-20221028192240366

  6. 设置密码

    image-20221028192740710

  7. 设置组件目录(保持默认选项,直接下一步)

    image-20221028192920455

  8. 设置组件用户信息(保持默认选项,直接下一步)

    image-20221028193040946

  9. 设置配置信息(保持默认选项,直接下一步)

    image-20221028194111428

  10. Review 在该页面可以对集群的配置和安装节点进行预览:

    image-20221028194500797

  11. 等待安装完成

    image-20221028194404455

    这时候可能会安装失败(因为第一次装的时候不知道需要哪些rpm包,现在已整合到1.1中网盘地址):

    image-20221028201347896

    查看报错信息

    stderr: 
    2022-10-28 20:05:58,032 - The 'hadoop-hdfs-datanode' component did not advertise a version. This may indicate a problem with the component packaging.
    Traceback (most recent call last):
      File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/HDFS/package/scripts/datanode.py", line 126, in <module>
        DataNode().execute()
      File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 352, in execute
        method(env)
      File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/HDFS/package/scripts/datanode.py", line 45, in install
        self.install_packages(env)
      File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 853, in install_packages
        retry_count=agent_stack_retry_count)
      File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 166, in __init__
        self.env.run()
      File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 160, in run
        self.run_action(resource, action)
      File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 124, in run_action
        provider_action()
      File "/usr/lib/ambari-agent/lib/resource_management/core/providers/packaging.py", line 30, in action_install
        self._pkg_manager.install_package(package_name, self.__create_context())
      File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 219, in install_package
        shell.repository_manager_executor(cmd, self.properties, context)
      File "/usr/lib/ambari-agent/lib/ambari_commons/shell.py", line 753, in repository_manager_executor
        raise RuntimeError(message)
    RuntimeError: Failed to execute command '/usr/bin/yum -y install hadoop_3_1_5_0_152', exited with code '1', message: 'Error: Package: hadoop_3_1_5_0_152-3.1.1.3.1.5.0-152.x86_64 (HDP-3.1-repo-1)
    ​
               Requires: redhat-lsb
    

    网上说需要安装下面的两个依赖包:

    sudo rpm -ivh libtirpc-0.2.4-0.16.el7.x86_64.rpm 
    sudo rpm -ivh libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm
    

    发现还是不行,才发现最后一行写的,原来缺的是 redhat-lsb,但是这个软件依赖包太多了,普通方法不行。因此,可以参考另一篇文章进行下载依赖包,然后安装:

    sudo yum install redhat-lsb -y
    

    安装后重试,继续 HDP 部署:

    image-20221028202323323

    再次报错,这回缺另外的东西,同样的方法进行安装:

    RuntimeError: Failed to execute command '/usr/bin/yum -y install ambari-metrics-monitor', exited with code '1', message: 'Error: Package: ambari-metrics-monitor-2.7.5.0-72.x86_64 (ambari-2.7.5.0-72)
    ​
               Requires: gcc
    ​
    Error: Package: ambari-metrics-monitor-2.7.5.0-72.x86_64 (ambari-2.7.5.0-72)
    ​
               Requires: python-devel
    

    最终虽然安装成功了,但是启动失败。查看报错是因为端口(53)已经被使用了,但是不影响,所以下一步。

    image-20221109015440950

  12. 完成部署

    image-20221109015544700

3.2 启动基础组件、删除 SmartSense 组件

  1. 修复刚才的启动错误(还记得端口被占用吗)

    image-20221029223237016

    image-20221109015641120

    image-20221029223535682

  2. 启动所有组件

    image-20221029223630651

  3. 删除 SmartSense 服务,没什么用,还会报错

    image-20221029224610009

  4. 最终界面

    image-20221029225827522

3.3 HDFS 启动 HA

  1. 点击HA配置

    image-20221103230307484

  2. 设置命名空间

    image-20221103230731944

  3. 选择组件安装位置

    image-20221103233705657

  4. 确认信息界面,直接下一步

    image-20221103231105219

  5. 在NameNode上创建检查点

    # 进入bigdata1节点
    [ambari@bigdata1 ~]$ sudo su hdfs -l -c 'hdfs dfsadmin -safemode enter'
    Safe mode is ON
    [ambari@bigdata1 ~]$ sudo su hdfs -l -c 'hdfs dfsadmin -saveNamespace'
    Save namespace successful
    

    执行完以上命令,下一步会亮起

    image-20221103231514542

  6. 等待安装完成,点击下一步

    image-20221103232138427

  7. 初始化JN,然后下一步

    sudo su hdfs -l -c 'hdfs namenode -initializeSharedEdits'
    

    image-20221103232257688

  8. 等待启动服务,然后下一步

    image-20221103232442728

  9. 初始化 NameNode HA 元数据

    # 在 bigdata1 执行
    sudo su hdfs -l -c 'hdfs zkfc -formatZK'
    

    注意!下一步在另一台机器上执行,具体看页面提示!

    # 根据页面提示,在bigdata3 运行
    sudo su hdfs -l -c 'hdfs namenode -bootstrapStandby'
    

    最后下一步亮起

    image-20221103232803380

  1. 完成

    image-20221103233136081

3.4 ResourceManager 启动 HA

  1. 点击配置RM HA

    image-20221103233447504

    image-20221103233515354

  2. 选择组件安装位置

    image-20221103233635453

  3. 信息确认,直接下一步

    image-20221103233740168

  4. 完成

    image-20221103235007644

  5. 同步 HDFS 配置文件

    image-20221103235216175

3.5 安装 Tez

  1. 添加服务

    image-20221103235527237

  2. 下一步

    image-20221103235624871

  3. 选择客户端安装位置

    image-20221103235804907

  4. 默认选项,下一步

    image-20221103235841462

    image-20221109015933549

    image-20221109015958566

  5. 完成

    image-20221104000108501

  6. 更新配置文件

    image-20221104000215259

    image-20221104000351411

3.6 安装 Hive

  1. 添加服务(后续操作和之前差不多,就不截图了)

    image-20221104000526121

  2. 配置 HIVE 元数据库

    image-20221104000851151

    根据提示,去 ambari-server 的机器上执行对应命令:

    [ambari@bigdata1 ~]$ sudo ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
    Using python  /usr/bin/python
    Setup ambari-server
    Copying /usr/share/java/mysql-connector-java.jar to /var/lib/ambari-server/resources/mysql-connector-java.jar
    If you are updating existing jdbc driver jar for mysql with mysql-connector-java.jar. Please remove the old driver jar, from all hosts. Restarting services that need the driver, will automatically copy the new jar to the hosts.
    JDBC driver was successfully initialized.
    Ambari Server 'setup' completed successfully.
    

    image-20221104001906955

  3. 下一步

    image-20221104002004198

    image-20221104002041777

    image-20221109020127544

    image-20221104003852184

3.7 安装 HBase

3.7.1 安装

  1. 前面步骤类似

  2. 添加2个 HBASE MASTER,作为 HA

    image-20221104004725693

  3. 选择服务

    image-20221104004812967

3.7.2 ATSv2 HBase Application 告警

安装后遇到该告警:

image-20221105023137753

        Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/YARN/package/alerts/alert_ats_hbase.py", line 183, in execute
    ats_hbase_app_info = make_valid_json(output)
  File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/YARN/package/alerts/alert_ats_hbase.py", line 226, in make_valid_json
    raise Fail("Couldn't validate the received output for JSON parsing.")
Fail: Couldn't validate the received output for JSON parsing.

这个告警可以先不管。不影响。其实是因为 HDP3.X 新增了 YARN Timeline Service 2.0,该服务存储于 HBase。该服务同时是一个yarn应用:

image-20221105023812003

这篇文章解释的挺详细的:blog.csdn.net/github_3957…

不怎么了解这个,先不解决了。后续解决了再来填坑。

3.8 安装 Spark2

  1. 跳过重复步骤介绍

  2. 选择组件(内存不够 spark2 thrift server 可以只选一个节点开)

    image-20221109020257670

3.9 安装 Kafka

  1. 跳过重复步骤介绍

  2. 选择组件(这里选3个)

    image-20221104013254652

四、配置 Kerberos

4.1 安装 JCE

对于 Kerberos 系统来说,默认使用的 AES-256来进行加密。在集群启用 Kerberos 之前,必须在 Ambari 集群上的每个节点上都装有 JCE

由于 JCE 对应着 JDK 的版本,而本例采用 JDK8,因此去该地址下载:www.oracle.com/technetwork…(网盘中也有提供)

# 1.将下载的 jce_policy-8.zip 上传到 bigdata1,并解压到指定目录下
sudo unzip -o -j -q jce_policy-8.zip -d $JAVA_HOME/jre/lib/security
​
​
# 2.分发,并执行
scp jce_policy-8.zip ambari@bigdata2:/home/ambari/
ssh ambari@bigdata2
sudo unzip -o -j -q jce_policy-8.zip -d $JAVA_HOME/jre/lib/security
exit
​
scp jce_policy-8.zip ambari@bigdata3:/home/ambari/
ssh ambari@bigdata3
sudo unzip -o -j -q jce_policy-8.zip -d $JAVA_HOME/jre/lib/security
exit
​
​
# 3.最后重启服务
ambari-server restart

4.2 安装 krb5

这里选择 bigdata1 作为 KDC 服务(因为是离线,需要根据之前的方法,制作对应的 yum 源)

sudo yum -y install krb5-server krb5-libs krb5-workstation

注: KDC (Key Distribution Center)密匙分配中心, 其在kerberos中通常提供两种服务:

  • Authentication Service (AS):认证服务  
  • Ticket-Granting Service (TGS):授予票据服务

4.3 配置 Kerberos 配置文件

注意!该节内容的配置文件中所有默认的 EXAMPLE 已被替换为 BIGDATA

修改 krb5.conf

sudo vi /etc/krb5.conf 
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
​
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
​
​
[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
 # 注释放开,并修改(也可以不改)
 default_realm = BIGDATA.COM
 default_ccache_name = KEYRING:persistent:%{uid}
​
# 认证服务主机名
[realms]
 BIGDATA.COM = {
  kdc = bigdata1.wbw.cn
  admin_server = bigdata1.wbw.cn
 }
​
# 注释放开,且与上面一致
[domain_realm]
 .example.com = BIGDATA.COM
 example.com = BIGDATA.COM                    

参数说明

[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置

default_realm = EXAMPLE.COM 默认的 realm,必须跟要配置的 realm 的名称一致。

ticket_lifetime 表明凭证生效的时限,一般为24小时。

renew_lifetime 表明凭证最长可以被延期的时限,一般为7天。当凭证过期之后, 对安全认证的服务的后续访问则会失败。

[logging]:表示 server 端的日志的打印位置

[realms]:列举使用的 realm。

kdc:代表安装 kdc server 的机器。格式是机器ip或者主机名

admin_server:代表安装 admin server的机器。格式是机器ip或者主机名

EXAMPLE.COM:是设定的realm。名字随意。Kerberos 可以支持多个realms,会增加复杂度。本文不探讨。

大小写敏感,一般为了识别使用全部大写。这个 realm 跟机器的 hostname 没有关系。

修改 kdc.conf

sudo vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88# 这里 BIGDATA.COM 要和之前的一致!
[realms]
 BIGDATA.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

参数说明

EXAMPLE.COM:是设定的realm,名称随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。书写大小写敏感,一般为了识别使用全部大写。这个realm跟机器的hostname没有关系。

master_key_type:和 supported_enctypes默认使用 aes256-cts。JAVA 使用 aes256-cts 验证方式需要安装 JCE 包。

acl_file:标注文件路径,用于设置 principal的权限,需要用户自己创建。文件格式: Kerberos_principalpermissions[target_principal][restrictions]

admin_keytab:KDC 进行校验的 keytab。

supported_enctypes:支持的校验方式。

修改 kadm5.acl

sudo vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@BIGDATA.COM     *

文件格式

principal permissions[target_principal][restrictions]

principal: */admin@EXAMPLE.COM

permissions:* (*代表所有权限)

target_principal:选填

restrictions:选填

该文件可扩展,扩展链接:web.mit.edu/kerberos/kr…

4.4 设置 Kerberos

  1. 创建 kerberos 数据库(需要输入密码,这里输入 admin

    我们会输入database的管理密码。这里设置的密码一定要记住,如果忘记了,就无法管理Kerberos server

    kdb5_util create -s -r BIGDATA.COM
    
    [root@hdp02 tars]# kdb5_util create -s -r BIGDATA.COM
    Loading random data
    Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BIGDATA.COM',
    master key name 'K/M@BIGDATA.COM'
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.
    Enter KDC database master key: 
    Re-enter KDC database master key to verify: 
    

    创建好后,会看到以下文件:

    [root@hdp02 tars]# ll /var/kerberos/krb5kdc 
    total 24
    -rw------- 1 root root   22 Mar 29 01:20 kadm5.acl
    -rw------- 1 root root  451 Mar 29 01:14 kdc.conf
    -rw------- 1 root root 8192 Mar 29 01:31 principal
    -rw------- 1 root root 8192 Mar 29 01:31 principal.kadm5
    -rw------- 1 root root    0 Mar 29 01:31 principal.kadm5.lock
    -rw------- 1 root root    0 Mar 29 01:31 principal.ok
    
  2. 创建管理员 admin/admin@BIGDATA.COM(需要输入密码:admin

    # 进入Kerberos数据库
    [ambari@bigdata1 rpms]$ sudo kadmin.local
    Authenticating as principal root/admin@BIGDATA.COM with password.
    # 创建admin/admin管理员
    kadmin.local:  addprinc admin/admin
    WARNING: no policy specified for admin/admin@BIGDATA.COM; defaulting to no policy
    Enter password for principal "admin/admin@BIGDATA.COM": 
    Re-enter password for principal "admin/admin@BIGDATA.COM": 
    Principal "admin/admin@BIGDATA.COM" created.
    kadmin.local:  exit
    
  3. 启动KDC服务器和KDC管理服务器,并使其开机自启动

    sudo systemctl start krb5kdc
    sudo systemctl start kadmin
    sudo systemctl enable krb5kdc
    sudo systemctl enable kadmin
    

4.5 Ambari 安装 Kerberos 向导

  1. 点击开启

    image-20221104030022057

  2. 选择模式

    image-20221104030141090

  3. KDC 、Kadmin 验证

    image-20221104030546731

  4. 测试 kerberos 客户端

    image-20221104030637499

  5. 一路 NEXT 直到结束

4.6 创建票据并认证

在安装了 kerberos 后,hive 客户端和 hdfs 客户端进去是会报错的,因为没有进行身份认证。

  1. 在所有机器上创建用户 test 作为普通用户

  2. 在 bigdata1 上执行 sudo kadmin.local 进入客户端

  3. 添加票据

    # 添加票据
    kadmin.local:  addprinc -randkey test/bigdata1.wbw.cn@BIGDATA.COM
    # 生成keytab文件
    kadmin.local:  xst -norandkey -k /etc/security/keytabs/test.service.keytab test/bigdata1.wbw.cn@BIGDATA.COM
    
  4. 修改票据权限

    sudo chown test:test /etc/security/keytabs/test.service.keytab
    
  5. 切换到 test 用户(没有改用户就创建一个,建议所有节点都创建该用户,可以都进行认证,也可以需要的时候进行认证)

    其他节点认证前,也要安装

    sudo yum -y install krb5-server krb5-libs krb5-workstation
    
  6. 认证票据

    kinit -kt /etc/security/keytabs/test.service.keytab test/bigdata1.wbw.cn@BIGDATA.COM
    
  7. 验证票据

    klist
    
  8. 配置定时刷新

    crontab -e
    ​
    # 添加以下内容,定时认证
    0 * * * * kinit -kt /etc/security/keytabs/test.service.keytab test/bigdata1.wbw.cn@BIGDATA.COM
    

4.7 解决Ambari启用Kerberos认证后NameNode UI 等页面无法打开问题

--namenode ui
在HDFS -> Advanced core-site
set hadoop.http.authentication.simple.anonymous.allowed to true
在HDFS -> Custom core-site
set hadoop.http.authentication.type  to simple
set hadoop.proxyuser.HTTP.groups to *
set hadoop.proxyuser.knox.groups to *
set hadoop.proxyuser.knox.hosts to *
set hadoop.proxyuser.yarn.hosts to *
 
--spark history ui, 在export 前面加#注释掉
在Spark2 -> Advanced spark2-env -> content
{% if security_enabled %}
#export SPARK_HISTORY_OPTS='-Dspark.ui.filters=org.apache.hadoop.security.authentication.server.AuthenticationFilter -Dspark.org.apache.hadoop.security.authentication.server.AuthenticationFilter.params="type=kerberos,kerberos.principal={{spnego_principal}},kerberos.keytab={{spnego_keytab}}"'
{% endif %}
 
--ResourceManager UI
在yarn -> Advanced ranger-yarn-security
set Add YARN Authorization to false
在yarn -> Custom yarn-site
set yarn.resourcemanager.proxy-user-privileges.enabled to false

4.7.1 NameNode UI、ResourceManager UI

image-20221104221818391

image-20221104222733968

image-20221104225246266

保存,然后更新配置,就可以了。

4.7.2 Spark History UI

image-20221104230049882

4.8 Kerberos 下访问 HBase

开启 kerberos 后,访问 hbase 报错:

hbase(main):001:0> create_namespace 'test'ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user 'test' (global, action=ADMIN)

这时候,就需要自己去添加权限了:

  1. 切换到 hbase 用户

    sudo su hbase
    
  2. 然后使用 hbase keytab 进行认证

    # 先查看票据信息
    bash-4.2$ klist -kt /etc/security/keytabs/hbase.headless.keytab
    Keytab name: FILE:hbase.headless.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       2 03/29/2022 01:49:30 hbase-bigdata@BIGDATA.COM
       2 03/29/2022 01:49:30 hbase-bigdata@BIGDATA.COM
       2 03/29/2022 01:49:30 hbase-bigdata@BIGDATA.COM
       2 03/29/2022 01:49:30 hbase-bigdata@BIGDATA.COM
       2 03/29/2022 01:49:30 hbase-bigdata@BIGDATA.COM
    # 然后进行认证
    bash-4.2$ kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-bigdata@BIGDATA.COM
    
  3. 进入 hbase shell 并授权

    bash-4.2$ hbase shell
    ​
    hbase(main):001:0> grant 'test', 'RWXCA'
    
  4. 回到 test 用户,进行 hbase 操作,创建名称空间成功

    hbase(main):005:0> create_namespace 'test'
    Took 0.6601 seconds
    

4.9 Kerberos 下访问 Spark

开启 kerberos 后,输入 spark-sql 会报错:

Permission denied: user=test, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
  1. 先在机器上创建 test 用户

  2. 在HDFS上创建用户目录

    # 创建目录
    sudo -u hdfs hdfs dfs -mkdir /user/test
    # 修改拥有者
    sudo -u hdfs hdfs dfs -chown test:hdfs /user/test
    

新报错,test 用户没有权限提交到 defaulta 队列:

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.yarn.exceptions.YarnException): org.apache.hadoop.security.AccessControlException: User test does not have permission to submit application_1667576038385_0004 to queue default

To enable ACLs, you must set the value of the yarn.acl.enable property in yarn-site.xml to true. The default value of this property is false.

The default value of acl_submit_applications for a root queue is yarn, which means that only the default yarn user can submit applications to that queue. Therefore, to provide specific users and groups with access to the queue, you must explicitly set the value of acl_submit_applications to those users and groups.

大概意思就是说,开启ACL的时候,必须设置参数才可以访问队列,默认只有yarn用户可以提交任务。

找了半天 yarn-site.xml 没有找到,原来在 UI 界面配置:

image-20221105024447180

设置该队列:

image-20221109021513302

保存,更新:

image-20221105024702559

然后就可以使用spark了

4.10 Kerberos 下访问 Hive

虽然hive可以进去了,也可以创建库,但是建表的时候缺报错了

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=test, access=EXECUTE, inode="/warehouse/tablespace/managed/hive":hive:hadoop:drwx------

参考:community.cloudera.com/t5/Support-…

查看权限:

sudo -u hdfs hdfs dfs -getfacl /warehouse/tablespace/managed/hive

执行:

sudo -u hdfs hdfs dfs -setfacl -R -m user:test:rwx /warehouse/tablespace/managed/hive

虽然参考里面说权限只要 r-w ,但是该目录下层才是 test.db ,对该目录的写操作,也会影响父级目录,所以也需要父级的写权限

继续报错:

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=test, access=WRITE, inode="/warehouse/tablespace/managed/hive/test.db":hive:hadoop:drwxrwx---

修改目录拥有者:

sudo -u hdfs hdfs dfs -chown test:hadoop /warehouse/tablespace/managed/hive/test.db

至此,可以创建表了。

当执行语句的时候再次报错(和spark一样,如果你没解决spark会看到这个,解决方法参考4.9,添加用户权限到默认队列中):

User test does not have permission to submit application_1667581643840_0002 to queue default

五、QA

5.1 Yarn 添加新队列

  1. 打开 yarn 队列管理界面

    image-20221104231609317

  2. 添加队列,就叫做 yarn-system

    image-20221104231751231

  3. 设置队列容量大小

    image-20221104232941696

  4. 分配 yarn-ats 用户到 hive-system 队列

    写法:

    [u | g] [username : groupname] [yarn队列的名字]
    

    image-20221104233052251

  5. 保存并更新

    image-20221104233234058

5.2 Spark 无法读取 Hive 表

hive 3.0 之后默认开启ACID功能,而且新建的表默认是 ACID 表。而 spark 目前还不支持 hive 的 ACID 功能,因此无法读取 ACID 表的数据:issues.apache.org/jira/browse…

解决方案

修改以下参数让新建的表默认不是 acid 表。

hive.strict.managed.tables=false
hive.create.as.insert.only=false
metastore.create.as.acid=false

在advanced hive-site.xml里面找,找不到搜一下:

image-20221105031856456

image-20221105032001895

image-20221105032034127

改完更新配置。