Hadoop启动后发现datanode没有启动,data下没有current文件夹

本文讲述了作者在格式化并启动Hadoop过程中遇到DataNode不启动的问题,经过排查发现是由于datanode日志权限问题导致。通过检查log文件和调整文件权限,最终解决了问题并能正常访问HadoopUI.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

刚格式化完Hadoop,使用start-dfs.sh启动,中途命令行没有打印错误,但jps后发现没有datanode:

排查过程

看到网上有人说可能是重复使用hadoop的命令格式化的时候,namenode的clusterID会重新生成,而datanode的clusterID会保持不变:执行start-dfs.sh后,DataNode未启动 - 简书

我的hdfs-site.xml配置如下:

打开usr/hadoop/hdfs/name,发现里面有current文件夹,但usr/hadoop/hdfs/data下空空如也。

还好也有人碰到了类似的问题:Hadoop下jps没有datanode,且data文件夹没有current_格式化后找不到current-CSDN博客,但当我在命令行中输入

vim hadoop-hadoop-datanode-ubuntu.log

 却出现了以下场景:

意思是我的datanode根本没有生成日志。

我换成网上搜到的另一个命令

cat hadoop-root-datanode-localhost.localdomain.log

继续打印日志,结果告诉我No such file or directory: 

我又不死心地切换到Hadoop安装目录下,使用

bin/hadoop logs -loglevel WARN

尝试打印warn级别以上的日志,居然告诉我找不到或无法加载主类log:

我又想到是不是SSH的问题,我使用的是免密登录,检查一番之后发现也并无异常。

于是我打算把Hadoop数据都删了重新格式化。首先输入stop-dfs.sh关闭Hadoop服务,然后打开core-site.xml,找到临时文件夹 :

把usr/hadoop/tmp整个文件夹删除,再把usr/hadoop/hdfs/name下的文件也全部删除,再次运行

hadoop namenode -format

期间并无报错,然后用start-dfs.sh再次启动Hadoop,也没有报错,但用jps一看,datanode还是没启动起来。

再尝试在Linux系统内的浏览器中输入http://localhost:9000/,居然打不开:

解决方法

我觉得再这么跟无头苍蝇似的乱转也不是个事,还是得找到错误日志。打印不出来就到文件系统里面找,在安装目录里还真找到了一个log文件夹,点进去看看:

终于找到了datanode的log文件,里面的报错信息如下:

原来是权限不够,猜想是由于建立文件夹时是在文件系统中而非命令行中,把我的身份默认为root用户了。于是修改权限,将usr/hadoop/hdfs/data的所有者改为我运行Hadoop的用户calvin:

sudo chown -R calvin /usr/hadoop/hdfs/data

 而后再度格式化并启动Hadoop,大功告成:

对了,打不开localhost:9000那个事,改成主机名:50070就打开了:

### Hadoop 集群搭建及相关核心配置 #### 1. **core-site.xml** `core-site.xml` 是用于定义 HDFS 和 YARN 的全局属性的核心配置文件。以下是常见的配置项及其说明: - `fs.defaultFS`: 定义默认的文件系统 URI,通常设置为 NameNode 的地址。 ```xml <property> <name>fs.defaultFS</name> <value>hdfs://namenode_host:8020</value> </property> ``` 这里指定了 HDFS 默认名称节点的服务端口。 - `io.file.buffer.size`: 设置 I/O 缓冲区大小以优化读写性能[^1]。 ```xml <property> <name>io.file.buffer.size</name> <value>131072</value> </property> ``` #### 2. **hdfs-site.xml** `hdfs-site.xml` 主要负责 HDFS 特定的配置选项。以下是一些重要参数: - `dfs.replication`: 指定数据块的副本数,默认值为 3。 ```xml <property> <name>dfs.replication</name> <value>3</value> </property> ``` - `dfs.namenode.name.dir`: 指定 NameNode 存储元数据的位置。 ```xml <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/namenode</value> </property> ``` - `dfs.datanode.data.dir`: 指定 DataNode 存储实际数据块的位置。 ```xml <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/datanode</value> </property> ``` #### 3. **yarn-site.xml** `yarn-site.xml` 负责 YARN 组件的具体配置。以下是几个重要的参数: - `yarn.resourcemanager.hostname`: 指定 ResourceManager 所运行的主机名。 ```xml <property> <name>yarn.resourcemanager.hostname</name> <value>resourcemanager_host</value> </property> ``` - `yarn.scheduler.minimum-allocation-mb`: 设定容器最小内存分配单位。 ```xml <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> </property> ``` - `yarn.resourcemanager.store.class`: 使用 ZooKeeper 实现 ResourceManager 状态存储功能。 ```xml <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> ``` #### 4. **mapred-site.xml** 此文件主要用于 MapReduce 的特定配置。如果未找到该文件,则可以复制模板文件并重命名为 `mapred-site.xml`。 - `mapreduce.framework.name`: 指定 MapReduce 应用程序使用的框架类型。 ```xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` - `mapreduce.map.memory.mb`: 设置 Mapper 任务可用的最大内存。 ```xml <property> <name>mapreduce.map.memory.mb</name> <value>2048</value> </property> ``` --- ### 测试与验证 完成上述配置后,可以通过以下命令测试集群的功能: - 创建目录: ```bash hadoop fs -mkdir /test_directory ``` - 上传本地文件至 HDFS: ```bash hadoop fs -put local_file_path /test_directory/ ``` - 查看 HDFS 中的数据块内容: ```bash cd /path/to/hadoop/data/dfs/data/current/BP-ID/current/finalized/subdirX/subdirY cat blk_* ``` 通过访问 Web UI 地址(如 `http://hadoop103:8088`),可进一步确认资源管理器的状态和作业执行情况[^2]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值