我正在尝试让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-site文件:
<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_store”,但是当我这样做时,我得到错误“chown:invalid user:'hduser:hadoop' ”。我是否必须创建此用户和组?我对这个过程并不熟悉。提前感谢您的任何帮助。
答案 0 :(得分:2)
1.sudo chown vaughn:hadoop -R / usr / local / hadoop_store
其中hadoop是组名。使用
在您的终端grep vaughn / etc / group
中查看您的群组名称。
2.清洁临时目录。
3.格式化名称节点。
希望这有帮助。
答案 1 :(得分:1)
看起来它是权限问题,用于启动datanode的用户应该在数据节点-data目录中具有写访问权限。
尝试在启动datanode服务之前执行以下命令。
sudo chmod -R 777 /home/cloudera/hdata/dfs
您还可以使用chown命令更新所有者:group,这是最佳选择。
修改
如果数据节点启动仍然失败,请尝试在启动数据节点之前使用以下命令更新文件所有权。
sudo chown -R vaughn.root /home/cloudera/hdata/dfs
答案 2 :(得分:0)
sudo chown -R /usr/local/hadoop_store
删除hadoop_store中的datanode namenode目录
stop-dfs.sh
和stop-yarn.sh
hadoop fs namenode -format
start-dfs.sh
和start dfs-yarn.sh
希望它能帮助
答案 3 :(得分:0)
在我的情况下,还有一个可能的原因:HDFS目录在文件夹属性中的位置两次淋浴用户名,即 home / hadoop / hadoop / hdfs 因此,我在中添加了相同的目录> hdfs-site.xml 。作为解决方案,我删除了 hadoop / 并将其更改为 home / hadoop / hdfs ,这解决了我的问题。