项目地址 https://github.com/datawhalechina/juicy-bigdata,感谢项目团队的付出。
本次主要学习 HDFS 相关内容。
1. HDFS 产生背景
20 世纪 80 年代以来,全球范围内,数据总量呈现指数级增长,单台计算机无法承载如此之大的数据量。分布式文件系统
应运而生。
2. 分布式文件系统简介
分布式文件系统,将数据拆分为若干个块进行存储,块是数据读写的基本单元。HDFS 默认块大小为 64 MB,较大的数据块可以将减少寻址开销;但是,如果数据块太大,会导致 MR 任务种的 MAP 任务一次仅处理一个数据块,启动的任务少,不利于体现分布式集群的优势,最终降低并行运算的速度。
分布式文件系统涉及采用 客户端/服务器
模式。
在物理结构上,分布式文件系统由主节点 master mode 和从节点 worker node 构成。(也被成为 namenode 和 datanode)。
namenode 主要用来管理数据。
datanode 主要用来存储和读取数据。
分布式文件系统通过多副本机制来保障数据的完整性和可用性。同一个数据块会被存放在集群中的不同节点上(也就是不同的服务器上),其原理类似于不把所有鸡蛋放到一个筐里。
分布式文件系统主要用于处理大规模的数据,一般是 TB 级别,在处理小规模数据时,分布式文件系统没有优势。
3. HDFS 简介
HDFS 是大数据领域重要的、可靠的文件存储系统。其适合存储超大数据量的文件,不适合存储超多小数据量文件。
HDFS 具有如下几个特点
- 仅需价格低廉的服务器就能保障数据的完整性
- 流式读写:不支持随机读写
- 数据量大:数据量一般在 GB TB 级别
- 文件模型简单:一次写入,多次读取
- 跨平台兼容性好:采用 java 语言实现。
HDFS 缺点:
- 不适合低延迟访问数据;
- 无法高效处理海量的小文件
- 不支持多用户同时写入
- 只能追加新数据,不能修改旧数据
4. HDFS 存储策略
4.1 冗余存储
采用多副本机制保障文件系统的容错性和可用性。
多副本机制优点如下:
- 访问速度快:多个客户端访问同一文件时,可以分别访问不同节点上的不同副本,实现并行操作,提高传输效率。
- 易排错:Why ?
- 可靠性高:每一份数据都会按照多副本机制存储于集群中的多个节点,数据发生故障的概率为 Xn,可考虑为 1 - Xn,可以说非常高。
4.2 数据存储策略
4.2.1 数据写入
HDFS 数据写入以机架( Rack)为基础进行数据写入。
默认是 3 副本存储策略下,2 份副本(副本 1 和副本 3)的数据存储相同机架的不同节点上,另外 1 份副本(副本 2)存储于不同机架上。
副本数大于 3 时,其他副本随机存储于集群中的数据节点之上。
4.2.2 数据读取
HDFS 提供了 API 进行数据的读取。主要通过机架 ID 来确定读取哪个副本的数据。