天天看点

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

hadoop2.7.7集群使用kerberos1.18.1进行授权验证(二)

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

介绍

上一篇我们搭建完成了hadoop集群中的kerberos,并完成了验证,接着我们就要设置hadoop来使用Kerberos了。集群概况再介绍下

集群情况:

centeros7.5 hadoop2.7.7

集群中有机器三台其中181是 namenode和datanode,其他2台是datanode

10.106.145.181 master01.hadoop

10.106.145.182 slave01.hadoop

10.106.145.183 slave02.hadoop

目前我们已经再181机器上搭建了kdc 并在所有机器上安装了kerberos的客户端,目前在kdc中创建了2个user principal 和4种 server principal分别如下

user principal :

root/[email protected]

server principal :

hdfs/[email protected]

hdfs/[email protected]

hdfs/[email protected]

http/[email protected]

http/[email protected]

http/[email protected]

mapred/[email protected]

mapred/[email protected]

mapred/[email protected]

yarn/[email protected]

yarn/[email protected]

yarn/

hadoop/[email protected]

hadoop/[email protected]

hadoop/

配置Hadoop支持kerberos我们需要两步

1.映射service principals 和系统的用户名

2.在hadoop配置文件中添加kerberos信息

一 产生keytab file

因为目前集群中的机器都是使用一个账号 hadoop来启动和管理的,所有这里我们就只产生hadoop的keytab文件,实际生产中如果多个服务都有自己的账号,那么就按实际情况产生多个账号的keytab

xst -k hadoop.keytab hadoop/[email protected] hadoop/[email protected] hadoop/[email protected]

将上产生的文件分发hadoop集群各个机器上去,路径我们这里先放到 haddop安装路径的 etc/hadoop中去,另外我们集群启动都是使用账号 hadoop的,所有我们将这个几个文件授权给hadoop用户 并修改权限为400

chown hadoop:hadoop hadoop.keytab

chmod 400 hadoop.keytab

mv hadoop.keytab /usr/local/hadoop-2.7.7/etc/hadoop/

scp到其它机器上

scp hadoop.keytab [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

scp hadoop.keytab [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

二 映射service principal 和系统用户

kerberos使用在core-site.xml文件中的设置的配置规则,通过设置hadoop.security

.auth_to_local来映射service principals 和操作系统的用户名,默认规则就是简单的将service principals中的名字直接转换成系统用户名,这里我们回顾下service principals的命名规则 主名称+实例+领域,其中实例是可选的,这里默认规则就是将主名称 直接映射系统用户名。

如果主名称是和系统的用户名一样的(比如hdfs/master01.hadoop 和 linux系统中的用户 hdfs),则不需要设置其它规则,使用默认规则即可,注意我们也可以在krb5.cnf中使用 auth_to_local 参数进行指定。

我们来看下不一致的情况,则需要使用hadoop.security.auth_to_local来进行映射了,映射规则分三部分

base+filter+substitution(替换)

base:

过使用 数字(1或2):样式 的格式,其中样式中$0指定领域 $1 指定 主名称 $2指定实例名,采用的格式为[:],这里数字 1 代表只有主名称 即UPN ,2 代表 主名称+实例 即SPN

格式如下 [:]

例子如下:

pig/[email protected] [1: $1] 无法匹配

pig/[email protected] [2: [email protected]$0] 匹配结果为 [email protected]

[1: $1] 匹配结果为 city

[2: [email protected]$0] 无法匹配

filter:

接收过滤器是一个标准的正则表达式,用于匹配第一部分——principal translation,输出的短名称,只有当成功匹配时,才会将该短名称传递到第三部分——short name substitution。当不匹配时,则跳过该rule,进行下一条rule的匹配,否则进行下一步。

substitution:

第三部分可以理解为linux中sed替换命令 (s/.../.../g) ,其输入是principal translation提取出的短名称。这部分是可选的,整个的规则为 RULE:[:]()s///

[email protected]

s/(.*).MYCOMPANY.COM/1/: sam

s/.MYCOMPANY.COM// : sam

DEFAULT:

DEFAULT是默认规则,默认将principal的第一个component作为短名称输出

这里我们针对hadoop/[email protected] 的principal 可以将 hadoop.security.auth_to_local设置为[2: [email protected]$0]

三 安装jsvc (hdfs节点)

在所有的DataNodes节点上都要安装jsvc,以便启用kerberos,在这里我们三台电脑都是DataNode节点所有都需要安装javc,如果不确定就整个集群都安装一边,防止后续扩展成新的DataNode

安装autoconf 和gcc

yum install autoconf -y

yum install gcc -y

下载jsvc源包

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

tar -zxvf commons-daemon-1.2.2-src.tar.gz

cd ./commons-daemon-1.2.2-src/src/native/unix

./support/buildconf.sh

./configure

make

检查生成情况

在当前目录下产生了jsvc文件,我们来检查下是否有效

./jsvc -help

将该jsvc放置到hadoop 的lib目录下

mv jsvc /usr/local/hadoop-2.7.7/lib/

配置hadoop-env.sh

找到配置中这两项进行修改

vi /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh

export JSVC_HOME=/usr/local/hadoop-2.7.7/lib/

export HADOOP_SECURE_DN_USER=hadoop

export HADOOP_SECURE_DN_PID_DIR=/var/lib/hadoop-hdfs

export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs

分发 jsvc 和 hadoop-env.sh

scp /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop

scp /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop

scp /usr/local/hadoop-2.7.7/lib/jsvc [email protected]:/usr/local/hadoop-2.7.7/lib/

scp /usr/local/hadoop-2.7.7/lib/jsvc [email protected]:/usr/local/hadoop-2.7.7/lib/

四 配置HDFS相关文件

配置core-site.xml

添加下面属性

hadoop.security.authentication

kerberos

hadoop.security.authorization

true

hadoop.security.auth_to_local

RULE:[2:[email protected]$0]

DEFAULT

hadoop.rpc.protection

privacy

配置hdfs-site.xml

dfs.block.access.token.enable

true

dfs.namenode.keytab.file

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

dfs.namenode.kerberos.principal

hadoop/[email protected]

dfs.namenode.kerberos.internal.spnego.principal

hadoop/[email protected]

dfs.secondary.namenode.keytab.file

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

dfs.secondary.namenode.kerberos.principal

hadoop/[email protected]

dfs.datanode.keytab.file

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

dfs.datanode.kerberos.principal

hadoop/[email protected]

dfs.datanode.address

0.0.0.0:1004

dfs.datanode.http.address

0.0.0.0:1006

dfs.journalnode.keytab.file

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

dfs.journalnode.kerberos.principal

hadoop/[email protected]

dfs.journalnode.kerberos.internal.spnego.principal

hadoop/[email protected]

dfs.web.authentication.kerberos.principal

hadoop/[email protected]

dfs.web.authentication.kerberos.keytab

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

配置 yarn-site xml

yarn.resourcemanager.keytab

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

yarn.resourcemanager.principal

hadoop/[email protected]

yarn.nodemanager.keytab

/usr/local/hadoop-2.7.7/etc/hadoop/hadoop.keytab

yarn.nodemanager.principal

hadoop/[email protected]

分发hdfs-site.xml core-site.xml

scp yarn-site.xml hdfs-site.xml core-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

scp yarn-site.xml hdfs-site.xml core-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

五 测试HDFS服务

启动 NameNode 和 Second Namenode(使用hadoop账号)

./start-dfs.sh

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

启动DataNode(使用root账号)

sudo ./start-secure-dns.sh

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

jps后我们发现datanode不见了 变成了Secur

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

关闭时候 可以反过来先关闭datenode 后关闭 namenode

sudo ./stop-secure-dns.sh

./stop-dfs.sh

hdfs dfsadmin -report

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

上传个文件试试

hadoop fs -put httpfs.sh /

hadoop fs -ls /

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

六 配置YARN服务

配置yarn-site.xml

添加属性

yarn.nodemanager.container-executor.class

org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor

yarn.nodemanager.linux-container-executor.group

hadoop

这两个选项是的yarn也在提交任务时候也可以继续能通过验证,这里container-executor在hadoop的bin目录下

配置container.executor.cfg

文件 /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg

添加几个选项进去

yarn.nodemanager.linux-container-executor.group=hadoop #configured value of yarn.nodemanager.linux-container-executor.group

banned.users=hadoop #comma separated list of users who can not run applications

min.user.id=1000 #Prevent other super-users

allowed.system.users=hadoop ##comma separated list of system users who CAN run applications

#yarn.nodemanager.log-dirs=/var/log/yarn

分发yarn-site.xml 和 container.executor.cfg

scp /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

scp /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

scp /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

scp /usr/local/hadoop-2.7.7/etc/hadoop/container-executor.cfg [email protected]:/usr/local/hadoop-2.7.7/etc/hadoop/

检查container.executor

hadoop checknative

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

七 测试YARN服务

启动yarn

./start-yarn.sh

jps

同样我们看到ResourceManager是能看到的,而nodemanager是看不见的

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

测试yarn on kerberos是否正常运行

上传jar包到hdfs上

hadoop fs -put /usr/local/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar /

hadoop fs -chmod 777 /hadoop-mapreduce-examples-2.7.7.jar

hadoop fs -ls /

Hadoop 中zoo_hadoop使用kerberos进行授权验证(二)

测试jar包

hadoop jar /usr/local/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /httpfs.sh /test/myresoult

继续阅读