http://xubo8118.blog.163.com/blog/static/1855523322013918103857226/
关于:
参考Cloudera官方文档:Configuring Hadoop Security in CDH3
一、部署无kerberos认证的Hadoop环境
参考另一篇笔记:hadoop集群部署
或者按照Cloudera的官方文档:CDH3 Installation Guide.
二、环境说明
1、主机名
之前部署hadoop集群时,没有使用节点的hostname,而是在hosts文件里添加了ip要域名的解析,部署后的hadoop没有问题,但是在为集群添加kerberos认证时因为这一点,遇到很多的问题。所以,建议还是使用节点的hostname来做解析。
集群中包含一个NameNode/JobTracker,两个DataNode/TaskTracker。
hosts文件
- 172.18.6.152 nn.hadoop.local
- 172.18.6.143 dn143.hadoop.local
- 172.18.6.145 dn145.hadoop.local
2、hadoop安装部署相关
hadoop 和kerberos的部署需要hadoop-sbin和hadoop-native。
如果使用的是rpm部署的hadoop,需要安装上面的两个rpm包。
我的集群使用的是tar包部署的,所以默认是包含这两部分文件的,可以检查一下:
hadoop-sbin对应的文件是:
/usr/local/hadoop/sbin/Linux-amd64-64
文件夹中包含两个文件:jsvc、task-controller
hadoop-native对应的目录是:
/usr/local/hadoop/lib/native
3、AES-256加密
我的系统使用的是centos6.2和centos5.7,对于使用centos5.6及以上的系统,默认使用AES-256来加密的。这就需要集群中的所有节点和hadoop user machine上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File
打开上面的链接,在页面的下方,下载jdk对应的文件,jdk1.6.0_22下载下面的文件:
注:如果后面出现login failed的错误,应先检查是否是从官方网站下载的JCE。
下载的文件是一个zip包,解开后,将里面的两个文件放到下面的目录中:
/usr/java/jdk1.6.0_22/jre/lib/security
注:也可以不使用AED-256加密,方法见官方文档对应的部分。
三、部署KDC
1、安装kdc server
只需要在kdc中安装
yum install krb5-server.x86_64 krb5-devel.x86_64
2、配置文件
kdc服务器涉及到三个配置文件:
/etc/krb5.conf、
/var/kerberos/krb5kdc/kdc.conf、
/var/kerberos/krb5kdc/kadm5.acl
hadoop集群中其他服务器涉及到的kerberos配置文件:/etc/krb5.conf。
将kdc中的/etc/krb5.conf拷贝到集群中其他服务器即可。
集群如果开启selinux了,拷贝后可能需要执行restorecon -R -v /etc/krb5.conf
/etc/krb5.conf
- [logging]
- default = FILE:/var/log/krb5libs.log
- kdc = FILE:/var/log/krb5kdc.log
- admin_server = FILE:/var/log/kadmind.log
- [libdefaults]
- default_realm = for_hadoop
- dns_lookup_realm = false
- dns_lookup_kdc = false
- ticket_lifetime = 24h
- renew_lifetime = 2d
- forwardable = true
- renewable = true
- [realms]
- for_hadoop = {
- kdc = 172.18.6.152:88
- admin_server = 172.18.6.152:749
- }
- [domain_realm]
- [kdc]
- profile=/var/kerberos/krb5kdc/kdc.conf
- [kdcdefaults]
- kdc_ports = 88
- kdc_tcp_ports = 88
- [realms]
- for_hadoop = {
- master_key_type = aes256-cts
- max_life = 25h
- max_renewable_life = 4w
- 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 des-hmac-sha1:normal des-cbc-md
- 5:normal des-cbc-crc:normal
- }
/var/kerberos/krb5kdc/kadm5.acl
- */admin@for_hadoop *
3、创建数据库
- #kdb5_util create -r for_hadoop -s
该命令会在/var/kerberos/krb5kdc/目录下创建principal数据库。
4、关于kerberos的管理
可以使用kadmin.local或kadmin,至于使用哪个,取决于账户和访问权限:
kadmin.local(on the KDC machine)or kadmin (from any machine)
如果有访问kdc服务器的root权限,但是没有kerberos admin账户,使用kadmin.local
如果没有访问kdc服务器的root权限,但是用kerberos admin账户,使用kadmin
5、创建远程管理的管理员
- #kadmin.local
- addprinc root/admin@for_hadoop
密码不能为空,且需妥善保存。
6、创建测试用户
- #kadmin.local
- addprinc test
7、常用kerberos管理命令
- #kadmin.local
- 列出所有用户 listprincs
- 查看某个用户属性,如 getprinc hdfs/nn.hadoop.local@for_hadoop
- 注意,是getprinc,没有's'
- 添加用户 addprinc
- 更多,查看帮助
8、添加kerberos自启动及重启服务
- chkconfig --level 35 krb5kdc on
- chkconfig --level 35 kadmin on
- service krb5kdc restart
- service kadmin restart
9、测试
使用之前创建的test用户
- # kinit test
- Password for test@for_hadoop:
- #
- # klist -e
- Ticket cache: FILE:/tmp/krb5cc_0
- Default principal: test@for_hadoop
- Valid starting Expires Service principal
- 06/14/12 15:42:33 06/15/12 15:42:33 krbtgt/for_hadoop@for_hadoop
- renew until 06/21/12 15:42:33, Etype (skey, tkt): AES-256 CTS mode with 96-bit SHA-1 HMAC, AES-256 CTS mode with 96-bit SHA-1 HMAC
- Kerberos 4 ticket cache: /tmp/tkt0
- klist: You have no tickets cached
四、为hadoop创建认证规则(Principals)和keytab
1、一些概念
Kerberos principal用于在kerberos加密系统中标记一个唯一的身份。
kerberos为kerberos principal分配tickets使其可以访问由kerberos加密的hadoop服务。
对于hadoop,principals的格式为username/fully.qualified.domain.name@YOUR-REALM.COM.
keytab是包含principals和加密principal key的文件。
keytab文件对于每个host是唯一的,因为key中包含hostname。keytab文件用于不需要人工交互和保存纯文本密码,实现到kerberos上验证一个主机上的principal。
因为服务器上可以访问keytab文件即可以以principal的身份通过kerberos的认证,所以,keytab文件应该被妥善保存,应该只有少数的用户可以访问。
按照Cloudrea的文档,我们也使用两个用户hdfs和mapred,之前已经在linux上创建了相应的用户。
2、为集群中每个服务器节点添加三个principals,分别是hdfs、mapred和host。
- 创建hdfs principal
- kadmin: addprinc -randkey hdfs/nn.hadoop.local@for_hadoop
- kadmin: addprinc -randkey hdfs/dn143.hadoop.local@for_hadoop
- kadmin: addprinc -randkey hdfs/dn145.hadoop.local@for_hadoop
- 创建mapred principal
- kadmin: addprinc -randkey mapred/nn.hadoop.local@for_hadoop
- kadmin: addprinc -randkey mapred/dn143.hadoop.local@for_hadoop
- kadmin: addprinc -randkey mapred/dn145.hadoop.local@for_hadoop
- 创建host principal
- kadmin: addprinc -randkey host/nn.hadoop.local@for_hadoop
- kadmin: addprinc -randkey host/dn143.hadoop.local@for_hadoop
- kadmin: addprinc -randkey host/dn145.hadoop.local@for_hadoop
- 创建完成后,查看:
- kadmin: listprincs
3、创建keytab文件
创建包含hdfs principal和host principal的hdfs keytab
- kadmin: xst -norandkey -k hdfs.keytab hdfs/fully.qualified.domain.name host/fully.qualified.domain.name
创建包含mapred principal和host principal的mapred keytab
- kadmin: xst -norandkey -k mapred.keytab mapred/fully.qualified.domain.name host/fully.qualified.domain.name
注:上面的方法使用了xst的norandkey参数,有些kerberos不支持该参数,我在Centos6.2上即不支持该参数。
当不支持该参数时有这样的提示:Principal -norandkey does not exist.
需要使用下面的方法来生成keytab文件。
生成独立key
- # cd /var/kerberos/krb5kdc
- #kadmin
- kadmin: xst -k hdfs-unmerged.keytab hdfs/nn.hadoop.local@for_hadoop
- kadmin: xst -k hdfs-unmerged.keytab hdfs/dn143.hadoop.local@for_hadoop
- kadmin: xst -k hdfs-unmerged.keytab hdfs/dn145.hadoop.local@for_hadoop
- kadmin: xst -k mapred-unmerged.keytab mapred/nn.hadoop.local@for_hadoop
- kadmin: xst -k mapred-unmerged.keytab mapred/dn143.hadoop.local@for_hadoop
- kadmin: xst -k mapred-unmerged.keytab mapred/dn145.hadoop.local@for_hadoop
- kadmin: xst -k host.keytab host/nn.hadoop.local@for_hadoop
- kadmin: xst -k host.keytab host/dn143.hadoop.local@for_hadoop
- kadmin: xst -k host.keytab host/dn145.hadoop.local@for_hadoop
使用ktutil 合并前面创建的keytab
- # cd /var/kerberos/krb5kdc
- #ktutil
- ktutil: rkt hdfs-unmerged.keytab
- ktutil: rkt host.keytab
- ktutil: wkt hdfs.keytab
- ktutil: clear
- ktutil: rkt mapred-unmerged.keytab
- ktutil: rkt host.keytab
- ktutil: wkt mapred.keytab
这个过程创建了两个文件,hdfs.keytab和mapred.keytab,分别包含hdfs和host的principals,mapred和host的principals。
使用klist显示keytab文件列表,一个正确的hdfs keytab文件看起来类似于:
- #cd /var/kerberos/krb5kdc
- #klist -e -k -t hdfs.keytab
- Keytab name: WRFILE:hdfs.keytab
- slot KVNO Principal
- ---- ---- ---------------------------------------------------------------------
- 1 7 host/fully.qualified.domain.name@YOUR-REALM.COM (DES cbc mode with CRC-32)
- 2 7 host/fully.qualified.domain.name@YOUR-REALM.COM (Triple DES cbc mode with HMAC/sha1)
- 3 7 hdfs/fully.qualified.domain.name@YOUR-REALM.COM (DES cbc mode with CRC-32)
- 4 7 hdfs/fully.qualified.domain.name@YOUR-REALM.COM (Triple DES cbc mode with HMAC/sha1)
验证是否正确合并了key,使用合并后的keytab,分别使用hdfs和host principals来获取证书。
- # kinit -k -t hdfs.keytab hdfs/fully.qualified.domain.name@YOUR-REALM.COM
- # kinit -k -t hdfs.keytab host/fully.qualified.domain.name@YOUR-REALM.COM
如果出现错误:
"kinit: Key table entry not found while getting initial credentials",
则上面的合并有问题,重新执行前面的操作。
4、部署kerberos keytab文件
在集群中所有节点,执行下面的操作来部署hdfs.keytab和mapred.keytab文件
拷贝hdfs.keytab和mapred.keytab文件到hadoop可以访问的目录。
- scp hdfs.keytab mapred.keytab host:/usr/local/hadoop/conf
确保hdfs.keytab对hdfs用户可读
确报mapred.keytab对mapred用户可读
后面经常会遇到使用keytab login失败的问题,首先需要检查的就是文件的权限。
五、停止hadoop集群
六、Enable Hadoop Security
在集群中所有节点的core-site.xml文件中添加下面的配置
- <property>
- <name>hadoop.security.authentication</name>
- <value>kerberos</value> <!-- A value of "simple" would disable security. -->
- </property>
- <property>
- <name>hadoop.security.authorization</name>
- <value>true</value>
- </property>
1、在集群中所有节点的hdfs-site.xml文件中添加下面的配置
2、启动namenode
- <!-- General HDFS security config -->
- <property>
- <name>dfs.block.access.token.enable</name>
- <value>true</value>
- </property>
- <!-- NameNode security config -->
- <property>
- <name>dfs.https.address</name>
- <value><fully qualified domain name of NN>:50470</value>
- </property>
- <property>
- <name>dfs.https.port</name>
- <value>50470</value>
- </property>
- <property>
- <name>dfs.namenode.keytab.file</name>
- <value>/usr/local/hadoop/conf/hdfs.keytab</value> <!-- path to the HDFS keytab -->
- </property>
- <property>
- <name>dfs.namenode.kerberos.principal</name>
- <value>hdfs/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>dfs.namenode.kerberos.https.principal</name>
- <value>host/_HOST@YOUR-REALM.COM</value>
- </property>
- <!-- Secondary NameNode security config -->
- <property>
- <name>dfs.secondary.https.address</name>
- <value><fully qualified domain name of 2NN>:50495</value>
- </property>
- <property>
- <name>dfs.secondary.https.port</name>
- <value>50495</value>
- </property>
- <property>
- <name>dfs.secondary.namenode.keytab.file</name>
- <value>/usr/local/hadoop/conf/hdfs.keytab</value> <!-- path to the HDFS keytab -->
- </property>
- <property>
- <name>dfs.secondary.namenode.kerberos.principal</name>
- <value>hdfs/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>dfs.secondary.namenode.kerberos.https.principal</name>
- <value>host/_HOST@YOUR-REALM.COM</value>
- </property>
- <!-- DataNode security config -->
- <property>
- <name>dfs.datanode.data.dir.perm</name>
- <value>700</value>
- </property>
- <property>
- <name>dfs.datanode.address</name>
- <value>0.0.0.0:1004</value>
- </property>
- <property>
- <name>dfs.datanode.http.address</name>
- <value>0.0.0.0:1006</value>
- </property>
- <property>
- <name>dfs.datanode.keytab.file</name>
- <value>/usr/local/hadoop/conf/hdfs.keytab</value> <!-- path to the HDFS keytab -->
- </property>
- <property>
- <name>dfs.datanode.kerberos.principal</name>
- <value>hdfs/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>dfs.datanode.kerberos.https.principal</name>
- <value>host/_HOST@YOUR-REALM.COM</value>
- </property>
- # sudo -u hdfs /usr/local/hadoop/bin/hadoop namenode
- 10/10/25 17:01:46 INFO security.UserGroupInformation:
- Login successful for user hdfs/fully.qualified.domain.name@YOUR-REALM.COM using keytab file /etc/hadoop/hdfs.keytab
- 10/10/25 17:01:52 INFO security.UserGroupInformation: Login successful for user host/fully.qualified.domain.name@YOUR-REALM.COM using keytab file /etc/hadoop/hdfs.keytab
- 10/10/25 17:01:52 INFO http.HttpServer: Added global filtersafety (class=org.apache.hadoop.http.HttpServer$QuotingInputFilter)
- 10/10/25 17:01:57 INFO http.HttpServer: Adding Kerberos filter to getDelegationToken
- 10/10/25 17:01:57 INFO http.HttpServer: Adding Kerberos filter to renewDelegationToken
- 10/10/25 17:01:57 INFO http.HttpServer: Adding Kerberos filter to cancelDelegationToken
- 10/10/25 17:01:57 INFO http.HttpServer: Adding Kerberos filter to fsck
- 10/10/25 17:01:57 INFO http.HttpServer: Adding Kerberos filter to getimage
- 12/06/13 13:24:43 WARN ipc.Server: Auth failed for 127.0.0.1:63202:null
- 12/06/13 13:24:43 WARN ipc.Server: Auth failed for 127.0.0.1:63202:null
- 12/06/13 13:24:43 INFO ipc.Server: IPC Server listener on 9000: readAndProcess threw exception javax.security.sasl.SaslException: GSS initiate failed [Caused by GS***ception: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled)] from client 127.0.0.1. Count of bytes read: 0
- javax.security.sasl.SaslException: GSS initiate failed [Caused by GS***ception: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled)]
- 12/06/13 13:23:21 WARN security.UserGroupInformation: Not attempting to re-login since the last re-login was attempted less than 600 seconds before.
如果出现Login failed,应首先使用kinit的方式登陆,如果可以登陆,检查是否使用了正确的JCE jar包。然后就是检查keytab的路径及权限。
另外,第二个错误,也有可能与SELINUX有关,在所有配置不变的情况下,关闭selinux可以解决问题。但是在/var/log/audit/audit.log里没有看到相关的错误。之后不知何故,开启selinux也不会造成上面的那个问题了。
3、验证namenode是否正确启动
两种方法:
(1)访问http://machine:50070
(2)
- #hadoop fs -ls
注:如果在你的凭据缓存中没有有效的kerberos ticket,执行hadoop fs -ls将会失败。
可以使用klist来查看是否有有有效的ticket。
可以通过kinit来获取ticket.
kinit -k -t /usr/local/hadoop/conf/hdfs.ketab hdfs/nn.hadoop.local@for_hadoop
如果没有有效的ticket,将会出现下面的错误:
- 11/01/04 12:08:12 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException:
- GSS initiate failed [Caused by GS***ception: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
- Bad connection to FS. command aborted. exception: Call to nn-host/10.0.0.2:8020 failed on local exception: java.io.IOException:
- javax.security.sasl.SaslException: GSS initiate failed [Caused by GS***ception: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
即使成功的使用kinit获取了ticket,java仍然无法读取kerberos 票据缓存。
解决的办法是在使用kinit获取ticket之后使用kinit -R 来renew ticket。这样,将重写票据缓存中的ticket为java可读的格式。
但是,在使用kinit -R 时遇到一个问题,就是无法renew ticket
- kinit: Ticket expired while renewing credentials
关于是否以获取renew的ticket,取决于KDC的设置。
是否是可以获取renew的ticket,可以通过klist来查看:
如果不可以获取renw的ticket,”valid starting" and "renew until"的值是相同的时间。
我为了获取renw的ticket,做了以下的尝试:
<1>、在kdc.conf中添加默认flag
default_principal_flags = +forwardable,+renewable
但是实际没有起作用,因为查看资料,默认的principal_flags就包含了renewable,所以问题不是出在这里。
另外需要说明一点,default_principal_flags 只对这个flags生效以后创建的principal生效,之前创建的不生效,需要使用modprinc来使之前的principal生效。
<2>、在kdc.conf中添加:
- max_renewable_life = 10d
重启kdc, 重新kinit -k -t .....,重新执行kinit -R可以正常renw了。
再次验证,修改为:
- max_renewable_life = 0s
所以,是否可以获取renew的ticket是这样设置的:
默认是可以获取renew的ticket的,但是,可以renw的最长时间是0s,所以造成无法renew,解决的办法是在kdc.conf中增大该参数。
另外关于krb5.conf中的renew_lifetime = 7d参数,该参数设置该服务器上的使用kinit -R时renew的时间。
另外,也可以通过modprinc来修改max_renewable_life的值,使用modprinc修改的值比kdc.conf中的配置有更高的优先级,例如,使用modprinc设置了为7天,kdc.conf中设置了为10天,使用getprinc可以看出,实际生效的是7天。需要注意的是,即要修改krbtgt/for_hadoop@for_hadoop,也要修改类似于hdfs/dn145.hadoop.local@for_hadoop这样的prinicials,通过klist可以看出来:
- # klist
- Ticket cache: FILE:/tmp/krb5cc_0
- Default principal: hdfs/dn145.hadoop.local@for_hadoop
- Valid starting Expires Service principal
- 06/14/12 17:15:05 06/15/12 17:15:05 krbtgt/for_hadoop@for_hadoop
- renew until 06/21/12 17:15:04
- Kerberos 4 ticket cache: /tmp/tkt0
- klist: You have no tickets cached
- #kadmin.local
- modprinc -maxrenewlife 7days krbtgt/for_hadoop@for_hadoop
- getprinc krbtgt/for_hadoop@for_hadoop
- Principal: krbtgt/for_hadoop@for_hadoop
- Expiration date: [never]
- Last password change: [never]
- Password expiration date: [none]
- Maximum ticket life: 1 day 00:00:00
- Maximum renewable life: 7 days 00:00:00
- Last modified: Thu Jun 14 11:25:15 CST 2012 (hdfs/admin@for_hadoop)
- Last successful authentication: [never]
- Last failed authentication: [never]
- Failed password attempts: 0
- Number of keys: 7
- Key: vno 1, aes256-cts-hmac-sha1-96, no salt
- Key: vno 1, aes128-cts-hmac-sha1-96, no salt
- Key: vno 1, des3-cbc-sha1, no salt
- Key: vno 1, arcfour-hmac, no salt
- Key: vno 1, des-hmac-sha1, no salt
- Key: vno 1, des-cbc-md5, no salt
- Key: vno 1, des-cbc-crc, no salt
4、启动datanode
正确的启动方法应该是使用root账号
- HADOOP_DATANODE_USER=hdfs sudo -E /usr/local/hadoop/bin/hadoop datanode
- 11/03/21 12:46:57 ERROR datanode.DataNode: java.lang.RuntimeException: Cannot start secure cluster without privileged resources. In a secure cluster, the DataNode must
- be started from within jsvc. If using Cloudera packages, please install the hadoop-0.20-sbin package.
- For development purposes ONLY you may override this check by setting dfs.datanode.require.secure.ports to false. *** THIS WILL OPEN A SECURITY HOLE AND MUST NOT BE
- USED FOR A REAL CLUSTER ***.
- at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:306)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:280)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1533)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1473)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1491)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1616)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1626)
官方的解释是和jsvc有关,确实,与jsvc有关.
(1)、有可能没有安装hadoop-sbin。
(2)、确保jsv对于HADOOP_DATANODE_USER=hdfs有可执行的权限。
(3)、通过查看hadoop这个启动脚本,可以看到这样的代码:
- if [ "$EUID" = "0" ] ; then
- if [ "$COMMAND" == "datanode" ] && [ -x "$_JSVC_PATH" ]; then
- _HADOOP_RUN_MODE="jsvc"
- elif [ -x /bin/su ]; then
- _HADOOP_RUN_MODE="su"
- else
检查执行hadoop命令的用户的EUID是否为0,即root,只有root用户才去执行jsvc相关的命令。
关于EUID:linux系统中每个进程都有2个ID,分别为用户ID(uid)和有效用户ID(euid),UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程对于文件和资源的访问权限(具备等同于哪个用户的权限)。一般情况下2个ID是相同的。
5、 Set the Sticky Bit on HDFS Directories.
可以针对hdfs上的目录设置sticky bit,用于防止除superuser,owner以外的用户删除文件夹中的文件。对一个文件设置sticky bit是无效的。
八、Start up the Secondary NameNode
跳过
九、Configure Secure MapReduce
在mapred-site.xml中添加
- <!-- JobTracker security configs -->
- <property>
- <name>mapreduce.jobtracker.kerberos.principal</name>
- <value>mapred/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>mapreduce.jobtracker.kerberos.https.principal</name>
- <value>host/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>mapreduce.jobtracker.keytab.file</name>
- <value>/usr/local/hadoop/conf/mapred.keytab</value> <!-- path to the MapReduce keytab -->
- </property>
- <!-- TaskTracker security configs -->
- <property>
- <name>mapreduce.tasktracker.kerberos.principal</name>
- <value>mapred/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>mapreduce.tasktracker.kerberos.https.principal</name>
- <value>host/_HOST@YOUR-REALM.COM</value>
- </property>
- <property>
- <name>mapreduce.tasktracker.keytab.file</name>
- <value>/usr/local/hadoop/conf/mapred.keytab</value> <!-- path to the MapReduce keytab -->
- </property>
- <!-- TaskController settings -->
- <property>
- <name>mapred.task.tracker.task-controller</name>
- <value>org.apache.hadoop.mapred.LinuxTaskController</value>
- </property>
- <property>
- <name>mapreduce.tasktracker.group</name>
- <value>mapred</value>
- </property>
创建一个taskcontroller.cfg文件,路径为
<path of task-controller binary>/../../conf/taskcontroller.cfg
即/usr/local/hadoop/sbin/Linux-amd64-64/../../conf/taskcontroller.cfg
即conf目录,和site文件相同的目录
- mapred.local.dir=/hadoop_data/tmp/mapred/local
- hadoop.log.dir=/usr/local/hadoop/logs
- mapreduce.tasktracker.group=hadoop
- banned.users=hadoop,hdfs,bin
- min.user.id=500
mapred.local.dir需要和mapred-site.xml中指定的相同,否则this error message
hadoop.log.dir要和hadoop所使用的目录相同,可以在core-site.xml中指定,不同的话会报错:this error message
另外mapred.local.dir的属主为mapred用户:
- chown -R mapred.mapred /hadoop_data/tmp/mapred/local
Note
In the taskcontroller.cfg file, the default setting for the banned.users property is mapred, hdfs, and bin to prevent jobs from being submitted via those user accounts. The default setting for themin.user.id property is 1000 to prevent jobs from being submitted with a user ID less than 1000, which are conventionally Unix super users. Note that some operating systems such as CentOS 5 use a default value of 500 and above for user IDs, not 1000. If this is the case on your system, change the default setting for the min.user.id property to 500. If there are user accounts on your cluster that have a user ID less than the value specified for the min.user.id property, the TaskTracker returns an error code of 255.
In the taskcontroller.cfg file, the default setting for the banned.users property is mapred, hdfs, and bin to prevent jobs from being submitted via those user accounts. The default setting for themin.user.id property is 1000 to prevent jobs from being submitted with a user ID less than 1000, which are conventionally Unix super users. Note that some operating systems such as CentOS 5 use a default value of 500 and above for user IDs, not 1000. If this is the case on your system, change the default setting for the min.user.id property to 500. If there are user accounts on your cluster that have a user ID less than the value specified for the min.user.id property, the TaskTracker returns an error code of 255.
- chown root:mapred /usr/local/hadoop/sbin/Linux-amd64-64/task-controller
- chmod 4754 /usr/local/hadoop/sbin/Linux-amd64-64/task-controller
启动JOBTRACKER
- sudo -u mapred /usr/local/hadoop/bin/hadoop jobtracker
- FATAL mapred.JobTracker: org.apache.hadoop.security.AccessControlException: The systemdir hdfs://nn.hadoop.local:9000/hadoop_data/tmp/mapred/system is not owned by mapred
修改hdfs上对应目录的属性
- hadoop fs -chown -R mapred /hadoop_data/tmp/mapred
注意,是mapred而不是mapred.mapred,否则会变成 mapred.mapred supergroup 0 2012-06-08 11:41 /hadoop_data/tmp/mapred/system
重新启动JobTracker。
到这里JobTracker启动完成,最后一步,启动TaskTracker
修改taskcontroller.cfg文件属性,启动tasktracker时会检查(jobtracker不需要?待验证)
- chown root.mapred taskcontroller.cfg
- chmod 600 taskcontroller.cfg
- chown root:mapred /usr/local/hadoop/sbin/Linux-amd64-64/task-controller
- chmod 4754 /usr/local/hadoop/sbin/Linux-amd64-64/task-controller
- sudo -u mapred /usr/local/hadoop/bin/hadoop tasktracker
- ERROR mapred.TaskTracker: Can not start task tracker because java.io.IOException: Login failure for mapred/srv143.madeforchina.co@for_hadoop from keytab /usr/local/hadoop/mapred.keytab
另外,可以还需要修改log目录的权限
- chown -R mapred.hadoop /usr/local/hadoop/logs/
到这里,hadoop + kerberos基本完后。
后面需要做的工作包括修改启动hadoop的脚本,部署kerberos slave服务器。
相关推荐
在CDH(Cloudera Distribution Including Apache Hadoop)环境中,开启Kerberos认证能够增强数据安全性,防止未授权的访问。本文将详细阐述如何在CDH 5.15.1上配置并启用Kerberos,以及Kafka在Kerberos环境下的配置...
CDH开启Kerberos+Sentry权限控制-实施配置指南,完整的详细教程
当用户通过Kerberos认证后,提交作业时,如果此时用户登出系统,则后续的认证可以通过委托令牌(Delegation Tokens)来完成。这些令牌和Nn共享秘钥,用于模拟用户来获得执行任务的权限,委托令牌的有效期为一天,...
- 配置各个服务的XML配置文件以支持Kerberos认证 - 生成并部署各个服务器的keytab文件 2. **步骤详解** - 登录Cloudera Manager - 进入主页面 -> 设置 -> 管理 -> Kerberos - 按照向导完成Kerberos配置 - ...
本文将详细介绍如何在Flink中配置和使用带Kerberos认证的Kudu Connector。 ### 1. Kerberos认证简介 Kerberos 是一种网络认证协议,它提供基于票证的验证服务,确保用户和服务之间的通信是安全的。在Hadoop生态...
配置 Kerberos 需要将 CDH 集群的 KDC Server 服务器上的 krb5.conf 文件中的部分内容拷贝到 Windows 的 krb5.ini 文件中。注意需要将配置文件复制到正确的路径下,并且需要将环境变量配置好。包括 krb5.ini 文件...
Hadoop2.0与Kerberos的结合是一种提升Hadoop集群安全性的配置方式,它通过使用Kerberos认证协议来实现服务间的认证。Kerberos是一种网络认证协议,它允许一台主机证明它的身份给另一台主机,而无需共享密钥。以下是...
CDH(Cloudera Distribution Including Apache Hadoop)作为一款流行的大数据平台,提供了强大的安全机制,包括Kerberos认证和Sentry授权。本手册将指导您在CentOS 6.5环境下,如何在CDH5.15版本中启用Kerberos与...
接下来,需要在每个CDH组件上配置Kerberos认证,如HDFS、YARN、HBase等。通常,这涉及修改各个服务的配置文件,如core-site.xml、hdfs-site.xml等,设置安全模式,并重新启动服务。 在CDH集群中,Kerberos的安全性...
### 基于Kerberos认证的大数据权限解决方案 #### 背景介绍 随着大数据技术的广泛应用,数据安全和用户权限管理变得尤为重要。在众多的大数据处理框架中,如Apache Hadoop及其生态系统的组件(如HDFS、YARN、Hive等...
2. **安全性**:如果集群需要高安全性,可能需要启用Kerberos认证,配置相关安全策略。 3. **资源管理**:合理分配集群的CPU、内存资源,避免资源浪费或过度分配。 4. **日志管理**:配置日志滚动和归档策略,以便于...
《CDH安全技术方案》是针对大数据平台的一种安全保障策略,主要涵盖了四个关键环节:配置TLS证书、设置Kerberos认证、部署Sentry以及集成Hive。这些技术的结合使用能够确保CDH(Cloudera Distribution Including ...
2. **Kerberos安全**:CDH6.0强化了Kerberos认证,增强了数据安全性,安装时需预先配置Kerberos环境。 3. **Hive Metastore分离**:Hive元数据存储独立于HDFS,提高了查询性能。 4. **新组件**:如Impala 3.x,...
本文将围绕CDH权限管理,特别是Kerberos的安装与配置进行详细阐述。 1. 环境介绍 文档中提到的环境由四台机器组成,它们在域ZETYUN.COM下运行,分别担当不同的角色: - cdh-server:作为KDC(Key Distribution ...
安装过程中可能会涉及 parcels 和 repositories 的使用,以及集群安全性的初步设置,如Kerberos认证。 2. **服务管理**:运维手册会讲解如何启动、停止、监控和调整CDH中的各个服务,如HDFS的数据节点和名称节点...
- 完成配置后,启动Hadoop服务并运行测试作业,确保Kerberos认证成功并且能正常访问Hadoop资源。 在实际生产环境中,Kerberos结合Hadoop可以提供强大的安全保障,防止未经授权的访问。然而,配置Kerberos相对复杂...
结合CDH的安全特性,如Kerberos认证和ACLs,可以实现更高级别的数据保护。 6. **性能优化**:集成后的Apache Atlas和CDH可以共享资源,减少不必要的数据复制和传输,提高整体性能。 7. **监控与报警**:Apache ...
同时,设置安全性和资源管理策略,如Kerberos认证和YARN资源调度。 5. **部署CDH**:在CM中选择要安装的CDH组件,例如HDFS、YARN、HBase、Spark等。CM会自动处理依赖关系和配置文件。 6. **启动服务**:配置完成后...