大数据管理与分析 第三章 HDFS

HDFS(Hadoop Distributed File System)是一种分布式文件系统,适用于大规模数据处理。其主要特点是将大文件分成块进行存储,每个块有多个副本以保证容错性。NameNode作为目录节点管理命名空间和元数据,DataNode负责数据的存储和读取。HDFS不支持低延迟访问和多用户写入,适合批量读写操作。数据存放策略以机柜为基础,确保高可用性和带宽利用。写入时采用流水线复制策略,读取时根据机柜ID选择最近的数据节点。HDFS通过心跳检测、副本策略和简单的一致性模型确保可靠性。

HDFS

局限性

  • 不适合低延迟数据的访问
  • 无法高校存储大量的小文件
  • 不支持多用户写入以及任意修改文件

  • HDFS分布式文件系统中的文件被分成快进行存储,“块”是文件处理的逻辑单元
  • 默认块是64MB,比文件系统的快大得多
  • 使用抽象块的好处:
    可以存储任意大的文件,而不会受网络中任意单个节点磁盘大小限制;
    使用抽象块作为操作单元,可以简化存储系统;
    块有利于复制容错的实现

目录节点

目录节点 NameNode 是集群中的主节点,负责管理整个HDFS的命名空间和元数据,是客户端访问HDFS系统的入口,目录节点保存文件系统的三种元数据

  • 命名空间:整个系统的目录结构
  • 数据块与文件名的映射表
  • 每个数据块副本的位置信息,每个数据块都默认有3个副本。“副本因子”,保存多少分副本,也在目录节点中

数据节点

数据节点一般就是集群中的一台机器,复杂数据的存储和读取

  • 写入的时候,由目录节点分配数据块的保存,客户端直接写入到对应的数据节点
  • 读取时,客户端从目录节点获得数据块的映射关系,直接到对应的数据接待你读取数据
  • 数据节点要根据目录节点的命令创建、删除数据块和进行副本复制

在这里插入图片描述
在这里插入图片描述
HDFS 是不能直接访问各个datanode 的Linux文件系统的

HDFS 命名空间

  • Hadoop 文件命名遵循了传统的 “目录/子目录/文件”格式,通过命令行或者API创建目录,创建、删除文件等
  • 命名空间由目录节点管理,对命名空间的变动都会被HDFS记录下来

HDFS 存储策略

副本数据

  • 文件分成固定大小的块,每个数据块都冗余存储
  • 数据节点定期发送心跳信号和数据列表给目录节点,心跳信号使目录节点直到该数据节点还是有效的。而数据块列表包括了该数据节点上面所有数据块的编号

在这里插入图片描述

数据存取策略

数据存放
  • hadoop采用以机柜为基础的数据存放策略,提高数据可靠性和充分利用网络带宽
  • 默认副本因子是3,一块数据有3个地方存放,两份在同一个rack id的不同机器上,一份放在不同rack id的机器上。也就是说 2/3数据在同一个机柜的不同机器上,1/3在另一个机柜
  • 计科一进行数据恢复,又能提高读写性能
数据读取
  • 读取数据时,如果又块数据和客户端的机柜id一样,优先选择该数据节点,客户端直接和数据节点建立连接,读取数据
  • 如果没有,可以随机选择数据节点
数据复制
  • 采用流水线复制策略

当客户端要在HDFS上写一个文件:

  • 首先将这个文件写在本地
  • 对文件进行分块,64M一块
  • 每个数据块都对HDFS目录节点发起写请求
  • 目录节点选择一个数据节点列表(副本位置),返回给客户端
  • 客户端把数据写入第一台数据节点,并把列表传给数据节点
  • 当数据节点收到4KB数据时,写入本地,并发起连接到下一个数据节点,把4K传过去,形成一条流水线
  • 最后当文件写完的时候,数据复制也同时完成

HDFS通讯协议

  • HDFS通讯协议在TCP/IP基础上开发
  • 客户端使用Client协议和目录节点通讯
  • 目录节点和数据节点使用Datanode协议
  • 客户端和数据节点的交互通过远程过程调用(RPC,Remote Rocedure Call)
    在这里插入图片描述

HDFS可靠性设计

  • HDFS要在应产出措施保证目标可靠

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分布式文件系统的设计需求

  • 透明性
  • 并发控制
  1. 客户端对文件的读写不应该影响其他客户端对通过一个文件的读写
  2. HDFS机制非常简单,任何时间都只允许一个写的客户端,问肩颈创建并写入之后不再改变,一次写多次读。
  • 文件复制功能:HDFS 默认有3个副本

  • 硬件和操作系统的异构性:HDFS由JAVA实现,可以在不同操作系统和计算机上实现相同的客户端和服务成序

  • 容错能力:心跳检测,检测文件快的完整性,集群负载均衡,为何多个Fslmage 和 Editlog 的拷贝

  • 安全性问题:HDFS安全性弱,只有文件续可控制

HDFS基本特征

  • 顺序式文件访问:HDFS对数虚度写作了忧患,执行大量数据的顺序读出,对于随机访问的负载较高
  • 简单的一致性模型(一次写入多次读)支持在文件尾部添加新的数据
  • 数据库存储模式: 基于块的文件存储,多副本数据块形式存储
<think>嗯,用户需要关于Hadoop HDFS操作第三章的学习资料或教程。首先,我得回想一下Hadoop HDFS的核心操作,然后整理出第三章可能涵盖的内容。根据用户的引用资料,他们提到了HDFS客户端配置、文件操作命令、路径协议区分MapReduce任务执行。可能第三章会深入这些操作,比如更详细的命令、权限管理、高级配置等。 我需要确保回答结构清晰,分步骤讲解。用户提供的引用中有具体的命令示例,比如hdfs dfs -copyToLocalhadoop fs -mkdir,这些可以作为基础操作的例子。同时,用户可能还需要了解如何区分HDFS本地路径,引用4提到使用协议头,这部分需要强调。 另外,用户可能需要学习资源推荐,比如官方文档、书籍或在线课程。比如《Hadoop权威指南》Hadoop官网的文档。还要注意引用用户提供的参考资料,正确标注引用标记,如[^1]、[^2]等。 可能还需要生成相关问题,帮助用户进一步学习,比如HDFS权限管理其他存储系统的比较、备份机制等。确保问题覆盖用户可能感兴趣的扩展内容。 最后,检查回答是否符合系统级指令:使用正确的中文,LaTeX格式正确,行内数学表达式用$...$,独立公式用$$...$$,虽然当前内容可能不需要太多数学公式,但如果有的话要正确应用。确保引用标记正确添加,比如每个引用来源的末尾自然标注。</think>### Hadoop HDFS 操作 第三章学习指南 以下内容基于Hadoop 3.x版本,涵盖HDFS核心操作、文件管理及开发实践,结合引用内容整理关键知识点。 --- #### 一、HDFS基础操作 1. **文件上传下载** - 下载文件到本地(使用两种方式): ```bash hdfs dfs -copyToLocal /user/dfstest/a.txt /data/hdfs_test/ # 直接下载[^3] hdfs dfs -get /user/dfstest/c.txt /data/hdfs_test/ # 等效于copyToLocal[^3] ``` - 查看文件内容(分页显示): ```bash hdfs dfs -cat <src> | more # 通过管道符限制输出[^2] ``` 2. **路径协议区分** - **Linux本地路径**:以`file://`开头,如`file:///home/user/data` - **HDFS路径**:需指定NameNode地址端口,如`hdfs://node1:8020/user/input`[^4] --- #### 二、HDFS客户端开发 1. **Java客户端配置** - Gradle依赖配置(Hadoop 3.3.1): ```gradle implementation 'org.apache.hadoop:hadoop-client:3.3.1' # 核心依赖 ``` - 初始化HDFS客户端示例: ```java Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://node1:8020"); FileSystem fs = FileSystem.get(conf); ``` 2. **执行MapReduce任务** - 示例命令(统计匹配正则表达式的词频): ```bash hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar \ grep /input/hadoop /input 'dfs[a-z.]+' # 输入路径为HDFS中的/input/hadoop[^5] ``` --- #### 三、学习资料推荐 1. **官方文档** - [Hadoop 3.3.1官方文档](https://hadoop.apache.org/docs/stable/):包含HDFS架构、API详解及配置参数说明。 2. **书籍** - 《Hadoop权威指南》(第四版):第三章专门讲解HDFS操作设计原理。 3. **在线课程** - Coursera课程《Hadoop平台应用》:涵盖HDFS文件操作MapReduce编程。 --- §§ 相关问题 §§ 1. HDFS如何管理文件权限?是否Linux权限机制一致? 2. HDFS其他分布式存储系统(如S3)在操作上有何区别? 3. 如何通过Java API实现HDFS文件的断点续传? 4. HDFS的副本机制如何配置?默认策略是什么? 5. HDFS的NameNodeDataNode故障恢复流程是怎样的? [^1]: Gradle依赖配置参考 : HDFS文件查看命令 [^3]: 文件下载操作示例 : 路径协议区分规则 [^5]: MapReduce任务执行流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值