Hadoop安全

kerberos-hadoop配置常见问题汇总

注意事项

常见问题以下(其中前面两点最多):html

  • 各目录属主组属性修改.

对于hadoop,须要改成yarn:hadoop/mapred:hdoop/hdfs:hadoop,其余组件如spark直接为spark:spark便可.java

  • 组件本地log属主组修改以及权限修改.

主要对/var/log/cluster001, /var/run/cluste001以及/data/cluster001目录下进行修改.node

  • webHDFS enable=true时,报错 configureation principal问题.

相关配置为添加,追加相关配置到hdfs-site.xml文件中.
参考:
+http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9+linux

  • 设置安全的datanode

当设置了安全的datanode时,启动datanode须要root权限,须要修改hadoop-env.sh文件.且须要安装jsvc,同时从新下载编译包commons-daemon-1.0.15.jar,并把$HADOOP_HOME/share/hadoop/hdfs/lib下替换掉.
不然报错Cannot start secure DataNode without configuring either privileged resources
参考:
http://blog.csdn.net/lalaguozhe/article/details/11570009
+http://blog.csdn.net/wulantian/article/details/42173095+c++

  • dfs.datanode.data.dir.perm权限的设置

/tmp/dfs/data权限改为755,不然报错.directory is not readable.是由于hdfs-site.xml文件中dfs.datanode.data.dir.perm权限的设置.因为datanode.dir没有设置,因此存放在默认位置/tmp.git

  • container-executor.cfg must be owned by root, but is owned by 500.

cmake src -DHADOOP_CONF_DIR=/etc/hadoop
下载源码从新编译
同时服务器得安装g++/cmake
yum install gcc-c++
yum install cmake
参考:
+http://blog.csdn.net/lipeng_bigdata/article/details/52687821+github

  • Hbase master进程启动不了.


缘由:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.
解决方法:
copy core-site.xml and hdfs-site.xml to hbase_dir/conf
参考:
http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication
虽然咱们的系统中有这两个配置文件,可是加入了kerberos以后这两个文件的更新没有同步过来.
web

  • 没有获取票据

用户访问某个服务,得先申请票据,而后经过该票据再去访问某一服务.不然,会报以下错误. 
No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt 

kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab hdfs/node1@HADOOP.COM
参考:
+http://www.cnblogs.com/morvenhuang/p/4607790.html+
api

  • java.io.IOException: All specified directories are failed to load

缘由:格式化时致使datanode和namenode的clusterID不一致
解决办法:
方法1.进入tmp/dfs,修改VERSION文件便可,将datanode里version文件夹里面的内容修改为和namenode一致的.
方法2.直接删除tmp/dfs,而后格式化hdfs便可(./hdfs namenode -format)从新在tmp目录下生成一个dfs文件. 
安全

  • hadoop监控页面显示node unhealthy

缘由:目录下文件损坏或者权限不知足要求
验证: hdfs fsck /tmp/hadoop-hduser/nm-local-dir
解决办法:
看log发现是属主权限问题,而后重启resourcemanager和nodemanager进程.

  • Reduce阶段没法获取map阶段产生的中间结果

缘由:不详
解决办法:重启了相关进程后解决了.

  • Keystore报错

缘由:配置了ssl/tls,可是相关组件没有配置
解决办法:相关配置注释.这部分属于Configuring Encryption.

  • Datanode能够不使用root用户启动

缘由:采用secure datanode,因为datanode 数据传输协议没有采用Hadoop RPC,所以datanode须要认证本身

解决方案:

1.使用安全的端口,依赖jsvc,采用root用户启动进程绑定该安全端口. hdfs脚本中能够看到

2.经过sasl认证本身.从版本2.6.0开始, SASL can be used to authenticate the data transfer protocol.

这样就没必要依赖jsvc,也不须要从新编译依赖包生成新的jsvc.以前参考的资料过期了.

参考资料:

http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

  • nodemanager也能够不使用root用户启动

现象:YarnRuntimeException: Failed to initialize container executor error=13,权限不够. nodemanager一直无法启动

临时解决方案:container-executor为setuid权限()6050),属于hadoop组,一直没有找到缘由和实际的解决方案,就用root用户启动了.

缘由:机器selinux没有关闭,selinux开启的时候,ssh免密码登陆会不起做用,仍然须要手动输入密码,以前没有生效没有在乎

  • nodemanager启动失败

现象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

定位问题方法:直接运行./container-executor 会报错误 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

缘由:是因为container-executor.cfg 配置不对,其中属性值不能为空,我这边是由于"banned.users="

  • namenode启动正常,日志信息中不少 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

现象:启动namenode,namenode虽然起来了,可是namenode日志信息中不少 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

缘由:不少依赖hdfs的服务,可是没有开启安全认证,而hdfs开启了.把依赖hdfs的服务关闭,则日志信息中再也不flush该信息

  • Hadoop 2.5.2 的 Secure Mode 下, 必须用 root 经过 jsvc 启动 DataNode, 运维不方便.同时得从新下载common-daemon的包,并替换jsvc

解决方案:Hadoop2.6解决了该问题,可是须要额外配置多个参数,同时得开启https(即设置HTTPS_ONLY),能够经过hadoop用户启动datanode了

参考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

  • /home/hadoop/.keystore file not found

现象:因为使用hadoop2.6的secure mode新特性,默认须要开启https,因此须要证书问题,而以前没有配置

缘由:没有生成证书信息

解决方案:采用openssl+keytool生成keystore/truststore文件,同时修改ssl-client.xml和ssl-server.xml文件[繁琐]

 

 

常见问题以下(其中前面两点最多):

1)        各目录属主组属性修改.

对于hadoop,须要改成yarn:hadoop/mapred:hdoop/hdfs:hadoop,其余组件如spark直接为spark:spark便可.

2)        组件本地log属主组修改以及权限修改.

主要对/var/log/cluster001, /var/run/cluste001以及/data/cluster001目录下进行修改.

3)        webHDFS enable=true时,报错 configureation principal问题.

相关配置为添加,追加相关配置到hdfs-site.xml文件中.

参考:

http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cdh_sg_secure_webhdfs_config.html#topic_3_9

4)        设置安全的datanode

当设置了安全的datanode时,启动datanode须要root权限,须要修改hadoop-env.sh文件.且须要安装jsvc,同时从新下载编译包commons-daemon-1.0.15.jar,并把$HADOOP_HOME/share/hadoop/hdfs/lib下替换掉.

不然报错Cannot start secure DataNode without configuring either privileged resources

参考:

http://blog.csdn.net/lalaguozhe/article/details/11570009

http://blog.csdn.net/wulantian/article/details/42173095

5)         dfs.datanode.data.dir.perm权限的设置

/tmp/dfs/data权限改为755,不然报错.directory is not readable.是由于hdfs-site.xml文件中dfs.datanode.data.dir.perm权限的设置.因为datanode.dir没有设置,因此存放在默认位置/tmp.

6)        container-executor.cfg must be owned by root, but is owned by 500.

cmake src -DHADOOP_CONF_DIR=/etc/hadoop

下载源码从新编译

同时服务器得安装g++/cmake

yum install gcc-c++

yum install cmake

参考:

http://blog.csdn.net/lipeng_bigdata/article/details/52687821

7)        Hbase master进程启动不了.

 

缘由:recently tried to set up Kerberos-secured Hadoop cluster and encountered the same problem. I found that the cause is my hbase user (the user used to launch Hbase service) has no necessary environment settings of Hadoop such as HADOOP_CONF_DIR. You can verify if your user account has those settings.

解决方法:

copy core-site.xml and hdfs-site.xml to hbase_dir/conf

参考:

http://stackoverflow.com/questions/21338874/hbase-keeps-doing-simple-authentication

虽然咱们的系统中有这两个配置文件,可是加入了kerberos以后这两个文件的更新没有同步过来.

8)        没有获取票据

用户访问某个服务,得先申请票据,而后经过该票据再去访问某一服务.不然,会报以下错误.

No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt

 

 

kinit -k -t /etc/cluster001/SERVICE-HADOOP-83ec0e0240fc4ebe92a4d79a5ca138af/hdfs.keytab  hdfs/node1@HADOOP.COM

参考:

http://www.cnblogs.com/morvenhuang/p/4607790.html

9)        java.io.IOException: All specified directories are failed to load

缘由:格式化时致使datanode和namenode的clusterID不一致

解决办法:

方法1.进入tmp/dfs,修改VERSION文件便可,将datanode里version文件夹里面的内容修改为和namenode一致的.

方法2.直接删除tmp/dfs,而后格式化hdfs便可(./hdfs namenode -format)从新在tmp目录下生成一个dfs文件.

 

 

10)     hadoop监控页面显示node unhealthy

缘由:目录下文件损坏或者权限不知足要求

验证: hdfs fsck /tmp/hadoop-hduser/nm-local-dir

解决办法:

看log发现是属主权限问题,而后重启resourcemanager和nodemanager进程.

 

11)    Reduce阶段没法获取map阶段产生的中间结果

缘由:不详

解决办法:重启了相关进程后解决了.

 

12)    Keystore报错

缘由:配置了ssl/tls,可是相关组件没有配置

解决办法:相关配置注释.这部分属于Configuring Encryption.

13)  Datanode能够不使用root用户启动

缘由:采用secure datanode,因为datanode 数据传输协议没有采用Hadoop RPC,所以datanode须要认证本身

解决方案:

1.使用安全的端口,依赖jsvc,采用root用户启动进程绑定该安全端口. hdfs脚本中能够看到

2.经过sasl认证本身.从版本2.6.0开始, SASL can be used to authenticate the data transfer protocol.

这样就没必要依赖jsvc,也不须要从新编译依赖包生成新的jsvc.以前参考的资料过期了.

参考资料:

http://stackoverflow.com/questions/27401033/hdfs-datanode-not-starting-with-kerberos

14)  nodemanager也能够不使用root用户启动

现象:YarnRuntimeException: Failed to initialize container executor error=13,权限不够. nodemanager一直无法启动

临时解决方案:container-executor为setuid权限()6050),属于hadoop组,一直没有找到缘由和实际的解决方案,就用root用户启动了.

缘由:机器selinux没有关闭,selinux开启的时候,ssh免密码登陆会不起做用,仍然须要手动输入密码,以前没有生效没有在乎

15)  nodemanager启动失败

现象:ExitCodeException exitCode=24: Can't get configured value for yarn.nodemanager.linux-container-executor.group

定位问题方法:直接运行./container-executor 会报错误 configuration tokenization failed Can't get configured value for yarn.nodemanager.linux-container-executor.group.

缘由:是因为container-executor.cfg 配置不对,其中属性值不能为空,我这边是由于"banned.users="

16)  namenode启动正常,日志信息中不少 AccessControlException: SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]

现象:启动namenode,namenode虽然起来了,可是namenode日志信息中不少 AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]

缘由:不少依赖hdfs的服务,可是没有开启安全认证,而hdfs开启了.把依赖hdfs的服务关闭,则日志信息中再也不flush该信息

17)  Hadoop 2.5.2 的 Secure Mode 下, 必须用 root 经过 jsvc 启动 DataNod

运维不方便.同时得从新下载common-daemon的包,并替换jsvc

解决方案:Hadoop2.6解决了该问题,可是须要额外配置多个参数,同时得开启https(即设置HTTPS_ONLY),能够经过hadoop用户启动datanode了

参考:http://secfree.github.io/blog/2015/07/01/sasl-data-transfer-protocol.html

18)  /home/hadoop/.keystore file not found

现象:因为使用hadoop2.6的secure mode新特性,默认须要开启https,因此须要证书问题,而以前没有配置

缘由:没有生成证书信息

解决方案:采用openssl+keytool生成keystore/truststore文件,同时修改ssl-client.xml和ssl-server.xml文件

 

 

 

19)    配置authorization中hadoop-policy文件修改让其生效

操做: 更新namenode相关属性, bin/hdfs dfsadmin -refreshServiceAcl

       错误提示:

     

缘由:没法更新或者hadoop-policy文件或security.refresh.policy.protocol.acl配置中没有该用户.

解决办法:重启namenode/datanode进程或者切换正确配置的用户.

20)    用户没有对hdfs操做的权限

错误提示:

 

解决办法: security.client.protocol.acl配置中加入该用户

21)    Namenode认证超时,启动失败

    启动hadoop某一角色失败,从日志中能够看出是time out问题,说明是链接服务器失败,这里是链接kerberos server失败.接下来往下继续定位是服务没有起来仍是客户端端口号弄错了.

22)    kerberos客户端链接不上kdc server

修改/etc/krb5.conf中的kdc和admin_server对应的主机,操做便可.有时还须要登陆kerberos server对应节点,节点重启krb5kdc和kadmind进程,使其生效.

23)     没有kdc操做权限

     kerberos server能够经过sbin/kadmin.local(local单词可知表示经过本机器登陆)直接操做,如listprincs,而经过bin/kadmin至关于远程登陆,都直接报错,表示没有操做权限.

此时若是远程登陆也须要具备该权限,只须要在kerberos server节点增长kadm5.acl该文件(文件存放路径在kdc.conf中指定),而后重启krb5kdc和kadmind进程.

文件内容以下:

*/admin@HADOOP.COM *

 

24)    Webhdfs配置认证后,须要输入user.name(也取消webhdfs认证)

 

 

配置webhdfs的simple模式认证,访问得加入user.name

http://10.1.24.228:50070?user.name=hadoop

相关文章
相关标签/搜索