hdfs默认数据存放路径

本文介绍了如何修改Hadoop HDFS的默认数据存放路径,包括`hadoop.tmp.dir`、`dfs.namenode.name.dir`、`dfs.datanode.data.dir`和`dfs.namenode.checkpoint.dir`的配置。重点强调了`hadoop.tmp.dir`的修改对datanode和namesecondary的影响,以及格式化HDFS和解决namenode启动问题的方法。

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

 1.{hadoop.tmp.dir}:/tmp/hadoop-${user.name} ,在core-site.xml
    修改路径到当前用户目录下:
           【/home/hyxy/tmp/hadoop】
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hyxy/tmp/hadoop</value>
                <description>A base for other temporary directories.</description>
            </property>
            控制生成的datanode和namesecondry生成的路径;
     注意:理解格式化的含义{创建dfs/name/fsimage,针对namenode守护进程}
           开启nomenode进程会失败:
               a.重新格式化,原有HDFS的数据全部删除掉;
           b.复制{/tmp/hadoop-hyxy/dfs/name}至{/home/hyxy/tmp/hadoop}路径下,重新开启namenode守护进程,问题解决;
    2. 查看系统日志
       【{HADOOP_HOME/logs/}】
    3.分别设置dfs的相关目录,在hdfs-default.xml
        name目录:
            <property>
              <name>dfs.namenode.name.dir</name>
              <value>file://${hadoop.tmp.dir}/dfs/name,file://${hadoop.tmp.dir}/dfs/name1</value>
            <description>
              确定DFS名称节点应在本地文件系统的哪个位置存储名称表(fsimage)。
               如果这是一个以逗号分隔的目录列表,则名称表将被复制到所有目录中,以实现冗余
          </description>
        </property>
    data目录:
            <property>
              <name>dfs.datanode.data.dir</name>
              <value>file://${hadoop.tmp.dir}/dfs/data</value>
            <description>
              确定DFS数据节点应该在本地文件系统上存储块的位置。
              如果这是以逗号分隔的目录列表,则数据将存储在所有已命名的目录中,通常位于不同的设备上。 应该为HDFS存储策略标记相应的存储类型([SSD] / [磁盘] / [存档] / [RAM_DISK])。
            如果目录没有显式标记存储类型,则默认存储类型为DISK。 如果本地文件系统权限允许,则不存在的目录将被创建。
          </description>
        </property>
    namesecondary目录:
        <property>
              <name>dfs.namenode.checkpoint.dir</name>
              <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
            <description>
              确定本地文件系统上DFS辅助名称节点应该存储要合并的临时图像的位置。
             如果这是一个以逗号分隔的目录列表,则图像将复制到所有目录中以实现冗余。
            </description>
        </property>

### HDFS 写入数据的方法流程 #### 数据写入方法概述 为了在分布式文件系统Hadoop Distributed File System (HDFS) 中写入数据,应用程序通常采用Java API来创建文件并写入内容。这涉及到与NameNode交互以获得目标DataNodes列表,并直接同这些DataNodes通信来进行实际的数据传输。 #### 初始化连接过程 当客户端准备向HDFS上传新文件时,它首先联系NameNode发起建立文件的过程。此时并不立即传送任何真实的数据,而是请求分配存储空间以及获取一系列适合存放该文件副本的目标DataNodes地址信息[^1]。 #### 创建管道机制 一旦得到了由NameNode返回的一组推荐用于放置首个Block的DataNodes名单后,客户端便着手构建起通往各节点之间的通讯路径——即所谓的Pipeline(管道)。此阶段还包括设置必要的参数配置如复制因子等[^3]。 #### 数据分片处理 随着pipeline的成功搭建,在正式开始发送之前,待传入的信息会被分割打包成固定大小的小单元Packet,默认情况下每64KB构成一个这样的单位。与此同时,还存在更细粒度划分出来的Chunk用来辅助校验错误检测工作。整个过程中产生的所有Packets都会被暂存于名为“数据队列”的内存缓冲区内等待进一步操作。 #### 实际数据传输环节 真正意义上的数据流动发生在上述准备工作完成后。具体而言就是从Client端发出的第一份Packet沿着预先设定好的Pipeline依次传递给每一个参与其中的Datanode直至末端。值得注意的是这里采用了流水线式的并发模式而非串行方式,从而大大提高了效率。每当有新的Block需要加入现有链条之中,则重复类似的协商定位步骤再继续扩展下去[^4]。 #### 确认反馈循环结构 在整个写入期间内始终保持着一种基于ACK信号交换形成的闭环控制系统。这意味着只有当下游接收到完整的Packet并且成功持久化至磁盘之后才会向上游回送肯定应答;反之如果遇到失败情况则触发重试逻辑甚至中断整个事务。这种设计有效保障了最终一致性的同时也兼顾到了性能表现方面的要求。 #### 动态调整策略应用 考虑到集群内部拓扑变化可能带来的影响因素,对于后续新增加Blocks的选择上并非一成不变地遵循最初规划路线。相反地,每次完成一定数量级后的转储动作前都需要再次咨询NameNode意见以便及时作出最优决策。如此这般既能够充分利用资源又能维持良好的负载均衡状态[^5]。 ```java // Java代码示例:使用FileSystem类进行简单文件写入 Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); try (FileSystem fs = FileSystem.get(conf); FSDataOutputStream output = fs.create(new Path("/user/test.txt"))) { String content = "This is a test."; output.writeBytes(content); } catch (IOException e) { e.printStackTrace(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值