Ambari 安装部署教程

4,035 阅读8分钟

关于 Ambari 安装还有另外一篇比较新的,而且是离线安装

一、简介

Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop和Hcatalog等的集中管理。也是5个顶级hadoop管理工具之一。

来源于 百度百科

二、安装部署

参考文献(都有下载安装包的方法,官方已经收费了):

【Ambari安装】blog.csdn.net/qq_45317278…

【Ambari安装】blog.csdn.net/AnameJL/art…

【Kerberos配置】cloud.tencent.com/developer/a…

【Kerberos配置】segmentfault.com/a/119000002…

【CentOS7安装】www.win7zhijia.cn/win10jc/win…

版本信息:CentOS7 + Ambari2.7.0 + HDP3.1.4

2.1 集群环境准备

2.1.1 集群规划

机器MySQLAmbariNNDNNMRMYARNZKKafkaHBaseHivePhoenix
hdp01(主节点)☑️☑️☑️☑️☑️
hdp02☑️☑️☑️☑️☑️
hdp03☑️☑️☑️☑️☑️☑️☑️☑️

2.1.2 CentOS7 虚拟机安装

准备3台CentOS7虚拟机【设置root密码为 bigdata】(以下步骤可以先在1台机器操作,然后克隆3台,最后再修改IP)

  1. 进入安装程序

    image-20220324194709932

  2. 选择语言

    image-20220324194722534

  3. 磁盘设置

    image-20220324194743776

    image-20220324194806240

    image-20220324194819803

    设交换空间一般是内存2倍,然后还推荐一个数据分区 /data,剩余都是 / :

    image-20220324194829182

    image-20220324194839402

  4. 时区忘记选了!改成上海!

  5. 选择软件安装

    image-20220324194848689

    image-20220324194859499

  6. 设置root用户密码(bigdata

    image-20220324194917152

  7. 等待安装完成

    image-20220324194949249

2.1.3 虚拟机环境设置(IP、hosts、JDK8、FQDN)

准备3台CentOS7虚拟机(我用的是VMware15Pro)【设置root密码为 bigdata】(以下步骤可以先在1台机器操作,然后克隆3台,最后再修改IP)

  1. 配置网卡

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
    #修改配置文件
    BOOTPROTO=static
    ONBOOT=yes
    
    #添加以下内容
    IPADDR=192.168.174.51
    NETMASK=255.255.255.0
    GATEWAY=192.168.174.2
    DNS1=8.8.8.8
    

    不知道如何填值的可以参考:blog.csdn.net/u013189545/…

  2. 重新启动网络配置

    service network restart
    
  3. 测试网络是否畅通(本地PING 虚拟机IP)

  4. 更改主机名

    hostnamectl set-hostname hdp01
    
  5. 配置FQDN(所有节点)

    vim /etc/sysconfig/network
    
    NETWORKING=yes
    
    # hdp0*.bigdata.com 不同机器使用不同内容
    HOSTNAME=hdp01.bigdata.com
    

    FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。(通过符号“.”)例如:主机名是bigserver,域名是mycompany.com,那么FQDN就是bigserver.mycompany.com。全限定域名可以从逻辑上准确地表示出主机在什么地方

  6. 更改hosts,添加主机映射

    vi /etc/hosts
    
    192.168.174.51 hdp01.bigdata.com hdp01
    192.168.174.52 hdp02.bigdata.com hdp02
    192.168.174.53 hdp03.bigdata.com hdp03
    
  7. 关闭防火墙

    # 关闭防火墙
    systemctl stop firewalld
    # 关闭防火墙开机自启
    systemctl disable firewalld
    # 通过此命令查看防火墙状态
    systemctl status firewalld
    
  8. 关闭SELINUX

    # 关闭SELINUX(master node)
    setenforce 0
    
    vi /etc/selinux/config
    
    # SELINUX=enforcing修改为
    SELINUX=disabled
    
  9. 安装JDK8

    • 上传并解压压缩包

      tar -zxf /data/tars/jdk-8u251-linux-x64.tar.gz -C /opt/jdk1.8.0_251
      
    • 配置环境变量

      vi /etc/profile
      
      export JAVA_HOME=/opt/jdk1.8.0_251
      export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$JAVA_HOME/bin:$PATH
      
    • 更新配置

      source /etc/profile
      
    • 验证

      [root@hdp01 opt]# 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)
      
  10. 安装一些其他工具(可选)

    yum install -y vim
    
  11. **拷贝该虚拟机,创建另2台。**分别修改其主机名,以及网卡中的IP,然后重启服务。最后测试ping通不通

    hostnamectl set-hostname hdp02
    hostnamectl set-hostname hdp03
    
    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    IPADDR=192.168.174.52
    IPADDR=192.168.174.53
    
    service network restart
    
  12. Check the Maximum Open File Descriptors(所有节点)

    ulimit -Sn
    ulimit -Hn
    
    # 如果以上命令显示数量小于10000,建议调成10000(公司是65535,这里是虚拟机就写少一点吧)
    ulimit -n 10000
    

2.1.4 SSH 免密登陆配置

  1. 各个机器执行

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  2. 把各个主机上公钥id_rsa.pub文件内容放到各个主机authorized_keys中

    # hdp01
    scp ~/.ssh/id_rsa.pub root@192.168.174.52:/root/.ssh/id_rsa.pub.hdp01
    scp ~/.ssh/id_rsa.pub root@192.168.174.53:/root/.ssh/id_rsa.pub.hdp01
    
    # hdp02
    scp ~/.ssh/id_rsa.pub root@192.168.174.51:/root/.ssh/id_rsa.pub.hdp02
    scp ~/.ssh/id_rsa.pub root@192.168.174.53:/root/.ssh/id_rsa.pub.hdp02
    
    # hdp03
    scp ~/.ssh/id_rsa.pub root@192.168.174.52:/root/.ssh/id_rsa.pub.hdp03
    scp ~/.ssh/id_rsa.pub root@192.168.174.51:/root/.ssh/id_rsa.pub.hdp03
    
    # hdp01
    cat ~/.ssh/id_rsa.pub.hdp02 >> ~/.ssh/authorized_keys
    cat ~/.ssh/id_rsa.pub.hdp03 >> ~/.ssh/authorized_keys
    
    # hdp02
    cat ~/.ssh/id_rsa.pub.hdp01 >> ~/.ssh/authorized_keys
    cat ~/.ssh/id_rsa.pub.hdp03 >> ~/.ssh/authorized_keys
    
    # hdp03
    cat ~/.ssh/id_rsa.pub.hdp02 >> ~/.ssh/authorized_keys
    cat ~/.ssh/id_rsa.pub.hdp01 >> ~/.ssh/authorized_keys
    
  3. 测试是否可以相互SSH成功

    ssh hdp01
    exit
    ssh hdp02
    exit
    ssh hdp03
    exit
    

2.1.5 时间同步

选一台服务器作时间服务器,这里以 hdp01 作为时间服务器,其他服务器以时间服务器时间为准。

hdp01(时间服务器)

  1. 安装 ntp 服务

    yum install -y ntp
    
  2. 修改 ntp 配置文件

    vim /etc/ntp.conf
    
    # 根据自己机器的情况,设置允许 hdp02 和 hdp03 机器可以从这台机器上查询和同步时间
    restrict hdp02 mask 255.255.255.0 nomodify notrap
    restrict hdp03 mask 255.255.255.0 nomodify notrap
    
    # 注释以下代码
    #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
    
    # 添加(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    
  3. 启动ntp服务并设置开机自启

    # 启动ntpd服务
    systemctl start ntpd
    # 配置ntpd服务开机自启
    systemctl enable ntpd
    

hdp02、hdp03

  1. 安装 ntpdate 服务

    yum install -y ntpdate
    
  2. 同步时间

    ntpdate hdp01
    
  3. 定时同步时间

    crontab -e
    
    # 添加如下内容
    
    # 每小时的第29分和59分同步一次时间
    29,59 * * * * /usr/sbin/ntpdate hdp01
    

2.1.6 安装 http 服务

这里将 hdp01 作为 http 服务器。

# 安装服务
yum -y install httpd
# 启动服务
systemctl start httpd
# 将httpd加入到开机自启
systemctl enable httpd

2.1.7 配置 yum 源

  1. 将Amber、HDP、HDP-UTILS文件上传到 hdp01 ,并解压

    # 先在/var/www/html目录下创建ambari、hdp、hdp-utils文件夹
    mkdir /var/www/html/ambari
    mkdir /var/www/html/hdp
    mkdir /var/www/html/hdp-utils
    
    # 解压文件
    tar -zxvf /data/tars/ambari-2.7.4.0-centos7.tar.gz -C /var/www/html/ambari/
    tar -zxvf /data/tars/HDP-3.1.4.0-centos7-rpm.tar.gz -C /var/www/html/hdp/
    tar -zxvf /data/tars/HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/hdp-utils/
    
  2. 配置ambari的yum源

    vi /etc/yum.repos.d/ambari.repo
    
    # 添加以下内容
    [ambari]
    name=ambari
    baseurl=http://192.168.174.51/ambari/ambari/centos7/2.7.4.0-118/
    gpgcheck=0
    
  3. 配置hdp和hdp-utils的yum源

    vi /etc/yum.repos.d/hdp.repo
    
    # 添加以下内容
    [HDP-3.1]
    name=HDP-3.1
    baseurl=http://192.168.174.51/hdp/HDP/centos7/3.1.4.0-315/
    gpgcheck=0
    [HDP-UTILS-1.1.0.22]
    name=HDP-UTILS-1.1.0.22
    baseurl=http://192.168.174.51/hdp-utils/HDP-UTILS/centos7/1.1.0.22/
    gpgcheck=0
    
  4. 验证

    yum repolist
    
  5. 分发 yum 文件到 hdp02 和 hdp03

    scp /etc/yum.repos.d/ambari.repo hdp02:/etc/yum.repos.d/
    scp /etc/yum.repos.d/hdp.repo hdp02:/etc/yum.repos.d/
    
    scp /etc/yum.repos.d/ambari.repo hdp03:/etc/yum.repos.d/
    scp /etc/yum.repos.d/hdp.repo hdp03:/etc/yum.repos.d/
    

2.2 安装 MySQL(docker)

由于安装mysql太麻烦了,直接用docker安装了。

2.2.1 docker 安装

  1. 卸载旧版本

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    
  2. 安装需要的包

    yum install -y yum-utils
    
  3. 更换阿里云仓库镜像下载docker

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 安装最新版

    yum install docker-ce docker-ce-cli containerd.io
    
  5. 启动dockers

    systemctl start docker
    
  6. 设置开机启动

    systemctl enable docker
    
  7. 查看版本

    docker version
    

2.2.2 安装MySQL

  1. 获取镜像

    docker pull mysql:5.7
    
  2. 配置参数启动(用户名为 root,密码为 bigdata

    docker run --name bigdata-mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=bigdata mysql:5.7
    
  3. 使用第三方工具连接成功

  4. 机器重启后,启动mysql容器

    docker ps -a
    docker start 容器ID
    

2.3 安装 Ambari

2.3.1 安装 ambari-server

yum install -y ambari-server

2.3.2 配置数据库

  1. 获得容器ID

    [root@hdp01 resources]# docker ps
    CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
    3a9bfe6db804   mysql:5.7   "docker-entrypoint.s⋯"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   bigdata-mysql
    
  2. 上传SQL脚本文件到mysql-docker中

    docker cp /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql 3a9bfe6db804:/
    
  3. 进入容器,并操作

    docker exec -it 3a9bfe6db804 /bin/bash
    root@3a9bfe6db804:/# mkdir sqls
    root@3a9bfe6db804:/# mv Ambari-DDL-MySQL-CREATE.sql /sqls/
    
    # 登录数据库
    root@3a9bfe6db804:/# mysql -uroot -pbigdata
    # 创建amabri数据库
    mysql>  create database ambari;
    # 创建ambari用户
    mysql>  CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambari';
    #授权
    mysql>  grant all on ambari.* to ambari@'%' identified by 'ambari';
    mysql>  grant all on ambari.* to ambari@localhost identified by 'ambari';
    # 使用ambari-server提供的sql脚本创建相关的表
    mysql>  use ambari;
    mysql>  source /sqls/Ambari-DDL-MySQL-CREATE.sql
    

2.3.3 配置 JDBC 驱动包

  1. 上传驱动包

    可以去网上搜一个,这里要注意一开始我用的是 mysql-connector-java-5.1.38.jar ,这个驱动包在后续会有一些问题,虽然说网上说可以通过添加URL连接参数解决,但是我并没有解决,最终还是换了一个驱动包,如果找不到的话,可以从这里下载:picgo-wbw.oss-cn-hangzhou.aliyuncs.com/software/my…

  2. 放到指定位置

    mkdir -p /usr/share/java
    mv /data/tars/mysql-connector-java.jar /usr/share/java/
    

2.3.4 配置 ambari-server

# 配置(直接执行命令)
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
Enter user account for ambari-server daemon (root):
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)? 
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): 3  <!--选择安装的MySQL-->
Hostname (localhost): hdp01  <!--主机名-->
Port (3306): 
Database name (ambari): 
Username (ambari): 
Enter Database Password (bigdata): <!--密码:ambari-->
Re-enter password: 
Configuring ambari database...
Enter full path to custom jdbc driver: /usr/share/java/mysql-connector-java.jar
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-MySQL-CREATE.sql
Proceed with configuring remote database connection properties [y/n] (y)? 
Extracting system views...
ambari-admin-2.7.4.0.118.jar
....
Ambari repo file doesn't contain latest json url, skipping repoinfos modification
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.

2.3.5 启动 ambari-server

ambari-server start

访问WEB:

http://192.168.174.51:8080

2.3.6 安装配置 ambari-agent

在所有机器上进行下面操作:

# 安装ambari-agent
yum -y install ambari-agent
# 配置
vi /etc/ambari-agent/conf/ambari-agent.ini

# 修改(所有机器都是 hdp01)
[server]
hostname=hdp01
#启动
ambari-agent start

2.4 HDP 部署

  1. 登陆 http://192.168.174.51:8080 (账号密码都是:admin

    image-20220325003453319

  2. 创建集群

    image-20220325003721775

  3. 设置集群名字

    image-20220325003922272

  4. 选择HDP-3.1版本

    image-20220325004108695

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

    image-20220325005233189

  6. 配置HDP和HDP-UTILS的rpm到URL地址

    http://hdp01/hdp/HDP/centos7/3.1.4.0-315/
    http://hdp01/hdp-utils/HDP-UTILS/centos7/1.1.0.22/
    

    image-20220325005333796

  7. 配置集群主机节点

    image-20220325035241769

    image-20220325035458171

  8. 选择需要安装的大数据组件,然后点下一步(其中 Ambari Metrics 是用来监控机器状态)

    image-20220325010922144

  9. 选择每个节点具体安装的组件

    image-20220325035804924

    image-20220325015453447

  10. 设置服务对应的密码(这里的hive应该是hive元数据存放的地方,即数据库中的用户名密码)

    image-20220325013710543

  11. 具体设置hive元数据存放位置(这里新建一个库来放)

    docker exec -it 3a9bfe6db804 /bin/bash
    
    # 登录数据库
    root@3a9bfe6db804:/# mysql -uroot -pbigdata
    # 创建hive元数据库
    mysql>  create database hive;
    # 创建hive用户
    mysql>  CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
    #授权
    mysql>  grant all on hive.* to hive@'%' identified by 'hive';
    mysql>  grant all on hive.* to hive@localhost identified by 'hive';
    

    image-20220325035938812

  12. 设置大数据配置(这里主要吧数据文件路径写到 /data 下,这里仅举例部分)

    image-20220325020526339

    image-20220325021404893

    ![image-20220325021537794](/../../../../../Library/Application Support/typora-user-images/image-20220325021537794.png)

    image-20220325021724997

    image-20220325031900790

    image-20220325021744124

  13. 直接下一步(接受Ambari来管理用户)

    image-20220325021909110

  14. 直接下一步默认,设置以后再说

    image-20220325022030989

  15. 部署、等待安装完成

    image-20220325032114909

    image-20220325040423825

    image-20220329002125066

三、 配置 Kerberos

3.1 安装 JCE

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

由于JCE对应着JDK的版本,而本例采用JDK8,因此去该地址下载:www.oracle.com/technetwork…

# 将下载的 jce_policy-8.zip 上传到所有节点
# 并在所有Ambari节点运行一下内容
unzip -o -j -q jce_policy-8.zip -d $JAVA_HOME/jre/lib/security

# 最后重启服务
ambari-server restart

3.2 安装 krb5

这里选择hdp02作为KDC服务,hdp01任务有点重了

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

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

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

3.3 配置 Kerberos 配置文件

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

修改 krb5.conf

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 = hdp02.bigdata.com
  admin_server = hdp02.bigdata.com
 }

# 注释放开,且与上面一致
[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

vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

# 这里要和之前的一致!
[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

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…

3.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数据库
    kadmin.local
    # 创建admin/admin管理员
    addprinc admin/admin
    
    [root@hdp02 tars]# kadmin.local
    Authenticating as principal root/admin@BIGDATA.COM with password.
    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管理服务器,并使其开机自启动

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

3.5 Ambari向导

  1. 点击开启

    image-20220329002327896

  2. 选择模式

    image-20220329002457694

  3. KDC 、Kadmin 验证

    image-20220329014227738

  4. 测试 kerberos 客户端

    image-20220329014705426

  5. 一路 NEXT 直到结束

3.6 Kerberos 票据相关操作

  1. kadmin.localkadmin以下操作都在该控制台中执行

    kadmin.local和kadmin至于用哪个,取决于账户和访问权限: kadmin.local(on the KDC machine)or kadmin (on others machine) 如果有访问kdc服务器的root权限,但是没有kerberos admin账户,使用kadmin.local 如果没有访问kdc服务器的root权限,但是有kerberos admin账户,使用kadmin

  2. 添加票据

    # 添加票据
    addprinc -randkey test/hdp02.bigdata.com@BIGDATA.COM
    # 生成keytab文件
    xst -norandkey -k /etc/security/keytabs/test.service.keytab test/hdp02.bigdata.com@BIGDATA.COM
    
  3. 获取票据信息

    kadmin.local:  getprinc test/hdp02.bigdata.com@BIGDATA.COM
    Principal: test/hdp02.bigdata.com@BIGDATA.COM
    Expiration date: [never]
    Last password change: Tue Mar 29 10:40:07 CST 2022
    Password expiration date: [never]
    Maximum ticket life: 1 day 00:00:00
    Maximum renewable life: 0 days 00:00:00
    Last modified: Tue Mar 29 10:40:07 CST 2022 (root/admin@BIGDATA.COM)
    Last successful authentication: [never]
    Last failed authentication: [never]
    Failed password attempts: 0
    Number of keys: 8
    Key: vno 1, aes256-cts-hmac-sha1-96
    Key: vno 1, aes128-cts-hmac-sha1-96
    Key: vno 1, des3-cbc-sha1
    Key: vno 1, arcfour-hmac
    Key: vno 1, camellia256-cts-cmac
    Key: vno 1, camellia128-cts-cmac
    Key: vno 1, des-hmac-sha1
    Key: vno 1, des-cbc-md5
    MKey: vno 1
    Attributes:
    Policy: [none]
    
  4. 列出KDC所有票据

    listprincs
    
  5. 删除票据

    delprinc test/hdp02.bigdata.com@BIGDATA.COM
    
  6. 修改属性

    modprinc -maxlife 30days test/hdp02.bigdata.com@BIGDATA.COM
    
  7. 缓存票据(这个在Linux下执行

    klist -k -t /etc/security/keytabs/test.service.keytab
    
    kinit -k -t /etc/security/keytabs/test.service.keytab test/hdp02.bigdata.com@BIGDATA.COM
    
  8. 更新票据

    kinit -R
    
  9. 查看或者删除用户缓存的票据

    klist
    kdestroy
    
  10. 合并票据

    ktutil
    
    ktutil: rkt test.service.keytab
    ktutil: rkt test1.service.keytab
    ktutil: wkt test-test1.service.keytab
    

3.7 Client 访问 Kerberos 集群

HDP已经为集群生成了大量票据和keytab,可以直接使用的,对应的文件在该路径下:

/etc/security/keytabs/

在3台机器上分别创建 test 用户,密码为 test,然后修改 /etc/security/keytabs/test.service.keytab 权限并发送至另外两台机器(其实哪一台需要用到客户端就给哪一台就好了):

chmod a+r test.service.keytab
scp test.service.keytab root@hdp01:/etc/security/keytabs/
scp test.service.keytab root@hdp03:/etc/security/keytabs/

3台机器在 test 用户下都进行认证:

kinit -k -t /etc/security/keytabs/test.service.keytab test/hdp02.bigdata.com@BIGDATA.COM

认证前:

[test@hdp03 ~]$ hdfs dfs -ls /
22/03/29 14:56:19 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
ls: DestHost:destPort hdp01.bigdata.com:8020 , LocalHost:localPort hdp01.bigdata.com/192.168.174.51:0. Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]

认证后:

[test@hdp03 ~]$ hdfs dfs -ls /
Found 11 items
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:32 /amshbase
drwxrwxrwt   - yarn   hadoop          0 2022-03-25 04:26 /app-logs
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:32 /apps
drwxr-xr-x   - yarn   hadoop          0 2022-03-25 04:26 /ats
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:26 /atsv2
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:26 /hdp
drwxr-xr-x   - mapred hdfs            0 2022-03-25 04:26 /mapred
drwxrwxrwx   - mapred hadoop          0 2022-03-25 04:29 /mr-history
drwxrwxrwx   - hdfs   hdfs            0 2022-03-29 01:56 /tmp
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:32 /user
drwxr-xr-x   - hdfs   hdfs            0 2022-03-25 04:32 /warehouse

3.8 Kerberos 访问 HBase 集群

如果是自己后面创建的 kerberos 凭证,那么访问 HBase 进行操作的时候,会有权限问题:

hbase(main):002:0> create_namespace 'ns1'

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

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

  1. 切换到 hbase 用户

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

    [hbase@hdp02 keytabs]$ klist -kt 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
    [hbase@hdp02 keytabs]$ kinit -kt hbase.headless.keytab hbase-bigdata@BIGDATA.COM
    
  3. 进入 hbase shell 并授权

    hbase shell
    
    hbase(main):001:0> grant 'test', 'RWXCA'
    
  4. 回到 test 用户,进行 hbase 操作

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