03.分布式文件系统HDFS

本文详细介绍了Hadoop分布式文件系统HDFS的设计理念与实现机制,包括其架构、副本机制、环境搭建步骤以及通过Shell命令和Java API进行操作的方法。

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

分布式文件系统HDFS

HDFS概述及设计目标

什么是HDFS

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS
源自Google的GFS论文
发表于2003年,HDFS是GFS的克隆版

HDFS的设计目标
  1. 非常巨大的分布式文件系统
  2. 运行在普通廉价的硬件上
  3. 以扩展,为用户提供性能不错的文件存储服务

HDFS架构

这里写图片描述
1个Master(NameNode/NN) 带 N个Slaves(DataNode/DN)
1个文件会被拆分成多个blocks
NN负责:

  1. 负责客户端请求的数据
  2. 负责元数据(文件的名称、副本系数、block存放的DN)的管理
    DN的职责:
  3. 存储用户的文件对应的数据块(Block)
  4. 要定期向NN发送心跳信息,汇报本身及其所有的block信息及健康状况
    A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software. The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.
    NameNode + N个DataNode
    建议:NN和DN是部署在不同的节点上

HDFS副本机制

这里写图片描述

HDFS环境搭建

hadoop伪分布式安装步骤

  1. jdk安装
  2. 安装ssh
    yum install ssh
    ssh-keygen -t rsa
    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
  3. 下载并解压hadoop
    地址
    解压:tar -zxvf hadoop-2.6.0-xxxx
  4. hadoop配置文件的修改(hadoop_home/etc/hadoop)
    修改hadoop-env.sh
    这里写图片描述
    修改core-site.xml
    这里写图片描述
    修改hdfs-site.xml
    这里写图片描述
    修改slaves
    这里写图片描述
  5. 启动hdfs
    格式化系统(仅第一次执行即可,不要重复执行): hdfs namenode -format
    这里写图片描述
    启动:hdfs:sbin/start-dfs.sh
    验证是否启动成功:
    方式1:jps
    这里写图片描述
    方式2
    浏览器访问方式:http://localhost:50070
  6. 停止hdfs
    sbin/stop-dfs.sh

HDFS shell

hdfs shell常用命令的使用,包括ls,mkdir,put,get,rm

ls

hdfs dfs -ls /
hdfs dfs -ls -R /

mkdir

hdfs dfs -mkdir /test1
hdfs dfs -mkdir -p /test/a/b

put copyFromLocal

hdfs dfs -put ./hadoop.txt /
hdfs dfs -copyFromLocal hadoop.txt /test/a/b/h.txt

get

hdfs dfs -get /test/a/b/h.txt hello.txt

rm

hdfs dfs -rm /hadoop.txt
hdfs dfs -rm -R /test

cat

hdfs dfs -cat /hadoop.txt

text

hdfs dfs -text /hadoop.txt

Java API操作HDFS

IDEA Maven构建Java工程

HDFS文件读写流程

HDFS优缺点


<think>好的,我现在需要处理用户关于头歌分布式文件系统HDFS的查询。首先,用户要求了解HDFS的介绍、使用和配置。根据提供的引用内容,我需要整合这些信息,同时确保遵循系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,介绍部分需要涵盖HDFS的基本概念、设计目标和核心架构。引用[1]提到HDFSHadoop的子项目,适合一次写入多次读出的场景,这需要强调其在大数据分析中的应用。同时,引用[2]指出HDFS不适合需要频繁修改的场景,比如网盘,这些点都要在介绍中体现。 接下来是使用部分,用户可能想知道命令行操作和API使用。引用[4]提到了HDFS的命令行使用,而引用[3]涉及使用FSDataOutputStream上传文件,这部分需要详细说明,包括示例代码。但用户提供的引用中没有具体的命令示例,可能需要根据常识补充常用命令如hdfs dfs -ls等,但要确保不编造信息。如果有不确定的地方,应保持回答的准确性,避免误导用户。 然后是配置部分,需要说明HDFS的核心配置文件如hdfs-site.xml和core-site.xml,以及参数设置。这部分同样需要参考现有引用,但用户提供的引用中没有具体配置参数,可能需要依赖外部知识,但要谨慎处理,确保信息的可靠性。例如,可以提到配置副本数,但需要确认是否为常见做法。 在生成相关问题环节,需要根据用户可能的后续疑问设计问题,比如与其他系统的比较、高可用配置、性能优化等。这些问题应围绕HDFS的特性和使用场景展开。 同时,必须注意所有数学表达式使用正确的LaTeX格式,比如在介绍HDFS的块大小时,可能需要提到默认大小,但用户的问题中未涉及数学公式,所以可能不需要使用。但如果有提及数据分块或副本策略中的数值,需要按照格式处理。 最后,检查回答是否符合中文要求,结构是否清晰,是否有自然添加引用标识。确保每个引用来源正确对应,比如引用[1]和[2]关于HDFS的设计和应用场景,引用[3]关于文件上传的方法。 总结步骤: 1. 整合引用中的HDFS介绍,强调其设计目标和适用场景。 2. 描述命令行和API的使用方法,补充常见命令示例(在允许的范围内)。 3. 说明配置文件的调整和关键参数,基于已知信息。 4. 生成相关问题,覆盖比较、配置、优化和应用场景。 5. 确保无数学公式需要处理,但若有数值出现,正确使用LaTeX。 6. 检查引用标识的位置和正确性,避免错误引用。</think>### 头歌分布式文件系统HDFS介绍 HDFSHadoop Distributed File System)是Apache Hadoop项目的核心子系统,专为大规模数据存储与高吞吐量访问设计[^1]。其核心特点包括: 1. **高容错性**:通过数据块多副本机制(默认3副本)保障数据可靠性。 2. **横向扩展性**:支持PB级数据存储,可通过增加节点扩展容量。 3. **流式数据访问**:适应“一次写入、多次读取”模式,适合批处理场景[^2]。 核心架构包含: - **NameNode**:管理文件系统元数据(命名空间、块映射) - **DataNode**:存储实际数据块 - **Secondary NameNode**:协助元数据备份(非热备) ### HDFS使用指南 #### 1. 命令行操作 通过`hdfs dfs`命令进行文件管理: ```bash # 查看目录内容 hdfs dfs -ls /user/tmp # 上传本地文件到HDFS hdfs dfs -put local_file.txt /user/tmp/ # 下载HDFS文件到本地 hdfs dfs -get /user/tmp/hdfs_file.txt . ``` #### 2. API开发示例(Java) 使用`FileSystem`类操作HDFS: ```java Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); // 创建目录 fs.mkdirs(new Path("/user/tmp/new_dir")); // 写入文件 try (FSDataOutputStream out = fs.create(new Path("/user/tmp/data.log"))) { out.write("data content".getBytes()); } // 读取文件 try (FSDataInputStream in = fs.open(new Path("/user/tmp/data.log"))) { IOUtils.copyBytes(in, System.out, 4096, false); } ``` ### HDFS配置要点 配置文件位于`$HADOOP_HOME/etc/hadoop`目录: 1. **hdfs-site.xml**(核心参数): ```xml <property> <name>dfs.replication</name> <value>3</value> <!-- 设置副本数量 --> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> <!-- 128MB块大小 --> </property> ``` 2. **core-site.xml**(全局配置): ```xml <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> <!-- NameNode地址 --> </property> ``` 3. **负载均衡配置**: ```bash hdfs balancer -threshold 10 # 启动数据均衡任务 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值