HDFS DataNode启动异常:/opt/jdk1.8.0_151/bin/java:权限不够
我的原创地址:https://dongkelun.com/2018/07/10/HadoopException/
前言
这个异常是在在ambari里启动DataNode产生的,其实这个问题很久就发现了,只是没时间去处理,所以之前把发生问题的slave1节点给移除了,现在有时间处理,就又把slave1加上了,所以就有了ambari 异常总结及解决办法里面的问题,这个java权限不够的问题,在添加slave1之后,并安装datanode和nodemanager之后启动服务依然报错。
异常信息:
/usr/hdp/2.6.4.0-91//hadoop-hdfs/bin/hdfs.distro:行317: /opt/jdk1.8.0_151/bin/java: 权限不够 /usr/hdp/2.6.4.0-91//hadoop-hdfs/bin/hdfs.distro: 第 317 行:exec: /opt/jdk1.8.0_151/bin/java: 无法执行: 权限不够
这个问题在网上找也找不到对应的解决办法,所以有必要单独记录一下,没有放在ambari 异常总结及解决办法,且我认为即使不用ambari,该问题依然可能会发生。
1、详细异常信息
部分截图:
2、解决思路
首先确定java是否有问题,经过简单的测试,没发现问题,然后在/usr/hdp/2.6.4.0-91//hadoop-hdfs/bin/hdfs.distro查看第317行的内容,发现hdfs命令实际调用的java命令,但是一开始并不知道怎么解决这个问题,通过查看ambari的日志也并没有解决问题,最后回到jdk目录的权限问题。
首先有问题的时候
su - hdfs hdfs -ls
执行上面的命令也是会报同样的问题,所以就不用在ambari里启动datanode服务就可以测试有没有问题了
3、解决办法
3.1 改变/opt的所有者给hdfs(只将jdk目录的给hdfs没有解决问题,没有深究其原因,可能因为还有其他目录和jdk有关联)
chown -R hdfs:hdfs /opt/
然后用hdfs -ls测试,发现没有上面的异常,这样就可以在在ambari里启动datanode了,启动成功!
3.2 启动nodemanager报错
/usr/hdp/2.6.4.0-91//hadoop-yarn/bin/yarn.distro:行376: /opt/jdk1.8.0_151/bin/java: 权限不够 /usr/hdp/2.6.4.0-91//hadoop-yarn/bin/yarn.distro: 第 376 行:exec: /opt/jdk1.8.0_151/bin/java: 无法执行: 权限不够
异常信息一样,只是文件名不一样,同样的方法解决
chown -R yarn:yarn /opt/
启动nodemanager成功!
然后重启ambari所有服务,看一下是否还有问题,结果slave1启动datanode时报了同样的错误,问了一下同事,发现我对chown -R上面的命令有所误解,我开始认为是让hdfs拥有opt的权限,只想上面两步后,hdfs和yarn都有了opt的权限,但是其实该命令是更改opt的所有者,执行上面的两步之后,只有yarn拥有opt的权限了,也就是将hdfs覆盖了。
3.3 让hadoop组都拥有opt的权限
chown -R yarn:hadoop /opt/ chmod -R 770 /opt
大概解释一下上面的命令,首先更改opt的所有者为hadoop组下面的yarn用户(yarn和hdfs都属于hadoop组)
然后770的意思是用户和用户组对opt目录具有rwx的权限,其他用户没有任何权限,这样hdfs用户也有opt的权限了,这样重启ambari的所有服务就会成功了!
3.4 最后的方法
上面命令是同事帮忙操作的,然后发现自己对Linux权限不太了解,就大概查了一下权限相关的资料,因为之前已经把opt的权限弄乱了,所以最后先这样解决(测试环境,且opt目录一般就我们几个人用)
首先将opt的所有者改回为root
chown -R root:root /opt/
然后更改opt的权限为755
chmod -R 755 /opt
755的意思为用户的权限为rwx,用户组和其他人的权限均为r-x,即没有写权限,一般文件权限也是755(应该也是默认的,可以自己新建一个文件夹进行测试),然后这样重启ambari的所有服务也是没有问题的
因为-R是递归的,这样其实不好,因为有些txt,readme的权限也改了,所以我将opt下面的jdk目录删除并重新解压了一份。
opt各目录权限截图:
权限问题参考:http://justcode.ikeepstudying.com/2016/08/linux-chmod-和-chown用法小结/
4、总结
其实该问题只修改jdk相关的目录的权限即可,但是之前已经递归修改opt的目录,所以暂时只能按照3.4的办法解决。该异常出现的原因应该是才平时的操作中,误修改了jdk的权限,为了防止出现这种问题,平时在操作中关于chmod -R等相关的操作一定要慎用。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SQL SERVER导出特殊格式的平面文件
原文: SQL SERVER导出特殊格式的平面文件 有时候我们需要将SQL SERVER的数据一次性导入到ORACLE中,对于数据量大的表。我一般习惯先从SQL SERVER导出特殊格式的平面文件(CSV或TXT),然后用SQL*Loader装载数据到ORACLE数据库。 有时候由于一些特殊数据,我们需要导出一些特殊格式的文件,例如: 1:导出的平面文件,字段分隔符不要用逗号, 而使用其它分隔符,例如 | 或 &等 2:我们需要一些我们需要导出的CSV格式的文件,每个字段都用双引号“”括起来 1:导出的平面文件,字段分隔符不要用逗号, 而使用其它分隔符,例如 | 或 &等 我们先看问题1吧,例如,我们需要导出sys.objects下所有对象,在查询结果中选中所有对象,然后单击右键,选择”Save Results As"时有可以保持为CSV、TXT或其它文件格式, 此时默认的分隔符都为逗号,如果我想用|或&等特殊字符来分隔字段,怎么处理呢? 方法1: 在SSMS的“工具”->"选项“->"查询结果"(Query Results)->"SQ...
- 下一篇
python 格式化输出
python格式化输出有两种方式:百分号和format format的功能要比百分号方式强大,其中format独有的可以自定义字符填充空白、字符串居中显示、转换二进制、整数自动分割、百分比显示 等功能是百分号方式不能相比的 1.百分号方式 #!/usr/bin/env python # -*- coding: UTF-8 -*- s1 = "i am %s, i am %d years old" % ('jeck',26) #按位置顺序依次输出 s2 = "i am %(name)s, i am %(age)d years old" % {'name':'jeck','age':26} #自定义key输出 s3 = "i am %(name)+10s, i am %(age)d years old, i am %(height).2f" % {'name':'jeck','age':26,'height':1.7512} #定义名字宽度为10,并右对齐.定义身高为浮点类型,保留小数点2位 s4 = "原数: %d, 八进制:%o , 十六进制:%x" % (15,15,15) #八进制...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境