Hadoop HDFS-部署和基本操作

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS(本章节)

我们前面介绍Hadoop的相关软件以及我们要讲解的HDFS,本小节就来讲讲基本部署操作。

1.JDK环境准备

yum -y install java-1.8.0-openjdk

2.下载HDFS软件包

wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz
tar xvf hadoop-2.10.2.tar.gz
cd hadoop-2.10.2

3.配置文件一

hdfs全局核心配置文件,这里定义了集群临时数据目录和RPC端口。​​​​​​​

 vi ./etc/hadoop/core-site.xml
 
 <configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>  <!-- NN 地址 -->
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/tmp/hadoop-data</value>  <!-- 临时数据目录 -->
  </property>
</configuration>

4.配置文件二

hdfs主配置文件,hdfs 特性配置 (副本、元数据/数据目录),临时测试我这里并没有考虑数据安全。​​​​​​​

vi ./etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>  <!-- 单机副本数必须设为1 -->
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.tmp.dir}/namenode</value> <!-- NN元数据存储路径 -->
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/datanode</value> <!-- DN数据存储路径 -->
  </property>
</configuration>

5.配置文件三

hdfs的JAVA进程环境变量,由于是yum安装的JDK,所以需要手工配置。​​​​​​​

vi etc/hadoop/hadoop-env.sh 
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre

6.初始化

这里主要是初始化储存结构和生成一些默认文件。​​​​​​​

[root@localhost hadoop-2.10.2]# ./bin/hdfs namenode -format
25/07/05 00:26:50 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost/127.0.0.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.10.2
xxxx
25/07/05 00:26:52 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1

7.配置免密登录本机

更详细的介绍,可以翻看我的临时文章:Linux进阶-sshd。​​​​​​​

ssh-keygen  #一直回车
ssh-copy-id localhost  #把本机配置免密登录

8.启动hdfs​​​​​​​

#一键启动,如果是集群可以一次启动多个节点。 
[root@localhost hadoop-2.10.2]# ./sbin/start-dfs.sh
Starting namenodes on [localhost]
localhost: starting namenode, logging to /root/hadoop-2.10.2/logs/hadoop-root-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /root/hadoop-2.10.2/logs/hadoop-root-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /root/hadoop-2.10.2/logs/hadoop-root-secondarynamenode-localhost.localdomain.out
[root@localhost hadoop-2.10.2]# 

也可以使用手工启动,注意启动顺序。

# 1. NameNode
./sbin/hadoop-daemon.sh start namenode
# 2. 等待 10 秒(确保 NN 完全启动)
sleep 10
# 3. DataNode
./sbin/hadoop-daemon.sh start datanode
# 4. SecondaryNameNode
./sbin/hadoop-daemon.sh start secondarynamenode

​​​​​​​

图片

9.基本操作

创建目录,默认只有一个空的根目录:"/",这个他和ZooKeeper和Linux基本目录结构比较类似。​​​​​​​

#先创建一个目录,默认止呕y
[root@localhost hadoop-2.10.2]# ./bin/hadoop fs -mkdir /test
[root@localhost hadoop-2.10.2]# ./bin/hadoop fs -ls /
Found 1 items
drwxr-xr-x   - root supergroup   0 2025-07-07 21:33 /test

上传下载文件​​​​​​​

#上传
[root@localhost hadoop-2.10.2]# ./bin/hadoop fs -put NOTICE.txt /test/
[root@localhost hadoop-2.10.2]# ./bin/hadoop fs -ls /test
Found 1 items
-rw-r--r--   1 root supergroup      15830 2025-07-07 21:34 /test/NOTICE.txt

#下载
[root@localhost hadoop-2.10.2]# ./bin/hadoop fs -get /test/NOTICE.txt notice.txt
[root@localhost hadoop-2.10.2]# ll notice.txt 
-rw-r--r-- 1 root root 15830 Jul  7 21:35 notice.txt

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

<think>好的,我现在要解决用户遇到的Hadoop 3.1.3 DataNode日志文件找不到的问题,错误提示是“cannot open for reading: No such file or directory”。首先,我需要分析可能的原因,然后逐步给出解决方案。 首先,用户提到的是DataNode的日志文件不存在。Hadoop的日志文件通常存放在配置的日志目录里,所以首先应该检查Hadoop的日志配置是否正确。Hadoop的日志目录配置通常在`hadoop-env.sh`或者`log4j.properties`文件中设置。我需要确认用户是否修改过这些配置,或者默认路径是否有权限问题。 接下来,考虑到用户引用了Spark历史日志目录的配置,可能他们在配置Spark时也涉及到了Hadoop的目录创建。类似地,Hadoop的DataNode日志目录可能需要在HDFS或者本地文件系统中正确创建,并且有适当的权限。例如,如果日志目录被配置在HDFS上,但实际DataNode日志应该存储在本地文件系统,这可能导致路径错误。 另一个可能性是DataNode服务没有正确启动,导致日志文件未被生成。这时候需要检查DataNode的启动状态,查看启动时的错误信息。可以通过命令`jps`查看DataNode进程是否存在,或者查看启动日志。 另外,日志文件的路径可能被错误地配置到了不存在的目录。比如,默认的日志路径可能是`/var/log/hadoop`,但实际安装时可能放在了其他位置,比如`/opt/hadoop/logs`。需要检查`hadoop-env.sh`中的`HADOOP_LOG_DIR`设置是否正确,确保该目录存在,并且有写入权限。 权限问题也是一个常见原因。如果DataNode的运行用户(比如hadoop用户)没有权限在日志目录中创建或写入文件,就会导致日志文件无法生成。需要检查日志目录的所有者权限,使用`ls -ld /path/to/logs`查看,并确保运行用户有读写权限。 还有可能是在Hadoop的配置文件`log4j.properties`中,日志文件的路径配置错误。例如,`log4j.appender.DRFA.File`指定的路径不存在或者无法访问,需要检查该文件中的相关配置项,并修正路径。 此外,用户提到的错误信息中提到的具体路径可能不存在。例如,如果日志配置指向了`/var/log/hadoop/datanode.log`,但该目录不存在,或者文件无法创建,就会报错。这时候需要手动创建目录,并赋予正确权限。 总结下来,可能的解决步骤包括: 1. 检查Hadoop的日志配置,确认日志目录路径是否正确。 2. 确保日志目录存在,并且有正确的权限设置。 3. 检查DataNode服务是否正常启动,查看启动过程中的错误输出。 4. 查看其他相关配置文件,如`log4j.properties`,确保日志路径正确。 5. 如果路径配置在HDFS上,可能需要更改为本地文件系统路径,或者确保HDFS目录存在。 在用户提供的引用中,Spark的历史日志目录配置在HDFS上,并且需要手动创建。类似地,Hadoop的DataNode日志可能也需要手动创建本地目录。因此,用户可能需要检查对应的本地目录是否存在,比如`/var/log/hadoop`,如果不存在,使用`mkdir -p`创建,并修改权限。 另外,如果用户升级了Hadoop版本,或者更改了安装路径,旧的日志路径可能仍然被引用,导致问题。需要检查所有相关的环境变量配置文件,确保路径一致。 最后,建议用户查看DataNode启动时的日志(如果有的话),或者尝试手动启动DataNode并观察输出,以便更准确地定位问题。</think>### Hadoop DataNode日志文件不存在问题解决方案 #### 1. 检查日志目录配置 Hadoop的日志目录由`hadoop-env.sh`中的`$HADOOP_LOG_DIR`变量定义,默认路径通常为`$HADOOP_HOME/logs`。 - **验证路径是否存在**: ```bash # 检查配置的日志目录(以默认路径为例) ls -l $HADOOP_HOME/logs ``` - 如果目录不存在,手动创建并授权: ```bash mkdir -p $HADOOP_HOME/logs chmod 755 $HADOOP_HOME/logs chown hadoop:hadoop $HADOOP_HOME/logs # 假设运行用户为hadoop ``` - **检查配置文件**: 在`hadoop-env.sh`中确认以下配置: ```bash export HADOOP_LOG_DIR=/path/to/your/logs ``` #### 2. 检查日志文件权限 DataNode进程需要**写入权限**才能生成日志文件: ```bash # 查看目录权限 ls -ld $HADOOP_LOG_DIR # 示例正确权限:drwxr-xr-x 2 hadoop hadoop 4096 Jul 10 10:00 logs ``` #### 3. 验证DataNode服务状态 - **确认DataNode是否启动**: ```bash jps | grep DataNode ``` - 如果未启动,检查启动命令的输出: ```bash hadoop-daemon.sh start datanode ``` - 启动失败时,查看`stderr`日志(位于`$HADOOP_LOG_DIR/hadoop-hadoop-datanode-*.log`)。 #### 4. 检查`log4j.properties`配置 在`$HADOOP_HOME/etc/hadoop/log4j.properties`中,确认日志文件路径是否有效: ```properties log4j.appender.DRFA.File=${hadoop.log.dir}/hadoop-hadoop-datanode-${hostname}.log ``` - 如果`${hadoop.log.dir}`解析错误,需手动修正为绝对路径。 #### 5. 手动触发日志生成 重启DataNode服务并观察日志生成: ```bash hadoop-daemon.sh stop datanode hadoop-daemon.sh start datanode # 检查日志文件是否生成 ls $HADOOP_LOG_DIR/hadoop-hadoop-datanode-*.log ``` #### 6. 特殊场景:容器化部署 若使用Docker/Kubernetes部署,需确保: - 日志目录已挂载到容器内 - 容器用户有写入权限 --- ### 典型错误案例 **案例**:配置文件中`HADOOP_LOG_DIR`指向未创建的目录 ```bash # hadoop-env.sh中配置 export HADOOP_LOG_DIR=/data/hadoop/logs ``` 但`/data/hadoop/logs`未创建,导致日志无法生成。 **解决方法**: ```bash mkdir -p /data/hadoop/logs chown hadoop:hadoop /data/hadoop/logs ``` --- ### 引用说明 Hadoop日志目录配置需预先创建并授权,类似Spark历史日志目录的配置要求[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值