8. 然后启动KDC和Kadmin服务
service krb5kdc start
service kadmin start
9. 然后登录到集群的其他节点,运行以下命令
yum install krb5-workstation krb5-libs krb5-auth-dialog openldap-clients cyrus-sasl-plain cyrus-sasl-gssapi 在所有节点上安装kerberos的客户端
然后,回到CLoudera Manager,点击集群,操作,在下拉菜单找到启用kerberos或启用安全。然后所有选项打钩,下一步,下一步,下一步,一直到完事。
所有步骤完成之后,你就可以使用kerberos增强的hadoop集群了
这里有几个在安装安全集群中可能会遇到的问题
我如何添加一个新的用户pricipal?
kadmin.local -q "addprinc username@PG.COM" 需要注意的是,当你想添加了一个普通用户到集群时,你需要在Kadmin的服务器上运行上面的命令,并且,username@PG.COM是一个常规用户,如果你想添加一个管理员用户,你需要写成username/admin@PG.COM,/admin是你在kadm.acl里面定义的。有时候你需要增加的用户需要包含主机名,那么就写成username/FQDN@YOURREALM.COM,FQDN意思是完整的主机名,比如xianglei/git.xianglei.tech@XIANGLEI.TECH.
我如何管理HDFS或YARN,我的意思是,我如何使用hdfs或者yarn用户来管理集群?
好吧,由于Cloudera Manager会自动创建诸如hdfs,yarn,hbase等用户,并且这些用户都是nologin且没有任何密码的,在kerberos里面也是用-randkey然后xst直接创建keytab的。同时这些用户都是Hadoop的管理用户所以你不能直接用以下命令来向KDC请求授权ticket。正常用户都是用kinit username,并且输入密码来验证授权的,但是hadoop的这些账户不可以。
# kinit hdfs
kinit: Client not found in Kerberos database while getting initial credentials
# kinit hdfs@PG.COM
kinit: Client not found in Kerberos database while getting initial credentials
但是你可以像这样使用keytab来请求ticket
kinit -kt hdfs.keytab hdfs/current_server@PG.COM current_server是你当前登录的服务器的完整主机名,和你想访问或管理HDFS或YARN的用户名。
我使用计算Pi来进行冒烟测试,但是失败了,我已经在KDC数据库里新加了一个用户了?
17/04/24 11:18:35 INFO mapreduce.Job: Job job_1493003216756_0004 running in uber mode : false
17/04/24 11:18:35 INFO mapreduce.Job: map 0% reduce 0%
17/04/24 11:18:35 INFO mapreduce.Job: Job job_1493003216756_0004 failed with state FAILED due to: Application application_1493003216756_0004 failed 2 times due to AM Container for appattempt_1493003216756_0004_000002 exited with exitCode: -1000
For more detailed output, check application tracking page:http://pg-dmp-master1.hadoop:8088/proxy/application_1493003216756_0004/Then, click on links to logs of each attempt.
Diagnostics: Application application_1493003216756_0004 initialization failed (exitCode=255) with output: main : command provided 0
main : run as user is dmp
main : requested yarn user is dmp
User dmp not found
Failing this attempt. Failing the application.
17/04/24 11:18:35 INFO mapreduce.Job: Counters: 0
Job Finished in 1.094 seconds
java.io.FileNotFoundException: File does not exist: hdfs://PG-dmp-HA/user/dmp/QuasiMonteCarlo_1493003913376_864529226/out/reduce-out
at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1257)
at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1249)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1249)
at org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1817)
at org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1841)
at org.apache.hadoop.examples.QuasiMonteCarlo.estimatePi(QuasiMonteCarlo.java:314)
at org.apache.hadoop.examples.QuasiMonteCarlo.run(QuasiMonteCarlo.java:354)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.examples.QuasiMonteCarlo.main(QuasiMonteCarlo.java:363)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)