kerberos-hadoop配置常见问题汇总

注意事项

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

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

对于hadoop,需要改为yarn:hadoop/mapred:hdoop/hdfs:hadoop,其他组件如spark直接为spark:spark即可.

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

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

  • 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+

  • 设置安全的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+

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

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

  • 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+

  • 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之后这两个文件的更新没有同步过来.

  • 没有获取票据

用户访问某个服务,得先申请票据,然后通过该票据再去访问某一服务.否则,会报如下错误. 
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+

  • 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

Hadoop安全的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  3. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  4. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  5. 【Big Data】HADOOP集群的配置(一)

    Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...

  6. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  7. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  8. Hadoop 2.x 生态系统及技术架构图

    一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) 二.负责存储数据的工具:HBaseMong ...

  9. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  10. 基于Ubuntu Hadoop的群集搭建Hive

    Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...

随机推荐

  1. ssh的简单介绍

     SSH简单介绍与运用 一.什么是SSH? SSH是一种网络协议,用于计算机之间的加密登录. OpenSSH 提供了以下几个工具: 1. ssh:实现 SSH 协议,用以建立安全连接,它替代了较早的 ...

  2. JDK1.8日期时间库学习

    这周在阅读<阿里巴巴Java开发手册>时,在并发处理一节的日期处理中,其强调SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果 定义为 stati ...

  3. Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others

    http://blog.tanelpoder.com/2008/09/02/oracle-hidden-costs-revealed-part2-using-dtrace-to-find-why-wr ...

  4. iOS -- 开源项目和库

    TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 ...

  5. Go -- socket read的内容以16进制输出

    buf := make([]) reqLen, err := conn.Read(buf) // 遍历, 转为16进制 buffer := new(bytes.Buffer) for _, b := ...

  6. linux的history命令设置

    history的历史记录,同一个用户的各个会话,读取到的内容也是不一样的,原因是它读取的是shell会话缓存里的内容.只有当用户退出当前会话的时候,会话里的缓存内容才会写入~/.bash_histor ...

  7. 自定义PropertyGrid控件【转】

    自定义PropertyGrid控件 这篇随笔其实是从别人博客上载录的.感觉很有价值,整理了一下放在了我自己的博客上,希望原作者不要介意. 可自定义PropertyGrid控件的属性.也可将属性名称显示 ...

  8. const mutable

    在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的.这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改:同时也说明此成员函数是非修改性 ...

  9. [Guava源代码阅读笔记]-Basic Utilities篇-1

    欢迎訪问:个人博客 写该系列文章的目的是记录Guava源代码中个人感觉不错且值得借鉴的内容. 一.MoreObjects类 //MoreObjects.ToStringHelper类的toString ...

  10. 重新认识一遍JavaScript - 2

    1.JavaScript没有Java和C中的int.double,怎么识别这些类型的呢?或者说不支持 问:你认为呢? 答:var 支持所有数据类型(int.double.string),取决于你输入的 ...