首页 > 大数据 > > YARN & HDFS2 安装和配置Kerberos
今天尝试在Hadoop 2.x开发集群上配置Kerberos,遇到一些问题,记录一下
设置hadoop security
core-site.xml
hadoop.security.authentication
kerberos
hadoop.security.authorization
true
hadoop.security.authentication默认是simple方式,也就是基于linux操作系统的验证方式,用户端调用whoami命令,然后RPC call给服务端,恶意用户很容易在其他host伪造一个相同的用户。这里我们改为kerberos。
dfs.block.access.token.enable
true
dfs.https.enable
false
dfs.namenode.https-address
dev80.hadoop:50470
dfs.https.port
50470
dfs.namenode.keytab.file
/etc/hadoop.keytab
dfs.namenode.kerberos.principal
hadoop/_HOST@DIANPING.COM
dfs.namenode.kerberos.https.principal
host/_HOST@DIANPING.COM
dfs.namenode.secondary.http-address
dev80.hadoop:50090
dfs.namenode.secondary.https-port
50470
dfs.namenode.secondary.keytab.file
/etc/hadoop.keytab
dfs.namenode.secondary.kerberos.principal
hadoop/_HOST@DIANPING.COM
dfs.namenode.secondary.kerberos.https.principal
host/_HOST@DIANPING.COM
dfs.datanode.data.dir.perm
700
dfs.datanode.address
0.0.0.0:1003
dfs.datanode.http.address
0.0.0.0:1007
dfs.datanode.https.address
0.0.0.0:1005
dfs.datanode.keytab.file
/etc/hadoop.keytab
dfs.datanode.kerberos.principal
hadoop/_HOST@DIANPING.COM
dfs.datanode.kerberos.https.principal
host/_HOST@DIANPING.COM
dfs.datanode.data.dir.perm
700
dfs.datanode.address
0.0.0.0:1003
dfs.datanode.http.address
0.0.0.0:1007
dfs.datanode.https.address
0.0.0.0:1005
dfs.datanode.keytab.file
/etc/hadoop.keytab
dfs.datanode.kerberos.principal
hadoop/_HOST@DIANPING.COM
dfs.datanode.kerberos.https.principal
host/_HOST@DIANPING.COM
dfs.web.authentication.kerberos.principal
HTTP/_HOST@DIANPING.COM
dfs.web.authentication.kerberos.keytab
/etc/hadoop.keytab
The Kerberos keytab file with the credentials for the
HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint.
wget http://mirror.esocc.com/apache//commons/daemon/binaries/commons-daemon-1.0.15-bin.tar.gz
cd src/native/unix; configure; make
生成jsvc 64位executable,把它拷贝到$HADOOP_HOME/libexec,然后需要在hadoop-env.sh中指定JSVC_HOME到此路径,否则会报错"It looks like you're trying to start a secure DN, but $JSVC_HOME isn't
set. Falling back to starting insecure DN."
[hadoop@dev80 unix]$ file jsvc
jsvc: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
mvn package
# The jsvc implementation to use. Jsvc is required to run secure datanodes.
export JSVC_HOME=/usr/local/hadoop/hadoop-2.1.0-beta/libexec
# On secure datanodes, user to run the datanode as after dropping privileges
export HADOOP_SECURE_DN_USER=hadoop
# The directory where pid files are stored. /tmp by default
export HADOOP_SECURE_DN_PID_DIR=/usr/local/hadoop
# Where log files are stored in the secure data environment.
export HADOOP_SECURE_DN_LOG_DIR=/data/logs
exec "$JSVC" \
-Dproc_$COMMAND -outfile "$JSVC_OUTFILE" \
-errfile "$JSVC_ERRFILE" \
-pidfile "$HADOOP_SECURE_DN_PID" \
-nodetach \
-user "$HADOOP_SECURE_DN_USER" \
-cp "$CLASSPATH" \
$JAVA_HEAP_MAX $HADOOP_OPTS \
org.apache.hadoop.hdfs.server.datanode.SecureDataNodeStarter "$@"如果启动过程中有什么问题可以查看$JSVC_OUTFILE(默认是$HADOOP_LOG_DIR/jsvc.out) 和 $JSVC_ERRFILE(默认是$HADOOP_LOG_DIR/jsvc.err)信息来排错
yarn.resourcemanager.keytab
/etc/hadoop.keytab
yarn.resourcemanager.principal
hadoop/_HOST@DIANPING.COM
yarn.nodemanager.keytab
/etc/hadoop.keytab
yarn.nodemanager.principal
hadoop/_HOST@DIANPING.COM
yarn.nodemanager.container-executor.class
org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor
yarn.nodemanager.linux-container-executor.group
hadoop
Caused by: org.apache.hadoop.util.Shell$ExitCodeException: File /usr/local/hadoop/hadoop-2.1.0-beta/etc/hadoop must be owned by root, but is owned by 500
at org.apache.hadoop.util.Shell.runCommand(Shell.java:458)
at org.apache.hadoop.util.Shell.run(Shell.java:373)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:578)
at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.init(LinuxContainerExecutor.java:147)
[root@dev80 bin]# strings container-executor | grep etc
../etc/hadoop/container-executor.cfg看出来是默认加载$HADOOP_HOME/etc/hadoop/container-executor.cfg[hadoop@dev80 bin]$ strings container-executor | grep etc
/etc/container-executor.cfg
yarn.nodemanager.linux-container-executor.group=hadoop
min.user.id=499其中min.user.id表示启动container的最小uid,如果有低于这个值的uid启动task,就会fail掉。一般Centos,RHEL用户帐号uid是从500开始chown root:hadoop container-executor /etc/container-executor.cfg
chmod 4750 container-executor
chmod 400 /etc/container-executor.cfg
同步配置文件到整个集群,用hadoop帐号启动ResourceManager和Nodemanager
mapreduce.jobhistory.keytab
/etc/hadoop.keytab
mapreduce.jobhistory.principal
hadoop/_HOST@DIANPING.COM
[hadoop@dev80 hadoop]$ kinit -r 24l -k -t /home/hadoop/.keytab hadoop
[hadoop@dev80 hadoop]$ klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: hadoop@DIANPING.COM
Valid starting Expires Service principal
09/11/13 15:25:34 09/12/13 15:25:34 krbtgt/DIANPING.COM@DIANPING.COM
renew until 09/12/13 15:25:34其中/tmp/krb5cc_500就是kerberos
ticket cache, 默认会在/tmp下创建名字为“krb5cc_”加上uid的文件,此处500表示hadoop帐号的uid[hadoop@dev80 hadoop]$ getent passwd
hadoop:x:500:500::/home/hadoop:/bin/bash用户也可以通过设置export
KRB5CCNAME=/tmp/krb5cc_500到环境变量来指定ticket cache路径[hadoop@dev80 hadoop]$ kdestroy
[hadoop@dev80 hadoop]$ klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_500)
13/09/11 16:21:35 ERROR security.UserGroupInformation: PriviledgedActionException as:hadoop (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
[hadoop@dev80 hadoop]$ klist -k -t /etc/hadoop.keytab
Keytab name: WRFILE:/etc/hadoop.keytab
KVNO Timestamp Principal
---- ----------------- --------------------------------------------------------
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 hadoop/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 host/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
1 06/17/12 22:01:24 HTTP/dev80.hadoop@DIANPING.COM
[hadoop@dev80 hadoop]$ klist -k -t /home/hadoop/.keytab
Keytab name: WRFILE:/home/hadoop/.keytab
KVNO Timestamp Principal
---- ----------------- --------------------------------------------------------
1 04/11/12 13:56:29 hadoop@DIANPING.COM
原文作者:;如有侵权,请联系管理员删除。