文章目录
集群环境
这里使用的场景是Ambari:2.5.2+HDP:2.6.4
在开启kerberos论证服务后,安装过的Hadoop系列组件均可正常使用,包括hdfs、mapreduce、hive、hbase、kafka,其它组件暂未验证。
操作场景
1、禁用kerberos安全服务。
出现的问题包括:hive、hbase、kafka组件无法正常启动。
2、逐个手动启动上述组件,再启用kerberos安全服务。
3、再次禁用kerberos安全服务。
出现的问题:所有组件看起来都正常启动,但是事实上kerberos没有彻底关闭。
后边的问题及解决办法主要针对第1和第3场景。
场景一问题及解决方法
Hive服务无法启动
Hive启动不了包括Hive Metastore服务和HiveServer2服务两个 。
首先看Hive Metastore的日志:
提示的错误信息是:
KeeperErrorCode=InvalidACL for /hive/cluster/delegationMETASTORE/keys
解决办法:
进入Hive >> 配置参数 >> 高级设置hive-site
将hive.metastore.sasl.enabled修改为false;
在解决完上述问题之后,hive metastore服务可以正常启动了,但是hive server2却遇到同样的问题,查看日志发现如下错误信息:
提示的错误信息是:
KeeperErrorCode=InvalidACL for /hive/cluster/delegationHIVESERVER2/keys
解决办法:
进入Hive >> 配置参数 >>setting页面
将HiveServer2 Authentication项中,将kerberos改为none。
再次重启Hiveserver2,发现可以启动了,但是过了两分钟,发现服务又自动停止了,查看日志,发现报如下一连串错误,错误如下:
提示的错误信息是:
Unable to create a znode for this server instance.......
Error adding this HiveServer2 instance to Zookeeper......
Error starting HiveServer2 on attemp1......
HiveServer2 metrics system already initialized......
解决办法:
登陆zookeeper任一节点zkCli,删除hiveserver2目录。
rmr /hiveserver2
重启Hive服务,发现可以正常启动了。
Hbase服务启动不了
很蠢。
将Hbase >> 配置参数 >> settings界面的Security中的Enable Authentication由kerberos切换为simple即可。
Kakfa服务启动不了
这个问题有可能是个人问题。在开启kerberos服务的时候,我把Kafka Broker的listeners参数改了。
这里把PLAINTEXTSASL改回PLAINTEXT就行了。
场景二问题及解决方法
HDFS使用hadoop fs 指令出错
这一次关闭kerberos服务,遇到的问题更多。
看起来服务都好好的,但是连hadoop fs指令都无法运行,提示GSSException,看来是没有真正关闭。
进入 HDFS >> 配置参数 >> advanced >> 高级设置core-site
将hadoop.security.authentication由kerberos改为simple。
重启HDFS服务,发现服务可以启动。
重启YARN出错
由于修改了HDFS的配置,需要重启服务,YARN服务也要重启,重启的过程中出现错误如下图所示:
提示的错误信息是:
Permission denied. user=dr.who is not the owner of inode=don
解决办法:
进入HDFS >> 配置参数 >> advanced >> 自定义core-site
增加如下配置:
hadoop.http.staticuser.user=yarn
重启YARN服务发现问题解决。
HDFS的Datanode不可用
发现HDFS仍然存在问题,界面显示所有节点的datanode都正常启动,但是事实上datanode是有问题的。
监控指标中显示HDFS磁盘使用率为n/a,Datanode运行状态为0/3,说明所有的Datanode都没有正常工作。
查看datanode的日志,发现报下面错误:
提示的错误信息是:
datanode.Datanode (BPServiceActor.java:retrieveNamespaceinfo(225)) Problem connecting to server:*****
根据网上搜索资料得到的信息,HDFS在关闭kerberos的时候有下列几个参数需要修改:
hadoop.security.authtication:Kerberos修改为simple
hadoop.security.authorization:true修改为false
dfs.datanode.address:->from 10**(for kerberos)修改为50010(default)
dfs.datanode.http.address:from 10**(for kerberos)修改为50075(default)
进入HDFS >> 配置参数 >> advanced >> 高级设置hdfs-site
将上图中对应的参数修改为默认的。
参数修改保存后,重启HDFS、YARN和MapReduce,服务都可正常启动。
跑测试mr出错
重启完成后,验证服务是不是可正常使用,跑一个自带的mapreduce任务。
以root用户运行wordcount,报如下错误:
提示的错误信息是:
run as user is nobody
requested yarn user is root
Requested user nobody is not whitelisted and has id 99,which is below the minimum allowed 1000
提示run as user is nobody,并提示userid小于1000,这里肯定是nobody的问题了,不会是uid小于1000的问题,查看/etc/passwd文件可知道,nobody的uid确实是99,为啥用root登陆的,显示的是nobody呢。
网上提供的一种解决方案,将各个nodemanager(都说是datanode)节点的目录下的usercache删除掉。
找到nodemanager配置的本地目录,进入该目录下,查看usercache文件夹内容。
上图中绿蓝字这几个目录都是kerberos用户的缓存,把所有节点同目录下的缓存都删除。
然后重新提交mapreduce任务,还是不行。接着排查。
对比未安装Kerberos的集群,发现YARN有一个隔离容器参数不一样。
未安装kerberos的该参数如下:
进入 YARN >> 配置参数 >> advanced >> isolation
把yarn.nodemanager.container-executor.class由org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor改为
org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor
重启YARN服务,再次测试wordcount的mapreduce任务,发现任务可以正常提交运行了。