为什么Datanode进程在wsl中没有运行?

Why Datanode process didn't run in wsl?

我已经在 wsl 中设置并配置了我的 hadoop,但是当我启动 dataNode 时,它​​不起作用。 这是日志

2020-03-24 23:47:08,788 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT]
2020-03-24 23:47:09,809 WARN org.apache.hadoop.util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2020-03-24 23:47:10,199 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid dfs.datanode.data.dir /mnt/d/hadoop/hadoop-2.7.1/tmp/dfs/data : 
ExitCodeException exitCode=1: chmod: changing permissions of '/mnt/d/hadoop/hadoop-2.7.1/tmp/dfs/data': Operation not permitted

    at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)
    at org.apache.hadoop.util.Shell.run(Shell.java:456)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)
    at org.apache.hadoop.util.Shell.execCommand(Shell.java:815)
    at org.apache.hadoop.util.Shell.execCommand(Shell.java:798)
    at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:728)
    at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.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:2344)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2386)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2368)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2260)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2307)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2484)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2508)
2020-03-24 23:47:10,207 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.io.IOException: All directories in dfs.datanode.data.dir are invalid: "/mnt/d/hadoop/hadoop-2.7.1/tmp/dfs/data/" 
    at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2395)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2368)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2260)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2307)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2484)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2508)
2020-03-24 23:47:10,209 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2020-03-24 23:47:10,213 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at DESKTOP-U1EOV4J.localdomain/127.0.1.1
************************************************************/

我想让我的windows目录中的dataNode和nameNode目录(比如在mnt/d/hadoop/hadoop-2.7.1/tmp中)但是失败了。

我尝试使用chmod 777 -R hadoop /mnt/d/hadoop但它仍然无法启动。我也厌倦了删除 tmp 目录并重新格式化 namenode。

但是当我把目录改到/home/hadoop/tmp(我的wsl目录)时,dataNode可以正常启动。

根据日志文件,我认为这是权限问题,但我不知道为什么。我该如何解决这个问题?

我已经解决了这个问题,这是windows权限造成的。

wsl 中/mnt 下的文件不能修改权限

当您使用 chown 或 chmod 时,它们实际上不起作用。

您需要先使用以下说明。

sudo umount /mnt/d
sudo mount -t drvfs D: /mnt/d -o metadata

然后你可以在wsl中更改文件的权限。

您可以在此处获取更多信息:https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/