0
点赞
收藏
分享

微信扫一扫

Hadoop学习笔记(二)之HDFS

胡桑_b06e 2022-03-12 阅读 63


"""
小闫辛苦码了 3580 个字
文章可能占用您 9 分钟
欢迎关注「全栈技术精选」
"""
print("Powerful avalanches begin with small shifts. --by Pamela McFarland Walsh")


HDFS

1.HDFS 入门

1.1 背景

1.2 简介

1) 官方称:​​HDFS​​ 可以运行在廉价的服务器上,为海量的数据存储提供了高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征。

2) ​​HDFS​​​ 基于开源的 ​​GFS​​ 开发实现。

3) ​​HDFS​​​ 的默认存储单位是数据块 ​​Block​​​,默认数据块大小是 ​​64MB​​ 。文件存储时会分成一个个数据块,但是当一个小文件没达到数据块大小时,文件是多大就占用多大的空间。

4) ​​NameNode​​​ 称为元数据节点,管理保存所有的节点信息、文件信息等等。它的一些系统文件我们需要了解:​​edits​​​ 保存了一些操作信息;​​fsimage​​ 是名字空间文件。

5) 数据节点 ​​DataNode​​​ 是存储数据的地方,一个文件会被分成若干个数据块储存在对应的数据节点上。数据节点的系统文件:以 ​​blk_​​​ 开头无后缀的文件保存的就是数据块,以 ​​blk_​​​ 开头以 ​​.meta​​​ 结尾的文件则保存对应数据块的属性信息,​​subdir​​ 开头的目录保存的也是数据块相关信息(数据块太多了,就一起放在这种目录下)。

6) 从元数据节点 ​​Secondary Name Node​​​ 虽然名字中有个「从」字,但并非是备份,而是与 ​​Name Node​​​ 各司其职,它主要的作用是隔一段时间合并一下日志文件等,并帮助 ​​Name Node​​​ 将内存中的元数据信息 ​​checkpoint​​ 到硬盘上。

1.3 优点

1) 可以处理超大文件(​​MB​​​ 到 ​​TB​​ 级别)

2) 对于服务器要求不高,​​Hadoop​​ 集群可部署在廉价的机器上节约项目成本,因为它的多副本,使你不必担心宕机等意外事故带来的影响。

3) 一次写入,多次读取。

4) 现在还支持对已有文件追加内容。

1.4 缺点

1) 不适合低延迟数据访问,即访问数据时间可能会长一些。

2) 不适合存储大量小文件。因为存储一个文件,其元数据会保存在 ​​NameNode​​​ 中,而 ​​NameNode​​​ 的内存决定了 ​​HDFS​​ 储存文件的上限,大量小文件会耗费资源。

1.5 设计目标

1) 集群中管理数量庞大的服务器,如何做到错误检测,快速、自动恢复是核心目标。

2) 需要高数据传输带宽,保证支撑数以千万计的文件。

3) 需要支持大文件存储。

4) 移动计算而非移动数据。

1.6 架构

1) ​​HDFS​​​ 采用 ​​master/slave​​ 架构。

2) 一个 ​​HDFS​​​ 集群由一个 ​​NameNode​​​ 和一些 ​​DataNode​​​ 组成, ​​NameNode​​​ 相当于控制中心,负责管理文件系统的名字空间、数据块与数据节点的映射以及数据节点的调度。 ​​DataNode​​ 则负责处理实际的客户端读写的请求,存储数据。

2.HDFS 基本操作

2.1 HDFS shell

先启动 ​​Hadoop​​ 才能使用

1) 列出文件目录,同 ​​ls​​:

hadoop fs -ls 目录路径


递归的查看文件可以使用 ​​-R​​ 参数

# 列出 /data 下的所有文件
hadoop fs -ls -R /data



2) 在 ​​HDFS​​ 中创建文件夹

hadoop fs -mkdir 文件夹名称

如果想嵌套(级联)的创建目录,可以使用 ​​-p​​ 参数


3) 上传文件到 ​​HDFS​

hadoop fs -put 本地文件路径 HDFS文件路径


4) 从 ​​HDFS​​ 上下载文件

hadoop fs -get HDFS文件路径 本地路径


5) 查看 ​​HDFS​​ 上某个文件内容

hadoop fs -cat HDFS上文件路径


6) 统计目录下各文件的大小

hadoop fs -du 目录路径


‍7) 删除 ​​HDFS​​ 上某个文件或文件夹

hadoop fs -rm 文件
hadoop fs -rmdir 文件夹


8) 帮助命令

hadoop fs -help 命令

‍3.HDFS 运行原理

3.1 读流程

3.2 写流程

客户端向 ​​NameNode​​​ 发起 ​​RPC​​​ 请求创建文件, ​​NameNode​​​ 验证用户权限、检测文件是否存在,最终创建一条元数据信息,然后客户端开始向 ​​DataNode​​ 保存数据,进行切分并完成第一个副本的创建,再将其复制到其他的节点上,直到所有的节点完成后,关闭连接。

3.3 副本

​HDFS​​ 上文件对应的数据块保存有多个副本,并为其提供容错机制,当副本丢失或者宕机时,能够快速自动恢复。但是要注意,我们需要对副本系数进行设置,而且此系数一经写入,不可更改。

3.3.1 摆放策略

第一个副本放置在上传文件的 ​​Data Node​​​ 上,如果是在集群外提交,则根据磁盘速度以及 ​​CPU​​ 效率选取一个节点。

第二个副本放在与第一个副本不同机架的节点上。

第三个副本放在与第二个副本相同机架的不同节点上。

更多的副本就随机放在节点中。

3.4 负载均衡

1) 如果某个 ​​DataNode​​​ 上空闲空间低于临界点,按照负载均衡策略,系统会自动将数据转移到其他空闲的 ​​DataNode​​ 上。

3) ​​HDFS​​​ 会调整存储分布以均衡 ​​IO​​​ 性能,平衡 ​​IO​​ 负载,平均数据,平衡集群。

4) ​​Hadoop​​​ 的 ​​bin/start-balancer.sh​​​ 脚本可以启动均衡服务。使用 ​​-threshold​​​ 参数设置判断集群是否平衡的阈值;使用 ​​hdfs-site.xml​​​ 文件中的 ​​dfs.balance.bandwidth​​​ 设置 ​​Balancer​​ 运行时允许占用的带宽。

4.HDFS 高级知识

4.1 序列化机制

1) 序列化:将对象转化为字节流,以便在网络上传输或者写在磁盘上持久化存储。

2) 反序列化:将字节流转回成对象。

3) ​​Hadoop​​​ 中多个节点进程间通讯是通过 ​​RPC​​ 完成的,所以需要序列化机制。

4) ​​Hadoop​​​ 序列化中,用户可以复用对象,减少了 ​​java​​ 对象的分配和回收,提高应用效率。

4.2 Sequence File

4.2.1 概述

前面我们介绍过,当 ​​HDFS​​​ 中保存有大量的小文件时,​​NameNode​​​ 压力会很大,使得存储的元数据信息非常多,而 ​​Sequence File​​ 则可以将小文件合并。

1) ​​Sequence File​​​ 是 ​​Hadoop​​ 提供的一种对二进制文件的支持。

2) 二进制文件直接将键值对序列化到文件中。

3) 使用 ​​Sequence File​​​ 进行存储的文件,占用空间会大于原数据,因为为了查找方便,​​Sequence File​​ 的存储中添加了一些额外的信息,使得数据增大。

4.2.2 特点

1) 支持压缩。分为基于 ​​Record​​​ 和 ​​Block​​​ 压缩,前一种只压缩值不压缩键,后一种则是键和值都压缩。默认为无压缩,每个记录(​​Record​​)是由它的记录长度(字节数)、键的长度、键和值组成。

2) 对于 ​​MapReduce​​​ 任务十分友好,因为文件可以被切分,使用 ​​Map Task​​ 并行处理可大幅提高作业的执行效率。

3) 使用简单,因为 ​​Hadoop​​​ 提供了 ​​API​​ ,业务逻辑中应用便捷。

4.3 Map File

学习自《基于Hadoop与Spark的大数据开发实战》




排版:小闫

图片素材:小闫

文案:小闫

长按扫描下方二维码即刻关注小闫


举报

相关推荐

0 条评论