Hadoop 启动 HDFS DataNode 时报错:Invalid dfs.datanode.data.dir
文章目录
- 环境描述
- 问题现象
- 问题分析
- 解决方案
- 总结
环境描述
- 操作系统:CentOS 6.5
- Hadoop:Apache Hadoop 2.7.7
- HDFS Datanode 启动用户:hdfs
问题现象
使用 $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
启动 datanode 后,通过jps
发现并没有 datanode 进程,在 datanode 日志中存在以下报错信息:
2020-08-29 12:49:13,822 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid dfs.datanode.data.dir /data/datanode :
EPERM: Operation not permittedat org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method)at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:230)at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:729)at org.apache.hadoop.fs.ChecksumFileSystem$1.apply(ChecksumFileSystem.java:505)at org.apache.hadoop.fs.ChecksumFileSystem$FsOperation.run(ChecksumFileSystem.java:486)at org.apache.hadoop.fs.ChecksumFileSystem.setPermission(ChecksumFileSystem.java:502)at org.apache.hadoop.util.DiskChecker.mkdirsWithExistsAndPermissionCheck(DiskChecker.java:140)at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:156)at org.apache.hadoop.hdfs.server.datanode.DataNode$DataNodeDiskChecker.checkDir(DataNode.java:2385)at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2427)at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2409)at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2301)at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2348)at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2530)at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2554)
2020-08-29 12:49:13,824 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.io.IOException: All directories in dfs.datanode.data.dir are invalid: "/data/datanode/"at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2436)at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2409)at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2301)at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2348)at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2530)at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2554)
2020-08-29 12:49:13,825 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2020-08-29 12:49:13,827 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at slave1/192.168.90.36
************************************************************/
问题分析
Invalid dfs.datanode.data.dir /data/datanode :
EPERM: Operation not permitted
从这句错误信息中可以看出是 datanode 启动时,对 /data/datanode
这个目录进行操作时缺少某些权限,那么 datanode 是对这个目录做什么样的操作,需要怎样的权限?
EPERM: Operation not permittedat org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method)at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:230)at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:729)at org.apache.hadoop.fs.ChecksumFileSystem$1.apply(ChecksumFileSystem.java:505)at org.apache.hadoop.fs.ChecksumFileSystem$FsOperation.run(ChecksumFileSystem.java:486)at org.apache.hadoop.fs.ChecksumFileSystem.setPermission(ChecksumFileSystem.java:502)at org.apache.hadoop.util.DiskChecker.mkdirsWithExistsAndPermissionCheck(DiskChecker.java:140)at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:156)at org.apache.hadoop.hdfs.server.datanode.DataNode$DataNodeDiskChecker.checkDir(DataNode.java:2385)at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2427)at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2409)at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2301)at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2348)at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2530)at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2554)
从上面这些报错信息中可以大体猜测出,datanode 启动时,需要对指定的目录进行 chmod 操作。
static DataNode makeInstance(Collection<StorageLocation> dataDirs,Configuration conf, SecureResources resources) throws IOException {LocalFileSystem localFS = FileSystem.getLocal(conf);FsPermission permission = new FsPermission(conf.get(DFS_DATANODE_DATA_DIR_PERMISSION_KEY,DFS_DATANODE_DATA_DIR_PERMISSION_DEFAULT));DataNodeDiskChecker dataNodeDiskChecker =new DataNodeDiskChecker(permission);List<StorageLocation> locations =checkStorageLocations(dataDirs, localFS, dataNodeDiskChecker);DefaultMetricsSystem.initialize("DataNode");assert locations.size() > 0 : "number of data directories should be > 0";return new DataNode(conf, locations, resources);}
通过 hadoop 源码可以看出,datanode 需要将目录的权限,通过 chmod
改为 DFS_DATANODE_DATA_DIR_PERMISSION_DEFAULT
,DFS_DATANODE_DATA_DIR_PERMISSION_DEFAULT
是 700
。
而我这个环境里的 /data/datanode
路径所有者是 deploy
,启动 datanode 的用户却是 hdfs
,hdfs
这个用户是没有权限修改此目录的 file mode 的:
[deploy@slave1 ~]$ ll /data/
总用量 0
drwxrwxr-x 2 deploy hadoop 6 8月 28 15:48 datanode
drwxrwxr-x 2 deploy hadoop 115 8月 28 19:50 logs
drwxrwxr-x 2 deploy hadoop 6 8月 28 15:48 namenode
drwxrwxr-x 2 deploy hadoop 38 8月 28 19:50 pids
drwxrwxr-x 4 deploy hadoop 80 8月 28 16:22 software
drwxrwxr-x 3 deploy hadoop 26 8月 28 19:53 tmp
解决方案
知道了是路径所有者的问题后,只需要在 datanode 节点上将 /data/datanode
路径的所有者改为hdfs
即可:
sudo chown -R hdfs:hdfs /data/datanode/
再次启动 datanode:
[hdfs@slave1 ~]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanodeslave2: starting datanode, logging to /data/logs/hadoop-hdfs-datanode-slave2.out
slave1: starting datanode, logging to /data/logs/hadoop-hdfs-datanode-slave1.out
slave3: starting datanode, logging to /data/logs/hadoop-hdfs-datanode-slave3.out[hdfs@slave1 ~]$ jps
6771 Jps
6668 DataNode
可以看出,datanode 已经启动成功了~
总结
一些简单的问题,可以尝试这看看源代码,hadoop 的源代码地址是:https://github.com/apache/hadoop
Hadoop 启动 HDFS DataNode 时报错:Invalid dfs.datanode.data.dir相关推荐
- 启动docker容器时报错:iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT -
启动docker容器时报错: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT ...
- 启动Maven程序时报错 Error executing Maven
启动Maven程序时报错 Error executing Maven 异常信息 [INFO] Error stacktraces are turned on. [ERROR] Error execut ...
- python中使用tomorrow多线程时报错invalid syntax
python中使用tomorrow多线程时报错invalid syntax如何解决?具体报错信息如下: 解决方案: 需要点击打开tomorrow.py文件,把42行的async改个名称,因为async ...
- 启动模块服务时报错:docker: Error response from daemon: Conflict.
启动模块服务时报错:docker: Error response from daemon: Conflict. 报错信息: docker: Error response from daemon: Co ...
- [Hadoop] 启动HDFS缺少服务
启动Hadoop后使用JPS命令查看进程,发现只有NameNode和NodeManger. 原因:格式化两次namenode.导致namenode和datanode中的CID不一致. $ hadoop ...
- 启动vue项目时报错:digital envelope routines::unsupported
今天把node.js升级到了最新版v18.12.1,启动以前的vue项目时报错:digital envelope routines::unsupported,在网上查询了解决方法,记录下 1.原因: ...
- 使用maven插件整合ssm,启动tomcat系统报错 Invalid byte tag in constant pool: 19
今天在整合ssm框架做系统的时候,启动tomcat突然报错,错误显示 单纯看报错意思无法得知为什么会报这样的错误以及如何去解决这个问题.通过上网查询,得出竟然与我昨晚所学的lombok有关 我在 SS ...
- 13、hive在启动beeline客户端时报错:User: xxx is not allowed to impersonate xxx
背景 在启动完成hive服务:hive --service metastore后 启动hive2服务的过程中:hive --service hiveserver2后 启动beeline客户端时,bee ...
- Jmeter4.0分布式测试时启动Jmeter.server时报错
最近又开始研究Jmeter,将新版本4.0下载下来体验,准备远程分布式测试,又出现一些问题,废话不多说,直入主题把! Windows 系统启动Jmeter 4.0的JmeterServer.ba ...
- eclipse 项目导入时报错invalid project description
最近从网络上下载一个开源框架Demo示例,使用Eclipse导入该项目,报错:invalid project description. 经百度后,得知项目文件夹下,.project文件上项目名称必须保 ...
最新文章
- 明晚8点直播 | 顺丰科技如何利用深度学习赋能智慧物流?
- fedora java 开发环境_Linux(Fedora 14)下 java开发环境配置 ——jdk的安装与配置
- [HEOI2014]平衡(整数划分数)
- ORA-14400: inserted partition key does not map to any partition
- boost::callable_traits添加member左值引用
- reshape中的-1的含义
- iphone UITableView及UIWebView的使用
- export mysql home_mysql的Linux下安装笔记
- 微软封闭服务器切换,执行服务器切换:Exchange 2013 帮助 | Microsoft Docs
- java中生成pdf,插入图片,页眉、页脚、表格
- 以index访问Tensor元素+ 反池化 unpool TensorFlow代码
- IsPostBack是什么意思,如何运用?
- 软考-嵌入式系统设计师-笔记:历年专业英语题
- 计算机教学研修心得英语,网络研修培训心得体会(精选5篇)
- 【Python网络蜘蛛 · 6】:明文和密文的转换、json模块的使用、jsonpath模块的使用(附源代码)
- 中国石油大学计算机评估排名,中国石油大学华东学科评估结果及排名情况怎样...
- 【Python网络爬虫】实战#181024
- centos7安装yearning
- 选择产品套餐自动生成报价小程序开发制作
- xml中foreach使用_前进的火车_新浪博客