Skip to content

Commit 298a100

Browse files
committed
update
1 parent 9146a67 commit 298a100

8 files changed

+1963
-0
lines changed

Hadoop中的文件存储.md

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
# Hadoop中的文件存储
2+
3+
## 文件索引节点法详解
4+
5+
索引节点法(inode)是传统文件系统用于管理文件数据存储位置的核心机制。通过类似C语言中的指针概念,文件系统使用索引节点记录文件元数据和数据块的位置信息。
6+
7+
### 索引节点基础结构
8+
9+
```
10+
+---------------------------+
11+
| 索引节点(inode) |
12+
+---------------------------+
13+
| 文件大小、权限、时间戳等元数据 |
14+
+---------------------------+
15+
| 数据块地址索引项 |
16+
+---------------------------+
17+
```
18+
19+
### 三种地址索引方式
20+
21+
1. **直接地址索引**:索引节点直接存储数据块地址,访问速度最快
22+
23+
```
24+
+---------------+ +------------+
25+
| 索引节点 | | 数据块(4KB) |
26+
| iaddr[0~5] | ------> | |
27+
+---------------+ +------------+
28+
```
29+
30+
2. **一级间接地址索引**:通过一个间接块指向多个数据块
31+
32+
```
33+
+---------------+ +----------------+ +------------+
34+
| 索引节点 | | 间接块(4KB) | | 数据块(4KB) |
35+
| iaddr[6] | --> | 地址1 | 地址2 |..| --> | |
36+
+---------------+ +----------------+ +------------+
37+
1024个数据块地址
38+
```
39+
40+
3. **二级间接地址索引**:通过两级间接块指向更多数据块
41+
42+
```
43+
+---------------+ +----------------+ +----------------+ +------------+
44+
| 索引节点 | | 一级间接块(4KB) | | 二级间接块(4KB) | | 数据块(4KB) |
45+
| iaddr[7] | --> | 地址1 | 地址2 |..| --> | 地址1 | 地址2 |..| --> | |
46+
+---------------+ +----------------+ +----------------+ +------------+
47+
```
48+
49+
### 传统文件系统容量计算
50+
51+
以文档中的例子说明:
52+
- 6个直接地址,每个指向4KB数据块 = 24KB
53+
- 1个一级间接地址,可指向1024个数据块 = 4MB (1024×4KB)
54+
- 1个二级间接地址,可指向1024×1024个数据块 = 4GB (1024×1024×4KB)
55+
- 总文件大小上限 = 4GB + 4MB + 24KB = 4,198,424KB
56+
57+
## Hadoop分布式文件系统中的数据块管理
58+
59+
Hadoop的HDFS是为大规模数据存储设计的分布式文件系统,其数据块处理方式与传统文件系统有显著不同。
60+
61+
### HDFS架构概览
62+
63+
```
64+
+------------------+ +----------------+
65+
| NameNode | | DataNode 1 |
66+
| (元数据服务器) | | [Block 1] |
67+
+------------------+ | [Block 3] |
68+
| 文件名 -> 块列表 |<-------------------->| [Block 5] |
69+
| 块ID -> 位置列表 | +----------------+
70+
+------------------+
71+
^ +----------------+
72+
| | DataNode 2 |
73+
| | [Block 1] |
74+
| | [Block 2] |
75+
v | [Block 4] |
76+
+-----------------+ +----------------+
77+
| 客户端 |
78+
+-----------------+ +----------------+
79+
| 读写请求 | | DataNode 3 |
80+
+-----------------+ | [Block 2] |
81+
| [Block 3] |
82+
| [Block 5] |
83+
+----------------+
84+
```
85+
86+
### HDFS与传统文件系统的区别
87+
88+
| 特性 | 传统文件系统 | HDFS |
89+
|------|------------|------|
90+
| 块大小 | 通常4KB | 默认128MB或256MB |
91+
| 寻址方式 | 多级索引(直接/间接) | 扁平化块列表 |
92+
| 位置管理 | 由文件系统内部处理 | 由NameNode集中管理 |
93+
| 冗余策略 | 通常无内置冗余 | 内置块复制(默认3份) |
94+
95+
### HDFS块大小设计原理
96+
97+
HDFS使用大数据块(128MB默认)而非传统的小块(4KB),原因在于:
98+
99+
1. **寻址开销减少**:大块减少了元数据管理的开销
100+
2. **网络效率**:大块传输可以最小化网络连接的建立成本
101+
3. **顺序读取优化**:适合数据密集型应用的批量读取
102+
103+
## HDFS容量计算详解
104+
105+
### 1. 单个数据节点容量计算
106+
107+
假设有一个DataNode服务器配置如下:
108+
- 12块4TB硬盘
109+
- HDFS预留10%空间给操作系统和中间数据
110+
111+
```
112+
单个DataNode原始容量 = 12 × 4TB = 48TB
113+
HDFS可用容量 = 48TB × 90% = 43.2TB
114+
```
115+
116+
### 2. 考虑复制因子的实际存储容量
117+
118+
假设复制因子为3(默认值):
119+
120+
```
121+
有效存储容量 = 总物理容量 ÷ 复制因子
122+
= 43.2TB ÷ 3 = 14.4TB
123+
```
124+
125+
这意味着虽然集群有43.2TB的物理空间,但因为每个数据块被复制3份,所以只能存储14.4TB的实际数据。
126+
127+
### 3. 集群扩展计算
128+
129+
假设集群有20个DataNode:
130+
131+
```
132+
集群总物理容量 = 单节点容量 × 节点数
133+
= 43.2TB × 20 = 864TB
134+
135+
集群有效存储容量 = 总物理容量 ÷ 复制因子
136+
= 864TB ÷ 3 = 288TB
137+
```
138+
139+
### 4. 数据块数量和NameNode内存需求计算
140+
141+
NameNode需要在内存中维护所有块的元数据。假设:
142+
- 每个数据块在NameNode中占用约150字节的元数据
143+
- 块大小为128MB
144+
145+
```
146+
总数据块数 = 集群有效容量 ÷ 块大小
147+
= 288TB ÷ 128MB
148+
= 288 × 1024 × 1024MB ÷ 128MB
149+
= 288 × 1024 × 8
150+
= 2,359,296块
151+
152+
NameNode内存需求 = 总块数 × 每块元数据大小
153+
= 2,359,296 × 150字节
154+
= 353,894,400字节
155+
≈ 337.5MB
156+
```
157+
158+
### 5. 小文件问题及影响
159+
160+
如果存储大量小文件(远小于块大小的文件),每个文件仍占用一个完整的块,会导致:
161+
162+
```
163+
假设平均文件大小为1MB:
164+
165+
实际数据量 = 288TB
166+
理论文件数 = 288TB ÷ 1MB = 301,989,888个文件
167+
实际占用块数 = 301,989,888个块
168+
169+
NameNode内存需求 = 301,989,888 × 150字节 ≈ 43.2GB
170+
```
171+
172+
这是300倍于存储大文件所需的内存需求,说明了小文件对HDFS的巨大影响。
173+
174+
## HDFS与传统索引节点法的对比
175+
176+
```
177+
+------------------+----------------------+------------------------+
178+
| 特性 | 传统inode文件系统 | Hadoop HDFS |
179+
+------------------+----------------------+------------------------+
180+
| 寻址层次 | 多级索引(直接/间接) | 扁平化单级块列表 |
181+
| 块大小 | 通常4KB | 默认128MB |
182+
| 冗余设计 | 无内置冗余 | 默认3倍数据复制 |
183+
| 元数据管理 | 分散存储于各inode | 集中存储于NameNode |
184+
| 最大文件大小 | 受块寻址层级限制 | 基本无限制(PB级) |
185+
| 优化目标 | 随机访问性能 | 大批量顺序读写 |
186+
+------------------+----------------------+------------------------+
187+
```
188+
189+
## 总结
190+
191+
虽然HDFS和传统文件系统都使用"块"概念来管理数据存储,但它们的实现方式和优化目标有很大差异:
192+
193+
1. 传统文件系统通过复杂的多级索引结构(直接、一级间接、二级间接块)来支持不同大小的文件,优化随机访问性能。
194+
195+
2. HDFS则采用扁平化的大数据块设计,由NameNode集中管理块位置信息,优化大规模数据的连续读写性能。
196+
197+
3. HDFS的容量计算需考虑块大小、复制因子、节点数量和小文件影响,这些因素共同决定了集群的实际可用存储能力和性能特性。
198+
199+
这种设计差异反映了不同系统的应用场景需求:传统文件系统面向通用计算环境,而HDFS专为大数据批处理优化,牺牲了随机访问效率来获得更高的吞吐量和更好的可靠性。

OLTP和OLAP区别.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
以下是几个详细案例,帮助理解 OLTP 和 OLAP 的区别、典型场景及如何区分:
2+
3+
---
4+
5+
### 案例一:银行系统
6+
7+
- **OLTP 场景**:客户在 ATM 机上取款、转账、查询余额。这些操作需要实时、高并发、数据一致性强,通常每次操作只影响少量记录。
8+
- **OLAP 场景**:银行管理层分析过去一年各地区的存款增长趋势、客户活跃度、贷款违约率等,需要对大量历史数据进行复杂的统计和分析。
9+
10+
**区分方法**
11+
OLTP 关注单笔事务的快速处理和数据一致性;OLAP 关注大批量数据的多维分析和决策支持。
12+
13+
---
14+
15+
### 案例二:电商平台
16+
17+
- **OLTP 场景**:用户下单、支付、购物车操作、订单状态更新。这些操作要求响应快、并发高、数据实时更新。
18+
- **OLAP 场景**:平台分析某一季度各类商品的销售额、用户购买行为、促销活动效果等,需要对订单、用户、商品等多表进行关联和聚合分析。
19+
20+
**区分方法**
21+
OLTP 主要处理日常业务操作,数据量小但频繁;OLAP 主要处理历史数据分析,数据量大但操作频率低。
22+
23+
---
24+
25+
### 案例三:医院信息系统
26+
27+
- **OLTP 场景**:医生为患者开药、登记、预约挂号、病历录入等。这些操作需要保证数据的准确性和实时性。
28+
- **OLAP 场景**:医院管理层统计某类疾病的发病率、药品消耗趋势、医生工作量等,需要对历史医疗数据进行多维度分析。
29+
30+
**区分方法**
31+
OLTP 以操作型事务为主,强调数据一致性和事务性;OLAP 以分析型查询为主,强调数据的多维度和历史性。
32+
33+
---
34+
35+
### 如何区分和采用
36+
37+
1. **业务需求**:如果需求是实时处理、频繁写入、数据一致性强,采用 OLTP;如果需求是历史数据分析、复杂查询、决策支持,采用 OLAP。
38+
2. **数据结构**:OLTP 通常采用高度规范化的关系型数据库,OLAP 常用数据仓库、星型/雪花型模型。
39+
3. **系统架构**:实际应用中,OLTP 和 OLAP 通常分离部署,避免分析型查询影响事务型操作的性能。
40+
41+
---
42+
43+
**总结**
44+
OLTP 适用于日常业务操作,OLAP 适用于数据分析和决策支持。区分时要看操作类型、数据量、响应时间和一致性要求。实际系统设计时,通常会将两者分离,分别优化。

0 commit comments

Comments
 (0)