java.io.ioexception:dfs.datanode.data.dir中的所有目录都无效

omjgkv6w  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(586)

我正试图让hadoop和hive在我的linux系统上本地运行,但是当我运行jps时,我注意到缺少datanode服务:

vaughn@vaughn-notebook:/usr/local/hadoop$ jps
2209 NameNode
2682 ResourceManager
3084 Jps
2510 SecondaryNameNode

如果运行bin/hadoop datanode,则会发生以下错误:

17/07/13 19:40:14 INFO datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT]
    17/07/13 19:40:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    17/07/13 19:40:15 WARN datanode.DataNode: Invalid dfs.datanode.data.dir /home/cloudera/hdata/dfs/data : 
    ExitCodeException exitCode=1: chmod: changing permissions of '/home/cloudera/hdata/dfs/data': Operation not permitted

        at org.apache.hadoop.util.Shell.runCommand(Shell.java:559)
        at org.apache.hadoop.util.Shell.run(Shell.java:476)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:723)
        at org.apache.hadoop.util.Shell.execCommand(Shell.java:812)
        at org.apache.hadoop.util.Shell.execCommand(Shell.java:795)
        at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:646)
        at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:479)
        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:2285)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2327)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2309)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2201)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2248)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2424)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2448)
    17/07/13 19:40:15 FATAL datanode.DataNode: Exception in secureMain
    java.io.IOException: All directories in dfs.datanode.data.dir are invalid: "/home/cloudera/hdata/dfs/data/" 
        at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2336)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2309)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2201)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2248)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2424)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2448)
    17/07/13 19:40:15 INFO util.ExitUtil: Exiting with status 1
    17/07/13 19:40:15 INFO datanode.DataNode: SHUTDOWN_MSG: 
    /************************************************************

SHUTDOWN_MSG: Shutting down DataNode at vaughn-notebook/127.0.1.1

那个目录看起来很不寻常,但我不认为从技术上讲它有什么问题。以下是对目录的权限:

vaughn@vaughn-notebook:/usr/local/hadoop$ ls -ld /home/cloudera/hdata/dfs/data
drwxrwxrwx 2 root root 4096 Jul 13 19:14 /home/cloudera/hdata/dfs/data

我还删除了tmp文件夹中的所有内容,并格式化了hdfs namenode。这是我的hdfs站点文件:

<configuration>

<property>
  <name>dfs.replication</name>
  <value>1</value>
  <description>Default block replication.
  The actual number of replications can be specified when the file is created.
  The default is used if replication is not specified in create time.
  </description>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/cloudera/hdata/dfs/name</value>
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/cloudera/hdata/dfs/data</value>
 </property>

</configuration>

以及我的核心站点文件:

<configuration>

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/cloudera/hdata</value>
</property>

</configuration>

在我的谷歌搜索中,我看到一些人建议运行“sudo chown”hduser:hadoop -r /usr/local/hadoop\u store”,但当我这样做时,会得到错误“chown:invalid user:”hduser:hadoop’". 我必须创建此用户和组吗?我不太熟悉这个过程。提前感谢您的帮助。

kuarbcqp

kuarbcqp1#

看起来这是一个权限问题,用于启动datanode的用户应该在data node-data目录中具有写访问权限。
在启动datanode服务之前,请尝试执行以下命令。

sudo chmod -R 777 /home/cloudera/hdata/dfs

您还可以更新owner:group using 周司令部,这是最好的选择。
编辑
如果数据节点启动仍然失败,请尝试在启动数据节点之前使用以下命令更新文件所有权。

sudo chown -R vaughn.root /home/cloudera/hdata/dfs
zed5wv10

zed5wv102#

sudo chown -R /usr/local/hadoop_store 删除hadoop\存储中的datanode namenode目录 stop-dfs.sh 以及 stop-yarn.sh hadoop fs namenode -format start-dfs.sh 以及 start dfs-yarn.sh 希望有帮助

c8ib6hqw

c8ib6hqw3#

1.sudo chown公司vaughn:hadoop -r /usr/local/hadoop\u商店
其中hadoop是组名。使用
格雷普·沃恩/etc/集团
在终端中查看您的组名。
2.清理临时目录。
3.格式化名称节点。
希望这有帮助。

vd8tlhqk

vd8tlhqk4#

还有一个可能的原因,在我的例子中是:hdfs目录在文件夹属性中的位置有两个用户名,即home/hadoop/hadoop/hdfs,所以我在hdfs-site.xml中添加了相同的目录。作为解决方案,我删除了hadoop/并将其更改为home/hadoop/hdfs,这样就解决了我的问题。

相关问题