关于 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 集群规划
| 机器 | MySQL | Ambari | NN | DN | NM | RM | YARN | ZK | Kafka | HBase | Hive | Phoenix |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hdp01(主节点) | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | |||||||
| hdp02 | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | |||||||
| hdp03 | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ | ☑️ |
2.1.2 CentOS7 虚拟机安装
准备3台CentOS7虚拟机【设置root密码为 bigdata】(以下步骤可以先在1台机器操作,然后克隆3台,最后再修改IP)
-
进入安装程序
-
选择语言
-
磁盘设置
设交换空间一般是内存2倍,然后还推荐一个数据分区
/data,剩余都是/: -
时区忘记选了!改成上海!
-
选择软件安装
-
设置root用户密码(
bigdata) -
等待安装完成
2.1.3 虚拟机环境设置(IP、hosts、JDK8、FQDN)
准备3台CentOS7虚拟机(我用的是VMware15Pro)【设置root密码为 bigdata】(以下步骤可以先在1台机器操作,然后克隆3台,最后再修改IP)
-
配置网卡
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/…
-
重新启动网络配置
service network restart -
测试网络是否畅通(本地PING 虚拟机IP)
-
更改主机名
hostnamectl set-hostname hdp01 -
配置FQDN(所有节点)
vim /etc/sysconfig/networkNETWORKING=yes # hdp0*.bigdata.com 不同机器使用不同内容 HOSTNAME=hdp01.bigdata.comFQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。(通过符号“.”)例如:主机名是bigserver,域名是mycompany.com,那么FQDN就是bigserver.mycompany.com。全限定域名可以从逻辑上准确地表示出主机在什么地方
-
更改hosts,添加主机映射
vi /etc/hosts192.168.174.51 hdp01.bigdata.com hdp01 192.168.174.52 hdp02.bigdata.com hdp02 192.168.174.53 hdp03.bigdata.com hdp03 -
关闭防火墙
# 关闭防火墙 systemctl stop firewalld # 关闭防火墙开机自启 systemctl disable firewalld # 通过此命令查看防火墙状态 systemctl status firewalld -
关闭SELINUX
# 关闭SELINUX(master node) setenforce 0vi /etc/selinux/config # SELINUX=enforcing修改为 SELINUX=disabled -
安装JDK8
-
上传并解压压缩包
tar -zxf /data/tars/jdk-8u251-linux-x64.tar.gz -C /opt/jdk1.8.0_251 -
配置环境变量
vi /etc/profileexport 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)
-
-
安装一些其他工具(可选)
yum install -y vim -
**拷贝该虚拟机,创建另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 -
Check the Maximum Open File Descriptors(所有节点)
ulimit -Sn ulimit -Hn # 如果以上命令显示数量小于10000,建议调成10000(公司是65535,这里是虚拟机就写少一点吧) ulimit -n 10000
2.1.4 SSH 免密登陆配置
-
各个机器执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys -
把各个主机上公钥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 -
测试是否可以相互SSH成功
ssh hdp01 exit ssh hdp02 exit ssh hdp03 exit
2.1.5 时间同步
选一台服务器作时间服务器,这里以 hdp01 作为时间服务器,其他服务器以时间服务器时间为准。
hdp01(时间服务器)
-
安装 ntp 服务
yum install -y ntp -
修改 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 -
启动ntp服务并设置开机自启
# 启动ntpd服务 systemctl start ntpd # 配置ntpd服务开机自启 systemctl enable ntpd
hdp02、hdp03
-
安装 ntpdate 服务
yum install -y ntpdate -
同步时间
ntpdate hdp01 -
定时同步时间
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 源
-
将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/ -
配置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 -
配置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 -
验证
yum repolist -
分发 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 安装
-
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine -
安装需要的包
yum install -y yum-utils -
更换阿里云仓库镜像下载docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
安装最新版
yum install docker-ce docker-ce-cli containerd.io -
启动dockers
systemctl start docker -
设置开机启动
systemctl enable docker -
查看版本
docker version
2.2.2 安装MySQL
-
获取镜像
docker pull mysql:5.7 -
配置参数启动(用户名为
root,密码为bigdata)docker run --name bigdata-mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=bigdata mysql:5.7 -
使用第三方工具连接成功
-
机器重启后,启动mysql容器
docker ps -a docker start 容器ID
2.3 安装 Ambari
2.3.1 安装 ambari-server
yum install -y ambari-server
2.3.2 配置数据库
-
获得容器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 -
上传SQL脚本文件到mysql-docker中
docker cp /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql 3a9bfe6db804:/ -
进入容器,并操作
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 驱动包
-
上传驱动包
可以去网上搜一个,这里要注意一开始我用的是
mysql-connector-java-5.1.38.jar,这个驱动包在后续会有一些问题,虽然说网上说可以通过添加URL连接参数解决,但是我并没有解决,最终还是换了一个驱动包,如果找不到的话,可以从这里下载:picgo-wbw.oss-cn-hangzhou.aliyuncs.com/software/my… -
放到指定位置
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 部署
-
登陆 http://192.168.174.51:8080 (账号密码都是:
admin) -
创建集群
-
设置集群名字
-
选择HDP-3.1版本
-
删除掉除了"Redhat7"之外的其他操作系统(这里选择redhat7,因为是CentOS7系统)
-
配置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/ -
配置集群主机节点
-
选择需要安装的大数据组件,然后点下一步(其中
Ambari Metrics是用来监控机器状态) -
选择每个节点具体安装的组件
-
设置服务对应的密码(这里的hive应该是hive元数据存放的地方,即数据库中的用户名密码)
-
具体设置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'; -
设置大数据配置(这里主要吧数据文件路径写到
/data下,这里仅举例部分)
-
直接下一步(接受Ambari来管理用户)
-
直接下一步默认,设置以后再说
-
部署、等待安装完成
三、 配置 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.COMpermissions:* (*代表所有权限)
target_principal:选填
restrictions:选填
该文件可扩展,扩展链接:web.mit.edu/kerberos/kr…
3.4 设置 Kerberos
-
创建 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 -
创建管理员
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 -
启动KDC服务器和KDC管理服务器,并使其开机自启动
systemctl start krb5kdc systemctl start kadmin systemctl enable krb5kdc systemctl enable kadmin
3.5 Ambari向导
-
点击开启
-
选择模式
-
KDC 、Kadmin 验证
-
测试 kerberos 客户端
-
一路
NEXT直到结束
3.6 Kerberos 票据相关操作
-
kadmin.local与kadmin(以下操作都在该控制台中执行)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
-
添加票据
# 添加票据 addprinc -randkey test/hdp02.bigdata.com@BIGDATA.COM # 生成keytab文件 xst -norandkey -k /etc/security/keytabs/test.service.keytab test/hdp02.bigdata.com@BIGDATA.COM -
获取票据信息
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] -
列出KDC所有票据
listprincs -
删除票据
delprinc test/hdp02.bigdata.com@BIGDATA.COM -
修改属性
modprinc -maxlife 30days test/hdp02.bigdata.com@BIGDATA.COM -
缓存票据(这个在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 -
更新票据
kinit -R -
查看或者删除用户缓存的票据
klist kdestroy -
合并票据
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)
这时候,就需要自己去添加权限了:
-
切换到 hbase 用户
su hbase -
然后使用 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 -
进入
hbase shell并授权hbase shell hbase(main):001:0> grant 'test', 'RWXCA' -
回到
test用户,进行 hbase 操作hbase(main):005:0> create_namespace 'ns1' Took 0.6601 seconds