赞
踩
Kerberos是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。
Kerberos中有以下一些概念需要了解:
KDC(Key Distribute Center):密钥分发中心,负责存储用户信息,管理发放票据。
Realm:Kerberos所管理的一个领域或范围,包含 KDC 和许多客户端的 Kerberos 网络,称之为一个Realm。
Rrincipal:Kerberos所管理的一个用户或者一个服务,可以理解为Kerberos中保存的一个账号,其格式通常如下:primary**/**instance@realm(主名称、实例和领域)
主名称可以是此处所示的用户名或namenode等服务。
对于用户主体,实例是可选的;但对于服务主体,实例则是必需的。
例如,如果用户 joe
有时充当系统管理员,则他可以使用 joe/admin
将其自身与平时的用户身份区分开来。同样,如果 joe
在两台不同的主机上拥有帐户,则他可以使用两个具有不同实例的主体名称,例如 joe/node1.example.com
和 joe/node2.example.com
。请注意,Kerberos 服务会将 joe
和 joe/admin
视为两个完全不同的主体。
对于服务主体,实例是全限定主机名。例如,node1.example.com
就是这种实例。
keytab:Kerberos中的用户认证,可通过密码或者密钥文件证明身份,keytab指密钥文件。
KDC Admin Account:用于在KDC中创建主体并生成密钥表的管理帐户。
ticket:ticket是一种信息包,用于将用户身份安全地传递到服务器或服务。一个票证仅对一台客户机以及某台特定服务器上的一项特殊服务有效。票证包含以下内容:
所有此类数据都使用服务器的服务密钥进行加密。颁发票证之后,可重用票证直到其到期为止。
生命周期:每当主体获取包括票证授予票证 (Ticket–Granting Ticket, TGT) 在内的票证时,可以通过 kinit 的 -l 选项指定的生命周期值,前提是使用 kinit 获取票证。缺省情况下,kinit 使用最长生命周期值。kdc.conf 文件中指定的最长生命周期值 (max_life)。
可通过 kinit 的 -r 选项指定的可更新生命周期值,前提是使用 kinit 获取或更新票证。kdc.conf 文件中指定的最长可更新生命周期值 (max_renewable_life)。
credential(凭证):是一种信息包,其中包含票证和匹配的会话密钥。凭证使用发出请求的主体的密钥进行加密。通常,KDC 会生成凭证以响应客户机的票证请求。
authenticator(验证者):是服务器用于验证客户机用户主体的信息。 验证者包含用户的主体名称、时间标记和其他数据。 与票证不同,验证者只能使用一次,通常在请求访问服务时使用。 验证者使用客户机和服务器共享的会话密钥进行加密。 通常,客户机会创建验证者,并将其与服务器或服务的票证一同发送,以便向服务器或服务进行验证。
它有三个部分:
Kerberos 验证分为两个阶段:允许进行后续验证的初始验证以及所有后续验证自身。
(1)客户端与 Authentication Service
客户端通过kinit USERNAME
或其他方式,将客户端ID, 目标HTTP服务ID, 网络地址(可能是多个机器的IP地址列表,如果想在任何机器上使用,则可能为空),以及TGT有效期的寿命等信息发送给 Authentication Service。
Authentication Server 将检查客户端ID是否在KDC数据库中。
如果 Authentication Server 检查操作没有异常,那么KDC将随机生成一个 key,用于客户端与 Ticket Granting Service(TGS) 通信。这个Key,一般被称为 TGS Session Key。随后 Authentication Server 将发送两条信息给客户端。
客户端利用本地的密钥解密出第二条信息。如果本地密钥无法解密出信息,那么认证失败。
拥有有效的 TGT,只要该 TGT 未到期,客户机便可以请求所有类型的网络操作(如 rlogin 或 telnet)的票证。此票证的有效期通常为一天。每次客户端执行唯一的网络操作时,都将从 KDC 请求该操作的票证。
(2)客户端与 Ticket Granting Service
这时候,客户端有了 TGT(由于本地没有TGS的密钥,导致无法解密出其数据)与 TGS Session Key。
客户机通过向 TGS 发送其 TGT 作为其身份证明,并将包含自身信息的Authenticator(由TGS Session Key加密)发送给TGS。
TGS 将利用 自身的密钥从TGT中解密出TGS Session Key,然后利用TGS Session Key从Authenticator 中解密出客户端的信息。
TGS 解密出所有信息后,将进行身份检查,进行认证:
当所有检查都通过后, TGS 随机生成一个 Key 用于后续客户端与 HTTP 服务交互时进行通信加密使用,即 HTTP Session Key。同样地,TGS 将发送两条信息给客户端:
客户端将利用TGS Session Key解密出其中一条信息,另一条信息由于是由目标HTTP服务加密,无法解密。
(3)客户端与 HTTP Service
这时候,客户端有了HTTP Ticket(由于本地没有HTTP服务的密钥,导致无法解密出其数据)与 HTTP Session Key。
“无脑”将 AS 发送过来的 HTTP Ticket(由HTTP 密钥加密)转发给目标 http 服务。
将包含自身信息的Authenticator(由HTTP Session Key加密)发送给 http 服务。
HTTP服务首先利用自身的密钥解密出 HTTP Ticket 的信息,得到 HTTP Session Key;随后,利用HTTP Session Key解密出用户的Authenticator信息。
信息解密完成后,HTTP 服务同样需要做一些信息检查:
至此,所有的认证过程通过,客户端即可与远程HTTP服务完成了身份认证,可以进行后续的信息通信。
优点:
缺点:
选择集群中的一台主机(hadoop102)作为Kerberos服务端,安装KDC,所有主机都需要部署Kerberos客户端。
服务端主机执行以下安装命令
[root@hadoop102 ~]# yum install -y krb5-server
客户端主机执行以下安装命令
[root@hadoop102 ~]# yum install -y krb5-workstation krb5-libs
[root@hadoop103 ~]# yum install -y krb5-workstation krb5-libs
[root@hadoop104 ~]# yum install -y krb5-workstation krb5-libs
(1)服务端主机(hadoop102)
修改/var/kerberos/krb5kdc/kdc.conf文件,内容如下
[root@hadoop102 ~]# vim /var/kerberos/krb5kdc/kdc.conf
修改如下内容
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.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
}
(2)客户端主机(所有主机)
修改/etc/krb5.conf文件
[root@hadoop102 ~]# vim /etc/krb5.conf
[root@hadoop103 ~]# vim /etc/krb5.conf
[root@hadoop104 ~]# vim /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 dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt default_realm = EXAMPLE.COM #default_ccache_name = KEYRING:persistent:%{uid} [realms] EXAMPLE.COM = { kdc = hadoop102 admin_server = hadoop102 # admin_server是一个服务,往数据库中读写数据。比如注册一个新用户,就必须访问admin_server。 } [domain_realm] # .example.com = EXAMPLE.COM # example.com = EXAMPLE.COM
在服务端主机(hadoop102)执行以下命令,并根据提示输入密码。
[root@hadoop102 ~]# kdb5_util create -s
在服务端主机(hadoop102)修改/var/kerberos/krb5kdc/kadm5.acl文件,内容如下:
*/admin@EXAMPLE.COM *
在主节点(hadoop102)启动KDC,并配置开机自启:
[root@hadoop102 ~]# systemctl start krb5kdc
[root@hadoop102 ~]# systemctl enable krb5kdc
在主节点(hadoop102)启动Kadmin,该服务为KDC数据库访问入口:
[root@hadoop102 ~]# systemctl start kadmin
[root@hadoop102 ~]# systemctl enable kadmin
在KDC所在主机(hadoop102),执行以下命令,并按照提示输入密码
[root@hadoop102 ~]# kadmin.local -q "addprinc admin/admin"
(1)登录数据库
本地登录(无需认证)
[root@hadoop102 ~]# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local:
远程登录(需进行主体认证,认证操作见下文)
[root@hadoop102 ~]# kadmin
Authenticating as principal admin/admin@EXAMPLE.COM with password.
Password for admin/admin@EXAMPLE.COM:
kadmin:
退出输入:exit
(2)创建Kerberos主体
登录数据库,输入以下命令,并按照提示输入密码
kadmin.local: addprinc test
也可通过以下shell命令直接创建主体
[root@hadoop102 ~]# kadmin.local -q"addprinc test"
(3)修改主体密码
kadmin.local :cpw test
(4)查看所有主体
kadmin.local: list_principals
K/M@EXAMPLE.COM
admin/admin@EXAMPLE.COM
kadmin/admin@EXAMPLE.COM
kadmin/changepw@EXAMPLE.COM
kadmin/hadoop105@EXAMPLE.COM
kiprop/hadoop105@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM
(1)密码认证
使用kinit进行主体认证,并按照提示输入密码
[root@hadoop102 ~]# kinit test
Password for test@EXAMPLE.COM:
查看认证凭证
[root@hadoop102 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@EXAMPLE.COM
Valid starting Expires Service principal
10/27/2019 18:23:57 10/28/2019 18:23:57 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 11/03/2019 18:23:57
(2)密钥文件认证
生成主体test的keytab文件到指定目录/root/test.keytab
[root@hadoop102 ~]# kadmin.local -q "xst -norandkey -k /root/test.keytab test@EXAMPLE.COM"
注:-norandkey的作用是声明不随机生成密码,若不加该参数,会导致之前的密码失效。
使用keytab进行认证
[root@hadoop102 ~]# kinit -kt /root/test.keytab test
查看认证凭证
[root@hadoop102 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@EXAMPLE.COM
Valid starting Expires Service principal
08/27/19 15:41:28 08/28/19 15:41:28 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 08/27/19 15:41:28
(3)销毁凭证
[root@hadoop102 ~]# kdestroy
[root@hadoop102 ~]# klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
为Hadoop开启Kerberos,需为不同服务准备不同的用户,启动服务时需要使用相应的用户。须在所有节点创建以下用户和用户组。
User:Group | Daemons |
---|---|
hdfs:hadoop | NameNode, Secondary NameNode, JournalNode, DataNode |
yarn:hadoop | ResourceManager, NodeManager |
mapred:hadoop | MapReduce JobHistory Server |
创建hadoop组
[root@hadoop102 ~]# groupadd hadoop
[root@hadoop103 ~]# groupadd hadoop
[root@hadoop104 ~]# groupadd hadoop
创建各用户并设置密码
[root@hadoop102 ~]# useradd hdfs -g hadoop [root@hadoop102 ~]# echo hdfs | passwd --stdin hdfs [root@hadoop102 ~]# useradd yarn -g hadoop [root@hadoop102 ~]# echo yarn | passwd --stdin yarn [root@hadoop102 ~]# useradd mapred -g hadoop [root@hadoop102 ~]# echo mapred | passwd --stdin mapred [root@hadoop103 ~]# useradd hdfs -g hadoop [root@hadoop103 ~]# echo hdfs | passwd --stdin hdfs [root@hadoop103 ~]# useradd yarn -g hadoop [root@hadoop103 ~]# echo yarn | passwd --stdin yarn [root@hadoop103 ~]# useradd mapred -g hadoop [root@hadoop103 ~]# echo mapred | passwd --stdin mapred [root@hadoop104 ~]# useradd hdfs -g hadoop [root@hadoop104 ~]# echo hdfs | passwd --stdin hdfs [root@hadoop104 ~]# useradd yarn -g hadoop [root@hadoop104 ~]# echo yarn | passwd --stdin yarn [root@hadoop104 ~]# useradd mapred -g hadoop [root@hadoop104 ~]# echo mapred | passwd --stdin mapred
主体格式如下:ServiceName/HostName@REALM,例如 dn/hadoop102@EXAMPLE.COM
(1)各服务所需主体如下
环境:3台节点,主机名分别为hadoop102,hadoop103,hadoop104
服务 | 所在主机 | 主体(Principal) |
---|---|---|
NameNode | hadoop102 | nn/hadoop102 |
DataNode | hadoop102 | dn/hadoop102 |
DataNode | hadoop103 | dn/hadoop103 |
DataNode | hadoop104 | dn/hadoop104 |
Secondary NameNode | hadoop104 | sn/hadoop104 |
ResourceManager | hadoop103 | rm/hadoop103 |
NodeManager | hadoop102 | nm/hadoop102 |
NodeManager | hadoop103 | nm/hadoop103 |
NodeManager | hadoop104 | nm/hadoop104 |
JobHistory Server | hadoop102 | jhs/hadoop102 |
Web UI | hadoop102 | HTTP/hadoop102 |
Web UI | hadoop103 | HTTP/hadoop103 |
Web UI | hadoop104 | HTTP/hadoop104 |
(2)创建主体说明
1)路径准备
为服务创建的主体,需要通过密钥文件keytab文件进行认证,故需为各服务准备一个安全的路径用来存储keytab文件。
[root@hadoop102 ~]# mkdir /etc/security/keytab/
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop102 ~]# chmod 770 /etc/security/keytab/
2)管理员主体认证
为执行创建主体的语句,需登录Kerberos 数据库客户端,登录之前需先使用Kerberos的管理员用户进行认证,执行以下命令并根据提示输入密码。
[root@hadoop102 ~]# kinit admin/admin
3)登录数据库客户端
[root@hadoop102 ~]# kadmin
4)执行创建主体的语句
kadmin: addprinc -randkey test/test
kadmin: xst -k /etc/security/keytab/test.keytab test/test
说明:
addprinc test/test:作用是新建主体
addprinc:增加主体
-randkey:密码随机,因hadoop各服务均通过keytab文件认证,故密码可随机生成
test/test:新增的主体
xst -k /etc/security/keytab/test.keytab test/test:作用是将主体的密钥写入keytab文件
xst:将主体的密钥写入keytab文件
-k /etc/security/keytab/test.keytab:指明keytab文件路径和文件名
test/test:主体
为方便创建主体,可使用如下命令
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey test/test"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/test.keytab test/test"
-p:主体
-w:密码
-q:执行语句
操作主体的其他命令,可参考官方文档,地址如下:
http://web.mit.edu/kerberos/krb5-current/doc/admin/admin_commands/kadmin_local.html#commands
(3)创建主体
在所有节点创建keytab文件目录
[root@hadoop102 ~]# mkdir /etc/security/keytab/
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop102 ~]# chmod 770 /etc/security/keytab/
[root@hadoop103 ~]# mkdir /etc/security/keytab/
[root@hadoop103 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop103 ~]# chmod 770 /etc/security/keytab/
[root@hadoop104 ~]# mkdir /etc/security/keytab/
[root@hadoop104 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop104 ~]# chmod 770 /etc/security/keytab/
以下命令在hadoop102节点执行
NameNode(hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nn/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nn.service.keytab nn/hadoop102"
DataNode(hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop102"
NodeManager(hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop102"
JobHistory Server(hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey jhs/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/jhs.service.keytab jhs/hadoop102"
Web UI(hadoop102)
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop102"
以下命令在hadoop103执行:
ResourceManager(hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey rm/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/rm.service.keytab rm/hadoop103"
DataNode(hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop103"
NodeManager(hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop103"
Web UI(hadoop103)
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop103"
以下命令在hadoop104执行
DataNode(hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey dn/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop104"
Secondary NameNode(hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey sn/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/sn.service.keytab sn/hadoop104"
NodeManager(hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey nm/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop104"
Web UI(hadoop104)
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey HTTP/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop104"
修改所有节点keytab文件的所有者和访问权限
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/*
[root@hadoop103 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop103 ~]# chmod 660 /etc/security/keytab/*
[root@hadoop104 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop104 ~]# chmod 660 /etc/security/keytab/*
需要修改的内容如下,修改完毕需要分发所改文件。
(1)core-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml 增加以下内容 <!-- Kerberos主体到系统用户的映射机制 --> <property> <name>hadoop.security.auth_to_local.mechanism</name> <value>MIT</value> </property> <!-- Kerberos主体到系统用户的具体映射规则 --> <property> <name>hadoop.security.auth_to_local</name> <value> RULE:[2:$1/$2@$0]([ndj]n\/.*@EXAMPLE\.COM)s/.*/hdfs/ RULE:[2:$1/$2@$0]([rn]m\/.*@EXAMPLE\.COM)s/.*/yarn/ RULE:[2:$1/$2@$0](jhs\/.*@EXAMPLE\.COM)s/.*/mapred/ DEFAULT </value> </property> <!-- 启用Hadoop集群Kerberos安全认证 --> <property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <!-- 启用Hadoop集群授权管理 --> <property> <name>hadoop.security.authorization</name> <value>true</value> </property> <!-- Hadoop集群间RPC通讯设为仅认证模式 --> <property> <name>hadoop.rpc.protection</name> <value>authentication</value> </property>
注意:
RULE:[2:$1/$2@$0]([ndj]n\/.*@EXAMPLE\.COM)s/.*/hdfs/
2表示@前包含两个部分
DEFAULT 是默认规则,默认将principal的第一个component作为短名称输出
(2)hdfs-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml 增加以下内容 <!-- 访问DataNode数据块时需通过Kerberos认证 --> <property> <name>dfs.block.access.token.enable</name> <value>true</value> </property> <!-- NameNode服务的Kerberos主体,_HOST会自动解析为服务所在的主机名 --> <property> <name>dfs.namenode.kerberos.principal</name> <value>nn/_HOST@EXAMPLE.COM</value> </property> <!-- NameNode服务的Kerberos密钥文件路径 --> <property> <name>dfs.namenode.keytab.file</name> <value>/etc/security/keytab/nn.service.keytab</value> </property> <!-- Secondary NameNode服务的Kerberos主体 --> <property> <name>dfs.secondary.namenode.keytab.file</name> <value>/etc/security/keytab/sn.service.keytab</value> </property> <!-- Secondary NameNode服务的Kerberos密钥文件路径 --> <property> <name>dfs.secondary.namenode.kerberos.principal</name> <value>sn/_HOST@EXAMPLE.COM</value> </property> <!-- NameNode Web服务的Kerberos主体 --> <property> <name>dfs.namenode.kerberos.internal.spnego.principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <!-- WebHDFS REST服务的Kerberos主体 --> <property> <name>dfs.web.authentication.kerberos.principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <!-- Secondary NameNode Web UI服务的Kerberos主体 --> <property> <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <!-- Hadoop Web UI的Kerberos密钥文件路径 --> <property> <name>dfs.web.authentication.kerberos.keytab</name> <value>/etc/security/keytab/spnego.service.keytab</value> </property> <!-- DataNode服务的Kerberos主体 --> <property> <name>dfs.datanode.kerberos.principal</name> <value>dn/_HOST@EXAMPLE.COM</value> </property> <!-- DataNode服务的Kerberos密钥文件路径 --> <property> <name>dfs.datanode.keytab.file</name> <value>/etc/security/keytab/dn.service.keytab</value> </property> <!-- 配置NameNode Web UI 使用HTTPS协议 --> <property> <name>dfs.http.policy</name> <value>HTTPS_ONLY</value> </property> <!-- 配置DataNode数据传输保护策略为仅认证模式 --> <property> <name>dfs.data.transfer.protection</name> <value>authentication</value> </property>
(3)yarn-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml 增加以下内容 <!-- Resource Manager 服务的Kerberos主体 --> <property> <name>yarn.resourcemanager.principal</name> <value>rm/_HOST@EXAMPLE.COM</value> </property> <!-- Resource Manager 服务的Kerberos密钥文件 --> <property> <name>yarn.resourcemanager.keytab</name> <value>/etc/security/keytab/rm.service.keytab</value> </property> <!-- Node Manager 服务的Kerberos主体 --> <property> <name>yarn.nodemanager.principal</name> <value>nm/_HOST@EXAMPLE.COM</value> </property> <!-- Node Manager 服务的Kerberos密钥文件 --> <property> <name>yarn.nodemanager.keytab</name> <value>/etc/security/keytab/nm.service.keytab</value> </property>
(4)mapred-site.xml
[root@hadoop102 ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
增加以下内容
<!-- 历史服务器的Kerberos主体 -->
<property>
<name>mapreduce.jobhistory.keytab</name>
<value>/etc/security/keytab/jhs.service.keytab</value>
</property>
<!-- 历史服务器的Kerberos密钥文件 -->
<property>
<name>mapreduce.jobhistory.principal</name>
<value>jhs/_HOST@EXAMPLE.COM</value>
</property>
(5)分发以上修改的配置文件
[root@hadoop102 ~]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[root@hadoop102 ~]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
[root@hadoop102 ~]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
[root@hadoop102 ~]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
生成密钥对:
Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
-keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中)
-genkey(或者-genkeypair) 生成密钥对
-alias 为生成的密钥对指定别名,如果没有默认是mykey
-keyalg 指定密钥的算法 RSA/DSA 默认是DSA
(1)生成 keystore的密码及相应信息的密钥库
[root@hadoop102 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: y 输入 <jetty> 的密钥口令 (如果和密钥库口令相同, 按回车): 再次输入新口令:
(2)修改keystore文件的所有者和访问权限
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/keystore
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/keystore
注意:
(1)密钥库的密码至少6个字符,可以是纯数字或者字母或者数字和字母的组合等等
(2)确保hdfs用户(HDFS的启动用户)具有对所生成keystore文件的读权限
(3)将该证书分发到集群中的每台节点的相同路径
[root@hadoop102 ~]# xsync /etc/security/keytab/keystore
(4)修改hadoop配置文件ssl-server.xml.example,
该文件位于$HADOOP_HOME/etc/hadoop目录
修改文件名为ssl-server.xml
[root@hadoop102 ~]# mv $HADOOP_HOME/etc/hadoop/ssl-server.xml.example $HADOOP_HOME/etc/hadoop/ssl-server.xml
修改以下内容
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/ssl-server.xml 修改以下参数 <!-- SSL密钥库路径 --> <property> <name>ssl.server.keystore.location</name> <value>/etc/security/keytab/keystore</value> </property> <!-- SSL密钥库密码 --> <property> <name>ssl.server.keystore.password</name> <value>123456</value> </property> <!-- SSL可信任密钥库路径 --> <property> <name>ssl.server.truststore.location</name> <value>/etc/security/keytab/keystore</value> </property> <!-- SSL密钥库中密钥的密码 --> <property> <name>ssl.server.keystore.keypassword</name> <value>123456</value> </property> <!-- SSL可信任密钥库密码 --> <property> <name>ssl.server.truststore.password</name> <value>123456</value> </property>
(5)分发ssl-server.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/ssl-server.xml
(1)修改所有节点的container-executor所有者和权限,要求其所有者为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为6050。其默认路径为$HADOOP_HOME/bin
[root@hadoop102 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/bin/container-executor
[root@hadoop102 ~]# chmod 6050 /opt/module/hadoop-3.1.3/bin/container-executor
[root@hadoop103 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/bin/container-executor
[root@hadoop103 ~]# chmod 6050 /opt/module/hadoop-3.1.3/bin/container-executor
[root@hadoop104 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/bin/container-executor
[root@hadoop104 ~]# chmod 6050 /opt/module/hadoop-3.1.3/bin/container-executor
(2)修改所有节点的container-executor.cfg文件的所有者和权限,要求该文件及其所有的上级目录的所有者均为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为400。其默认路径为$HADOOP_HOME/etc/hadoop
[root@hadoop102 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg [root@hadoop102 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop [root@hadoop102 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc [root@hadoop102 ~]# chown root:hadoop /opt/module/hadoop-3.1.3 [root@hadoop102 ~]# chown root:hadoop /opt/module [root@hadoop102 ~]# chmod 400 /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg [root@hadoop103 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg [root@hadoop103 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop [root@hadoop103 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc [root@hadoop103 ~]# chown root:hadoop /opt/module/hadoop-3.1.3 [root@hadoop103 ~]# chown root:hadoop /opt/module [root@hadoop103 ~]# chmod 400 /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg [root@hadoop104 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg [root@hadoop104 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc/hadoop [root@hadoop104 ~]# chown root:hadoop /opt/module/hadoop-3.1.3/etc [root@hadoop104 ~]# chown root:hadoop /opt/module/hadoop-3.1.3 [root@hadoop104 ~]# chown root:hadoop /opt/module [root@hadoop104 ~]# chmod 400 /opt/module/hadoop-3.1.3/etc/hadoop/container-executor.cfg
(3)修改$HADOOP_HOME/etc/hadoop/container-executor.cfg
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/container-executor.cfg
内容如下:
yarn.nodemanager.linux-container-executor.group=hadoop
banned.users=hdfs,yarn,mapred
min.user.id=1000
allowed.system.users=
feature.tc.enabled=false
(4)修改$HADOOP_HOME/etc/hadoop/yarn-site.xml文件
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
增加以下内容:
<!-- 配置Node Manager使用LinuxContainerExecutor管理Container --> <property> <name>yarn.nodemanager.container-executor.class</name> <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value> </property> <!-- 配置Node Manager的启动用户的所属组 --> <property> <name>yarn.nodemanager.linux-container-executor.group</name> <value>hadoop</value> </property> <!-- LinuxContainerExecutor脚本路径 --> <property> <name>yarn.nodemanager.linux-container-executor.path</name> <value>/opt/module/hadoop-3.1.3/bin/container-executor</value> </property>
(5)分发container-executor.cfg和yarn-site.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/container-executor.cfg
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
local | $HADOOP_LOG_DIR | hdfs:hadoop | drwxrwxr-x |
---|---|---|---|
local | dfs.namenode.name.dir | hdfs:hadoop | drwx------ |
local | dfs.datanode.data.dir | hdfs:hadoop | drwx------ |
local | dfs.namenode.checkpoint.dir | hdfs:hadoop | drwx------ |
local | yarn.nodemanager.local-dirs | yarn:hadoop | drwxrwxr-x |
local | yarn.nodemanager.log-dirs | yarn:hadoop | drwxrwxr-x |
(1)$HADOOP_LOG_DIR(所有节点)
该变量位于hadoop-env.sh文件,默认值为 ${HADOOP_HOME}/logs
[root@hadoop102 ~]# chown hdfs:hadoop /opt/module/hadoop-3.1.3/logs/
[root@hadoop102 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/
[root@hadoop103 ~]# chown hdfs:hadoop /opt/module/hadoop-3.1.3/logs/
[root@hadoop103 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/
[root@hadoop104 ~]# chown hdfs:hadoop /opt/module/hadoop-3.1.3/logs/
[root@hadoop104 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/
(2)dfs.namenode.name.dir(NameNode节点)
该参数位于hdfs-site.xml文件,默认值为file://${hadoop.tmp.dir}/dfs/name
[root@hadoop102 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/name/
[root@hadoop102 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/name/
(3)dfs.datanode.data.dir(DataNode节点)
该参数为于hdfs-site.xml文件,默认值为file://${hadoop.tmp.dir}/dfs/data
[root@hadoop102 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/data/
[root@hadoop102 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/data/
[root@hadoop103 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/data/
[root@hadoop103 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/data/
[root@hadoop104 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/data/
[root@hadoop104 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/data/
(4)dfs.namenode.checkpoint.dir(SecondaryNameNode节点)
该参数位于hdfs-site.xml文件,默认值为file://${hadoop.tmp.dir}/dfs/namesecondary
[root@hadoop104 ~]# chown -R hdfs:hadoop /opt/module/hadoop-3.1.3/data/dfs/namesecondary/
[root@hadoop104 ~]# chmod 700 /opt/module/hadoop-3.1.3/data/dfs/namesecondary/
(5)yarn.nodemanager.local-dirs(NodeManager节点)
该参数位于yarn-site.xml文件,默认值为file://${hadoop.tmp.dir}/nm-local-dir
[root@hadoop102 ~]# chown -R yarn:hadoop /opt/module/hadoop-3.1.3/data/nm-local-dir/
[root@hadoop102 ~]# chmod -R 775 /opt/module/hadoop-3.1.3/data/nm-local-dir/
[root@hadoop103 ~]# chown -R yarn:hadoop /opt/module/hadoop-3.1.3/data/nm-local-dir/
[root@hadoop103 ~]# chmod -R 775 /opt/module/hadoop-3.1.3/data/nm-local-dir/
[root@hadoop104 ~]# chown -R yarn:hadoop /opt/module/hadoop-3.1.3/data/nm-local-dir/
[root@hadoop104 ~]# chmod -R 775 /opt/module/hadoop-3.1.3/data/nm-local-dir/
(6)yarn.nodemanager.log-dirs(NodeManager节点)
该参数位于yarn-site.xml文件,默认值为$HADOOP_LOG_DIR/userlogs
[root@hadoop102 ~]# chown yarn:hadoop /opt/module/hadoop-3.1.3/logs/userlogs/
[root@hadoop102 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/userlogs/
[root@hadoop103 ~]# chown yarn:hadoop /opt/module/hadoop-3.1.3/logs/userlogs/
[root@hadoop103 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/userlogs/
[root@hadoop104 ~]# chown yarn:hadoop /opt/module/hadoop-3.1.3/logs/userlogs/
[root@hadoop104 ~]# chmod 775 /opt/module/hadoop-3.1.3/logs/userlogs/
需要注意的是,启动不同服务时需要使用对应的用户
(1)单点启动
启动NameNode
[root@hadoop102 ~]# sudo -i -u hdfs hdfs --daemon start namenode
启动DataNode
[root@hadoop102 ~]# sudo -i -u hdfs hdfs --daemon start datanode
[root@hadoop103 ~]# sudo -i -u hdfs hdfs --daemon start datanode
[root@hadoop104 ~]# sudo -i -u hdfs hdfs --daemon start datanode
启动SecondaryNameNode
[root@hadoop104 ~]# sudo -i -u hdfs hdfs --daemon start secondarynamenode
说明:
-i:重新加载环境变量
-u:以特定用户的身份执行后续命令
(2)群起
在主节点(hadoop102)配置hdfs用户到所有节点的免密登录。
修改主节点(hadoop102)节点的$HADOOP_HOME/sbin/start-dfs.sh脚本,在顶部增加以下环境变量。
[root@hadoop102 ~]# vim $HADOOP_HOME/sbin/start-dfs.sh
在顶部增加如下内容:
HDFS_DATANODE_USER=hdfs
HDFS_NAMENODE_USER=hdfs
HDFS_SECONDARYNAMENODE_USER=hdfs
注:$HADOOP_HOME/sbin/stop-dfs.sh也需在顶部增加上述环境变量才可使用。
以root用户执行群起脚本,即可启动HDFS集群。
[root@hadoop102 ~]# start-dfs.sh
(3)查看HFDS web页面
hdfs | / | hdfs:hadoop | drwxr-xr-x |
---|---|---|---|
hdfs | /tmp | hdfs:hadoop | drwxrwxrwxt |
hdfs | /user | hdfs:hadoop | drwxrwxr-x |
hdfs | yarn.nodemanager.remote-app-log-dir | yarn:hadoop | drwxrwxrwxt |
hdfs | mapreduce.jobhistory.intermediate-done-dir | mapred:hadoop | drwxrwxrwxt |
hdfs | mapreduce.jobhistory.done-dir | mapred:hadoop | drwxrwx— |
说明:若上述路径不存在,需手动创建。
(1)创建hdfs/hadoop主体,执行以下命令并按照提示输入密码
[root@hadoop102 ~]# kadmin.local -q "addprinc hdfs/hadoop"
(2)认证hdfs/hadoop主体,执行以下命令并按照提示输入密码
[root@hadoop102 ~]# kinit hdfs/hadoop
(3)按照上述要求修改指定路径的所有者和权限
修改/、/tmp、/user路径
[root@hadoop102 ~]# hadoop fs -chown hdfs:hadoop / /tmp /user
[root@hadoop102 ~]# hadoop fs -chmod 755 /
[root@hadoop102 ~]# hadoop fs -chmod 1777 /tmp
[root@hadoop102 ~]# hadoop fs -chmod 775 /users
参数yarn.nodemanager.remote-app-log-dir位于yarn-site.xml文件,默认值/tmp/logs
[root@hadoop102 ~]# hadoop fs -chown yarn:hadoop /tmp/logs
[root@hadoop102 ~]# hadoop fs -chmod 1777 /tmp/logs
参数mapreduce.jobhistory.intermediate-done-dir位于mapred-site.xml文件,默认值为/tmp/hadoop-yarn/staging/history/done_intermediate,需保证该路径的所有上级目录(除/tmp)的所有者均为mapred,所属组为hadoop,权限为770
[root@hadoop102 ~]# hadoop fs -chown -R mapred:hadoop /tmp/hadoop-yarn/staging/history/done_intermediate
[root@hadoop102 ~]# hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging/history/done_intermediate
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/
参数mapreduce.jobhistory.done-dir位于mapred-site.xml文件,默认值为/tmp/hadoop-yarn/staging/history/done,需保证该路径的所有上级目录(除/tmp)的所有者均为mapred,所属组为hadoop,权限为770
[root@hadoop102 ~]# hadoop fs -chown -R mapred:hadoop /tmp/hadoop-yarn/staging/history/done
[root@hadoop102 ~]# hadoop fs -chmod -R 750 /tmp/hadoop-yarn/staging/history/done
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chown mapred:hadoop /tmp/hadoop-yarn/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/history/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/staging/
[root@hadoop102 ~]# hadoop fs -chmod 770 /tmp/hadoop-yarn/
(1)单点启动
启动ResourceManager
[root@hadoop103 ~]# sudo -i -u yarn yarn --daemon start resourcemanager
启动NodeManager
[root@hadoop102 ~]# sudo -i -u yarn yarn --daemon start nodemanager
[root@hadoop103 ~]# sudo -i -u yarn yarn --daemon start nodemanager
[root@hadoop104 ~]# sudo -i -u yarn yarn --daemon start nodemanager
(2)群起
在Yarn主节点(hadoop103)配置yarn用户到所有节点的免密登录。
修改主节点(hadoop103)的$HADOOP_HOME/sbin/start-yarn.sh,在顶部增加以下环境变量。
[root@hadoop103 ~]# vim $HADOOP_HOME/sbin/start-yarn.sh
在顶部增加如下内容
YARN_RESOURCEMANAGER_USER=yarn
YARN_NODEMANAGER_USER=yarn
注:stop-yarn.sh也需在顶部增加上述环境变量才可使用。
以root用户执行$HADOOP_HOME/sbin/start-yarn.sh脚本即可启动yarn集群。
[root@hadoop103 ~]# start-yarn.sh
(3)访问Yarn web页面
(1)启动历史服务器
[root@hadoop102 ~]# sudo -i -u mapred mapred --daemon start historyserver
(2)查看历史服务器web页面
(1)具体要求
以下使用说明均基于普通用户,安全集群对用户有以下要求:
(2)实操
此处以atguigu用户为例,具体操作如下:
创建用户(存在可跳过),须在所有节点执行
[root@hadoop102 ~]# useradd atguigu
[root@hadoop102 ~]# echo atguigu | passwd --stdin atguigu
[root@hadoop103 ~]# useradd atguigu
[root@hadoop103 ~]# echo atguigu | passwd --stdin atguigu
[root@hadoop104 ~]# useradd atguigu
[root@hadoop104 ~]# echo atguigu | passwd --stdin atguigu
加入hadoop组,须在所有节点执行
[root@hadoop102 ~]# usermod -a -G hadoop atguigu
[root@hadoop103 ~]# usermod -a -G hadoop atguigu
[root@hadoop104 ~]# usermod -a -G hadoop atguigu
创建主体
[root@hadoop102 ~]# kadmin -p admin/admin -wadmin -q"addprinc -pw atguigu atguigu"
(1)认证
[atguigu@hadoop102 ~]$ kinit atguigu
(2)查看当前认证用户
[atguigu@hadoop102 ~]$ kinit atguigu
(3)执行命令
[atguigu@hadoop102 ~]$ hadoop fs -ls /
(4)注销认证
[atguigu@hadoop102 ~]$ kdestroy
(5)再次执行查看命令
[atguigu@hadoop102 ~]$ hadoop fs -ls /
(1)安装Kerberos客户端
下载地址:http://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-amd64.msi
下载之后按照提示安装
编辑C:\ProgramData\MIT\Kerberos5\krb5.ini文件,内容如下
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
forwardable = true
rdns = false
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = hadoop102
admin_server = hadoop102
}
[domain_realm]
(2)配置火狐浏览器
(1)打开浏览器,在地址栏输入“about:config”,点击回车
(2)搜索“network.negotiate-auth.trusted-uris”,修改值为要访问的主机名(hadoop102)
(3)搜索“network.auth.use-sspi”,双击将值变为false
(3)认证
启动Kerberos客户端,点击Get Ticket
输入主体名和密码,点击OK
认证成功
(4)访问HDFS
(5)注销认证
(6)重启浏览器,再次访问HDFS
(1)认证
[atguigu@hadoop102 ~]$ kinit atguigu
(2)提交任务
[atguigu@hadoop102 ~]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 1 1
(1)Hadoop集群启动Kerberos认证
按照上述步骤为Hadoop集群开启Kerberos安全认证。
(2)创建Hive系统用户和Kerberos主体
创建系统用户
[root@hadoop102 ~]# useradd hive -g hadoop
[root@hadoop102 ~]# echo hive | passwd --stdin hive
[root@hadoop103 ~]# useradd hive -g hadoop
[root@hadoop103 ~]# echo hive | passwd --stdin hive
[root@hadoop104 ~]# useradd hive -g hadoop
[root@hadoop104 ~]# echo hive | passwd --stdin hive
创建Kerberos主体并生成keytab文件
创建hive用户的Kerberos主体:
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hive/hadoop102"
在Hive所部署的节点生成keytab文件:
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hive.service.keytab hive/hadoop102"
修改keytab文件所有者和访问权限:
[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/hive.service.keytab
(1)修改$HIVE_HOME/conf/hive-site.xml文件,增加如下属性:
[root@hadoop102 ~]# vim $HIVE_HOME/conf/hive-site.xml <!-- HiveServer2启用Kerberos认证 --> <property> <name>hive.server2.authentication</name> <value>kerberos</value> </property> <!-- HiveServer2服务的Kerberos主体 --> <property> <name>hive.server2.authentication.kerberos.principal</name> <value>hive/hadoop102@EXAMPLE.COM</value> </property> <!-- HiveServer2服务的Kerberos密钥文件 --> <property> <name>hive.server2.authentication.kerberos.keytab</name> <value>/etc/security/keytab/hive.service.keytab</value> </property> <!-- Metastore启动认证 --> <property> <name>hive.metastore.sasl.enabled</name> <value>true</value> </property> <!-- Metastore Kerberos密钥文件 --> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>/etc/security/keytab/hive.service.keytab</value> </property> <!-- Metastore Kerberos主体 --> <property> <name>hive.metastore.kerberos.principal</name> <value>hive/hadoop102@EXAMPLE.COM</value> </property>
(2)修改$HADOOP_HOME/etc/hadoop/core-site.xml文件,具体修改如下:
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/core-site.xml
删除以下参数
<property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> <property> <name>hadoop.proxyuser.atguigu.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.atguigu.users</name> <value>*</value> </property>
增加以下参数
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.users</name>
<value>*</value>
</property>
代理相关:https://blog.csdn.net/u012948976/article/details/49904675
(3)分发配置core-site.xml文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/core-site.xml
(4)重启Hadoop集群
[root@hadoop102 ~]# stop-dfs.sh
[root@hadoop103 ~]# stop-yarn.sh
[root@hadoop102 ~]# start-dfs.sh
[root@hadoop103 ~]# start-yarn.sh
注:需使用hive用户启动
[root@hadoop102 ~]# sudo -i -u hive hiveserver2
以下说明均基于普通用户
(1)认证,执行以下命令,并按照提示输入密码
[atguigu@hadoop102 ~]$ kinit atguigu
(2)使用beeline客户端连接hiveserver2
[atguigu@hadoop102 ~]$ beeline
使用如下url进行连接
> !connect jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@EXAMPLE.COM
(3)测试查询
(1)创建Driver
(2)配置Driver
注:
url模板:jdbc:hive2://{host}:{port}/{database}[;<;,{:identifier}={:param}>]
(1)创建连接
(2)配置连接
基础配置
url:jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@EXAMPLE.COM
高级配置
配置参数:
-Djava.security.krb5.conf="C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini"
-Djava.security.auth.login.config="C:\\ProgramData\\MIT\\Kerberos5\\atguigu.conf"
-Djavax.security.auth.useSubjectCredsOnly=false
(3)编写JAAS(Java认证授权服务)配置文件,内容如下,文件名和路径须和上图中java.security.auth.login.config参数的值保持一致。
com.sun.security.jgss.initiate{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
useTicketCache=false
keyTab="C:\\ProgramData\\MIT\\Kerberos5\\atguigu.keytab"
principal="atguigu@EXAMPLE.COM";
};
(4)为用户生成keytab文件,在krb5kdc所在节点(hadoop102)执行以下命令
[root@hadooop102]# kadmin.local -q"xst -norandkey -k /home/atguigu/atguigu.keytab atguigu"
(5)将上一步生成的atguigu.keytab文件,置于Windows中的特定路径,该路径须与**(3)**中的keyTab属性的值保持一致。
(6)测试连接
Hadoop启用Kerberos安全认证之后,之前的非安全环境下的全流程调度脚本和即席查询引擎均会遇到认证问题,故需要对其进行改进。
此处统一将数仓的全部数据资源的所有者设为hive用户,全流程的每步操作均认证为hive用户。
(1)在各节点创建hive用户,如已存在则跳过
[root@hadoop102 ~]# useradd hive -g hadoop
[root@hadoop102 ~]# echo hive | passwd --stdin hive
[root@hadoop103 ~]# useradd hive -g hadoop
[root@hadoop103 ~]# echo hive | passwd --stdin hive
[root@hadoop104 ~]# useradd hive -g hadoop
[root@hadoop104 ~]# echo hive | passwd --stdin hive
(2)为hive用户创建Keberos主体
创建主体
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hive"
生成keytab文件
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hive.keytab hive"
修改keytab文件所有者和访问权限
[root@hadoop102 ~]# chown hive:hadoop /etc/security/keytab/hive.keytab
[root@hadoop102 ~]# chmod 440 /etc/security/keytab/hive.keytab
分发keytab文件
[root@hadoop102 ~]# xsync /etc/security/keytab/hive.keytab
(1)用户行为日志
修改/opt/module/flume/conf/kafka-flume-hdfs.conf配置文件,增加以下参数:
[root@hadoop104 ~]# vim /opt/module/flume/conf/kafka-flume-hdfs.conf
a1.sinks.k1.hdfs.kerberosPrincipal=hive@EXAMPLE.COM
a1.sinks.k1.hdfs.kerberosKeytab=/etc/security/keytab/hive.keytab
(2)业务数据
修改sqoop每日同步脚本/home/atguigu/bin/mysql_to_hdfs.sh,
[root@hadoop102 ~]# vim /home/atguigu/bin/mysql_to_hdfs.sh
在顶部增加如下认证语句
kinit -kt /etc/security/keytab/hive.keytab hive
数仓各层脚本均需在顶部加入如下认证语句:
kinit -kt /etc/security/keytab/hive.keytab hive
修改语句如下
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_ods_log.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_ods_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dwd_log.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dim_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' ods_to_dwd_db.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dwd_to_dws.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dws_to_dwt.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' dwt_to_ads.sh
[root@hadoop102 ~]# sed -i '1 a kinit -kt /etc/security/keytab/hive.keytab hive' hdfs_to_mysql.sh
注:
sed -i '1 a text' file
表示将text内容加入到file文件的第1行之后
(1)认证为hdfs用户,执行以下命令并按提示输入密码
[root@hadoop102 ~]# kinit hdfs/hadoop
(2)修改数据采集目标路径
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /origin_data
(3)修改数仓表所在路径
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /warehouse
(4)修改hive家目录/user/hive
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /user/hive
(5)修改spark.eventLog.dir路径
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /spark-history
(1)用户行为日志
启动日志采集通道,包括Zookeeper,Kafka,Flume等
修改hadoop102,hadoop103两台节点的/opt/module/applog/application.yml文件,将模拟日期改为2020-06-16如下
#业务日期
mock.date: "2020-06-16"
执行生成日志的脚本
[root@hadoop102 ~]# lg.sh
等待片刻,观察HDFS是否出现2020-06-16的日志文件
(2)业务数据
修改/opt/module/db_log/application.properties,将模拟日期修改为2020-06-16,如下:
#业务日期
mock.date=2020-06-16
进入到/opt/module/db_log路径,执行模拟生成业务数据的命令,如下:
[root@hadoop102 ~]# java -jar gmall2020-mock-db-2021-01-22.jar
观察mysql的gmall数据中是否出现2020-06-16的数据:
(1)在各节点创建azkaban用户
[root@hadoop102 ~]# useradd azkaban -g hadoop
[root@hadoop102 ~]# echo azkaban | passwd --stdin azkaban
[root@hadoop103 ~]# useradd azkaban -g hadoop
[root@hadoop103 ~]# echo azkaban | passwd --stdin azkaban
[root@hadoop104 ~]# useradd azkaban -g hadoop
[root@hadoop104 ~]# echo azkaban | passwd --stdin azkaban
(2)将各节点Azkaban安装路径所有者改为azkaban用户
[root@hadoop102 ~]# chown -R azkaban:hadoop /opt/module/azkaban
[root@hadoop103 ~]# chown -R azkaban:hadoop /opt/module/azkaban
[root@hadoop104 ~]# chown -R azkaban:hadoop /opt/module/azkaban
(3)使用azkaban用户启动Azkaban
启动Executor Server
在各节点执行以下命令,启动Executor
[root@hadoop102 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
[root@hadoop103 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
[root@hadoop104 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-exec;bin/start-exec.sh"
激活Executor Server,任选一台节点执行以下激活命令即可
[root@hadoop102 ~]# curl http://hadoop102:12321/executor?action=activate
[root@hadoop102 ~]# curl http://hadoop103:12321/executor?action=activate
[root@hadoop102 ~]# curl http://hadoop104:12321/executor?action=activate
启动Web Server
[root@hadoop102 ~]# sudo -i -u azkaban bash -c "cd /opt/module/azkaban/azkaban-web;bin/start-web.sh"
修改数仓各层脚本访问权限,确保azkaban用户能够访问到
[root@hadoop102 ~]# chown -R atguigu:hadoop /home/atguigu
[root@hadoop102 ~]# chmod 770 /home/atguigu
[root@hadoop103 ~]# chown -R atguigu:hadoop /home/atguigu
[root@hadoop103 ~]# chmod 770 /home/atguigu
[root@hadoop104 ~]# chown -R atguigu:hadoop /home/atguigu
[root@hadoop104 ~]# chmod 770 /home/atguigu
(1)工作流参数
(2)运行结果
Presto集群开启Kerberos认证可只配置Presto Coordinator和Presto Cli之间进行认证,集群内部通讯可不进行认证。Presto Coordinator和Presto Cli之间的认证要求两者采用更为安全的HTTPS协议进行通讯。
若Presto对接的是Hive数据源,由于其需要访问Hive的元数据和HDFS上的数据文件,故也需要对Hive Connector进行Kerberos认证。
(1)在所有节点创建presto系统用户
[root@hadoop102 ~]# useradd presto -g hadoop
[root@hadoop102 ~]# echo presto | passwd --stdin presto
[root@hadoop103 ~]# useradd presto -g hadoop
[root@hadoop103 ~]# echo presto | passwd --stdin presto
[root@hadoop104 ~]# useradd presto -g hadoop
[root@hadoop104 ~]# echo presto | passwd --stdin presto
(2)为Hive Connector创建Kerberos主体
创建presto用户的Kerberos主体
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey presto"
生成keytab文件
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/presto.keytab presto"
修改keytab文件的访问权限
[root@hadoop102 ~]# chown presto:hadoop /etc/security/keytab/presto.keytab
分发keytab文件
[root@hadoop102 ~]# xsync /etc/security/keytab/presto.keytab
(3)为Presto Coordinator创建Kerberos主体
创建presto用户的Kerberos主体
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey presto/hadoop102"
生成keytab文件
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/presto.service.keytab presto/hadoop102"
修改keytab文件的访问权限
[root@hadoop102 ~]# chown presto:hadoop /etc/security/keytab/presto.service.keytab
注意:
(1)使用Java提供的keytool工具生成密钥对
[root@hadoop102 ~]# keytool -genkeypair -alias presto -keyalg RSA -keystore /etc/security/keytab/keystore.jks 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: hadoop102 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=hadoop102, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: y 输入 <presto> 的密钥口令 (如果和密钥库口令相同, 按回车):
(2)修改keystore文件的所有者和访问权限
[root@hadoop102 ~]# chown presto:hadoop /etc/security/keytab/keystore.jks
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/keystore.jks
在/opt/module/presto/etc/config.properties文件中增加以下参数:
[root@hadoop102 ~]# vim /opt/module/presto/etc/config.properties
http-server.authentication.type=KERBEROS
http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.keytab=/etc/security/keytab/presto.service.keytab
http.authentication.krb5.config=/etc/krb5.conf
http-server.https.enabled=true
http-server.https.port=7778
http-server.https.keystore.path=/etc/security/keytab/keystore.jks
http-server.https.keystore.key=123456
(1)在/opt/module/presto/etc/catalog/hive.properties中增加以下参数
[root@hadoop102 ~]# vim /opt/module/presto/etc/catalog/hive.properties
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/hadoop102@EXAMPLE.COM
hive.metastore.client.principal=presto@EXAMPLE.COM
hive.metastore.client.keytab=/etc/security/keytab/presto.keytab
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=presto@EXAMPLE.COM
hive.hdfs.presto.keytab=/etc/security/keytab/presto.keytab
hive.config.resources=/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml,/opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
(2)分发/opt/module/presto/etc/catalog/hive.properties文件
[root@hadoop102 ~]# xsync /opt/module/presto/etc/catalog/hive.properties
(1)新建/opt/module/presto/etc/access-control.properties配置文件,内容如下
[root@hadoop102 ~]# vim /opt/module/presto/etc/access-control.properties
access-control.name=file
security.config-file=etc/rules.json
(2)新建/opt/module/presto/etc/rules.json文件,内容如下
[root@hadoop102 ~]# vim /opt/module/presto/etc/rules.json
{
"catalogs": [
{
"allow": true # 允许所有用户拥有所有catelog的所有权限
}
],
"user_patterns": [
"(.*)", # ldap协议的映射规则
"([a-zA-Z]+)/?.*@.*" #kerberos协议的映射规则,()部分为抽取出的用户名
]
}
https://blog.51cto.com/u_13639264/4535031
(1)修改Hadoop配置文件
修改$HADOOP_HOME/etc/hadoop/core-site.xml配置文件,增加如下内容:
[root@hadoop102 ~]# vim $HADOOP_HOME/etc/hadoop/core-site.xml
<property>
<name>hadoop.proxyuser.presto.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.presto.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.presto.users</name>
<value>*</value>
</property>
(2)分发修改的文件
[root@hadoop102 ~]# xsync $HADOOP_HOME/etc/hadoop/core-site.xml
(3)重启Hadoop集群
[root@hadoop102 ~]# stop-dfs.sh
[root@hadoop103 ~]# stop-yarn.sh
[root@hadoop102 ~]# start-dfs.sh
[root@hadoop103 ~]# start-yarn.sh
(1)关闭集群
[root@hadoop102 ~]# /opt/module/presto/bin/launcher stop
[root@hadoop103 ~]# /opt/module/presto/bin/launcher stop
[root@hadoop104 ~]# /opt/module/presto/bin/launcher stop
(2)修改Presto安装路径所有者为presto
[root@hadoop102 ~]# chown -R presto:hadoop /opt/module/presto
[root@hadoop103 ~]# chown -R presto:hadoop /opt/module/presto
[root@hadoop104 ~]# chown -R presto:hadoop /opt/module/presto
(3)使用hive用户启动MetaStore服务
[root@hadoop102 ~]# sudo -i -u hive hive --service metastore
(4)使用presto用户启动Presto集群
[root@hadoop102 ~]# sudo -i -u presto /opt/module/presto/bin/launcher start
[root@hadoop103 ~]# sudo -i -u presto /opt/module/presto/bin/launcher start
[root@hadoop104 ~]# sudo -i -u presto /opt/module/presto/bin/launcher start
[root@hadoop102 presto]# ./prestocli \
--server https://hadoop102:7778 \
--catalog hive \
--schema default \
--enable-authentication \
--krb5-remote-service-name presto \
--krb5-config-path /etc/krb5.conf \
--krb5-principal atguigu@EXAMPLE.COM \
--krb5-keytab-path /home/atguigu/atguigu.keytab \
--keystore-path /etc/security/keytab/keystore.jks \
--keystore-password 123456 \
--user atguigu
从Kylin的架构,可以看出Kylin充当只是一个Hadoop客户端,读取Hive数据,利用MR或Spark进行计算,将Cube存储至HBase中。所以在安全的Hadoop环境下,Kylin不需要做额外的配置,只需要具备一个Kerberos主体,进行常规的认证即可。
但是Kylin所依赖的HBase需要进行额外的配置,才能在安全的Hadoop环境下正常工作。
(1)用户准备
在各节点创建hbase系统用户:
[root@hadoop102 ~]# useradd -g hadoop hbase
[root@hadoop102 ~]# echo hbase | passwd --stdin hbase
[root@hadoop103 ~]# useradd -g hadoop hbase
[root@hadoop103 ~]# echo hbase | passwd --stdin hbase
[root@hadoop104 ~]# useradd -g hadoop hbase
[root@hadoop104 ~]# echo hbase | passwd --stdin hbase
创建hbase Kerberos主体:
在hadoop102节点创建主体,生成密钥文件,并修改所有者
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hbase/hadoop102"
[root@hadoop102 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hbase.service.keytab hbase/hadoop102"
[root@hadoop102 ~]# chown hbase:hadoop /etc/security/keytab/hbase.service.keytab
在hadoop103节点创建主体,生成密钥文件,并修改所有者
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hbase/hadoop103"
[root@hadoop103 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hbase.service.keytab hbase/hadoop103"
[root@hadoop103 ~]# chown hbase:hadoop /etc/security/keytab/hbase.service.keytab
在hadoop104节点创建主体,生成密钥文件,并修改所有者
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"addprinc -randkey hbase/hadoop104"
[root@hadoop104 ~]# kadmin -padmin/admin -wadmin -q"xst -k /etc/security/keytab/hbase.service.keytab hbase/hadoop104"
[root@hadoop104 ~]# chown hbase:hadoop /etc/security/keytab/hbase.service.keytab
(2)修改HBase配置文件
修改$HBASE_HOME/conf/hbase-site.xml配置文件,增加以下参数:
[root@hadoop102 ~]# vim $HBASE_HOME/conf/hbase-site.xml <property> <name>hbase.security.authentication</name> <value>kerberos</value> </property> <property> <name>hbase.master.kerberos.principal</name> <value>hbase/_HOST@EXAMPLE.COM</value> </property> <property> <name>hbase.master.keytab.file</name> <value>/etc/security/keytab/hbase.service.keytab</value> </property> <property> <name>hbase.regionserver.kerberos.principal</name> <value>hbase/_HOST@EXAMPLE.COM</value> </property> <property> <name>hbase.regionserver.keytab.file</name> <value>/etc/security/keytab/hbase.service.keytab</value> </property> <property> <name>hbase.coprocessor.region.classes</name> <value>org.apache.hadoop.hbase.security.token.TokenProvider</value> </property>
(3)分发配置文件
[root@hadoop102 ~]# xsync $HBASE_HOME/conf/hbase-site.xml
(4)修改hbase.rootdir路径所有者
使用hdfs/hadoop用户进行认证
[root@hadoop102 ~]# kinit hdfs/hadoop
修改所有者
[root@hadoop102 ~]# hadoop fs -chown -R hbase:hadoop /hbase
(5)启动HBase
修改各节点HBase安装目录所有者
[root@hadoop102 ~]# chown -R hbase:hadoop /opt/module/hbase
[root@hadoop103 ~]# chown -R hbase:hadoop /opt/module/hbase
[root@hadoop104 ~]# chown -R hbase:hadoop /opt/module/hbase
配置hbase用户从主节点(hadoop102)到所有节点的ssh免密
使用hbase用户启动HBase
[root@hadoop102 ~]# sudo -i -u hbase start-hbase.sh
(6)停止HBase
启用Kerberos认证之后,关闭HBase时,需先进行Kerberos用户认证,认证的主体为hbase。
认证为hbase主体
[root@hadoop102 ~]# sudo -i -u hbase kinit -kt /etc/security/keytab/hbase.service.keytab hbase/hadoop102
停止hbase
[root@hadoop102 ~]# sudo -i -u hbase stop-hbase.sh
(1)用户准备
创建kylin系统用户:
[root@hadoop102 ~]# useradd -g hadoop kylin
[root@hadoop102 ~]# echo kylin | passwd --stdin kylin
(2)修改kylin.env.hdfs-working-dir路径所有者为kylin
使用hdfs/hadoop用户进行认证
[root@hadoop102 ~]# kinit hdfs/hadoop
修改所有者
[root@hadoop102 ~]# hadoop fs -chown -R hive:hadoop /kylin
(3)修改/opt/module/kylin所有者为kylin
[root@hadoop102 ~]# chown -R kylin:hadoop /opt/module/kylin
(4)启动kylin
在kylin用户下认证为hive主体
[root@hadoop102 ~]# sudo -i -u kylin kinit -kt /etc/security/keytab/hive.keytab hive
以kylin用户的身份启动kylin
[root@hadoop102 ~]# sudo -i -u kylin /opt/module/kylin/bin/kylin.sh start
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。