Skip to content

Commit 355c283

Browse files
committed
dosc:Hive专栏更新
1 parent a39422f commit 355c283

File tree

7 files changed

+791
-135
lines changed

7 files changed

+791
-135
lines changed

docs/.vuepress/config.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,6 @@ module.exports = {
109109

110110
{text: 'Hive', items: [
111111
{text: '00-轻松驾驭Hive数仓',link: '/md/bigdata/轻松驾驭Hive数仓.md'},
112-
{text: '01-macOS下 Hive 2.x 的安装与配置',link: '/md/bigdata/01-macOS下 Hive 2.x 的安装与配置.md'},
113-
{text: '02-Hive执行原理',link: '/md/bigdata/Hive执行原理.md'},
114112
]},
115113
]
116114
},
@@ -222,7 +220,9 @@ module.exports = {
222220
},
223221
{
224222
text: '职业规划',
225-
link: '/md/career/Java工程师必读书单.md'
223+
items: [
224+
{text: '00-Java工程师必读书单', link: '/md/career/Java工程师必读书单.md'},
225+
]
226226
},
227227
],
228228
// 配置文章的侧边导航栏 新增文章提交前都需要在此处操作!!!
@@ -331,8 +331,10 @@ module.exports = {
331331
sidebarDepth: 0,
332332
children: [
333333
"轻松驾驭Hive数仓.md",
334+
"数仓分层和数仓建模.md",
334335
"01-macOS下 Hive 2.x 的安装与配置.md",
335336
"Hive执行原理.md",
337+
"Hive修复分区.md",
336338
]
337339
},
338340

@@ -441,7 +443,8 @@ module.exports = {
441443
collapsable: false,
442444
sidebarDepth: 0,
443445
children: [
444-
"00-MySQL专栏规划.md",
446+
"00-亿级数据量商品系统的SQL调优实战.md",
447+
"MySQL查询优化.md",
445448
]
446449
}
447450
],
@@ -526,7 +529,8 @@ module.exports = {
526529
collapsable: false,
527530
sidebarDepth: 0,
528531
children: [
529-
"Java工程师必读书单.md",
532+
"Java工程师必读书单.md",
533+
"为什么中国的程序员有35岁危机.md",
530534
]
531535
}
532536
],
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Hive修复分区
2+
3+
## 简介
4+
5+
Hive的`MSCK REPAIR TABLE`命令用于修复(即添加丢失的)表分区。通常用于那些已在HDFS中存在,但尚未在Hive元数据中注册的分区。
6+
7+
当你在HDFS文件系统中手动添加或删除分区目录,Hive并不会自动识别这些更改。为同步元数据与实际文件系统之间的状态,可用命令:
8+
9+
```sql
10+
MSCK REPAIR TABLE table_name;
11+
```
12+
13+
较老Hive版本,用旧命令:
14+
15+
```sql
16+
ALTER TABLE table_name RECOVER PARTITIONS;
17+
```
18+
19+
执行后,Hive会检查表的分区列在HDFS中的路径,并将在HDFS中找到但Hive元数据中缺失的分区添加到元数据中。这样,当你查询那些分区时,Hive就能够正确地检索到数据。
20+
21+
这个命令并不会修复损坏的分区文件;如果分区文件损坏或丢失,你需要从备份中恢复或重新计算分区数据。`MSCK REPAIR TABLE`只是同步元数据与文件系统的状态,不会更改实际的文件。
22+
23+
## 手动删除分区目录,会恢复吗?
24+
25+
若你在HDFS中手动删除了一个分区目录,执行`MSCK REPAIR TABLE`命令并不会恢复已被删除的分区目录或数据。`MSCK REPAIR TABLE`命令的作用是同步Hive元数据与HDFS上当前的实际文件系统状态,它会添加那些存在于HDFS上但尚未在Hive元数据中注册的分区。
26+
27+
在你手动删除HDFS上的一个分区目录的情况下,执行`MSCK REPAIR TABLE`命令将会从Hive元数据中移除对应这个已删除目录的分区信息,因为该命令会发现HDFS上不再有这个分区的目录,并更新Hive元数据以反映这个变化。
28+
29+
若希望恢复被删除的分区数据,你要从备份中恢复数据或者重新计算并重新写入这些分区数据到HDFS中。一旦数据在HDFS中被恢复或重新放置,你可再运行`MSCK REPAIR TABLE`更新Hive元数据,使其包含新恢复的分区信息。
30+
31+
## 总结
32+
33+
`MSCK REPAIR TABLE`用于同步Hive元数据,不能用来恢复在HDFS中被删除的数据。
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# 数仓分层和数仓建模
2+
3+
## 1 什么是数仓
4+
5+
数仓是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准备包括对数据的清洗、转义、分类、重组、合并、拆分、统计等。
6+
7+
数仓的:
8+
9+
- 输入系统,埋点产生的用户行为数据、JavaEE 后台产生的业务数据、爬虫数据
10+
- 输出系统,报表系统、用户画像系统、风控系统、推荐系统、机器学习等
11+
12+
## 2 数仓分层
13+
14+
### 2.1 ODS(Operation Data Store)原始数据层
15+
16+
存放未经过处理的原始数据,结构上与源系统保持一致,是数据仓库的数据准备区。
17+
18+
ODS表命名规范:`ods_表名_单分区增量全量标识(inc/full)`
19+
20+
主要是存储近期的原始事务数据,以便进一步的处理和分析。
21+
22+
1. **保持数据原貌,不做任何修改**:ODS数据通常是未经处理的原始数据,直接从源系统导入,保留数据的原始状态,包括所有历史记录和细节,以便数据审计和完整性分析。
23+
2. **压缩采用 LZO,压缩比是 100g 数据压缩完 10g 左右**:为减少存储空间和优化I/O性能。LZO是一种可以提高数据读取速度的压缩算法,在Hadoop生态系统中使用较广。虽然10:1压缩比例是一个大概的参考,实际的压缩比率会根据数据的类型和特性而有所不同。
24+
3. **创建分区表**:在数据仓库中创建分区表是为了优化查询性能。通过将表中的数据分为较小的部分(分区),可以减少查询时需要扫描的数据量,特别是在大量数据的环境中,分区可以显著提高性能。
25+
26+
ODS的设计确实是为了确保数据可以迅速被引入数据仓库系统,并为之后的ETL(Extract, Transform, Load)操作、数据清洗、维度建模以及事实表的生成做准备。在维护数据的准确性和一致性的同时,也要考虑存储和查询性能的优化。
27+
28+
#### 具体工作
29+
30+
比如就是利用 Hive 去映射 HDFS 中的数据,将其制作成表。
31+
32+
### 2.2 DWD(Data Warehouse Detail) 明细数据层
33+
34+
也称为数据清洗层或数据准备层,主要负责对ODS层中的原始数据进行清洗和转换,使数据更加适合于分析。基于维度建模理论来构建,存放维度模型中的事实表,保存各业务过程最小粒度的操作记录。各指标都在该层。
35+
36+
1. **数据清洗**
37+
- **空值去除**:清除那些空值记录,保证数据的完整性。
38+
- **过滤无意义的数据**:比如,去掉订单ID、支付ID为空的记录,确保核心业务字段的准确性。
39+
- **数据一致性处理**:对用户行为宽表和业务表进行匹配和整合,保证数据在各表之间的一致性。
40+
2. **清洗的手段**
41+
- 使用 SQL 进行结构化数据查询和清洗。
42+
- MapReduce(MR)、Resilient Distributed Dataset(RDD)等大数据处理技术用于处理大规模数据集。
43+
- Kettle、Python 等工具可进行数据转换、迁移和清洗。
44+
3. **清洗数据量的合理范围**
45+
- 清洗数据的比例取决于数据质量和业务要求,通常没有固定的标准。在某些情况下,例如1万条数据中清洗掉1条可能是合理的,但这需要根据实际情况分析。
46+
4. **数据脱敏**
47+
- 对敏感数据,如手机号、身份证号等信息进行脱敏处理,以保护用户隐私。
48+
5. **维度退化**
49+
- 简化数据模型,减少复杂的多维结构,例如将商品分类合并成一个字段,或将省市县地址合并,以提升查询效率和简化分析过程。
50+
6. **LZO压缩**
51+
- 对数据进行LZO压缩,以节省存储空间并优化读取性能。
52+
7. **列式存储 Parquet**
53+
- 利用列式存储格式如Parquet,可以优化分析查询的性能,特别是对于只需要访问表的某几列数据的场景。
54+
55+
综上,DWD目标是确保数据在质量、安全性、效率和可用性方面都满足数据仓库和业务分析的需求。通过DWD层的处理,数据将被准备好供下一层(数据应用层、数据分析层等)使用。
56+
57+
### 2.3 DIM(Dimension)公共维度层
58+
59+
基于维度建模理论来构建,存放维度模型中的维度表保存一致性维度信息。
60+
61+
通常存储维度信息的部分,它用于分类、描绘或者给基础数据(事实数据)添加上下文。维度表通常包含描述性属性(称为维度),这些信息用于事务数据分析的参照基础。
62+
63+
在事物发生时,维度数据能够提供以下环境信息:
64+
65+
1. **描述性元素**
66+
维度数据包括用于描述或分类主要事务(如销售、事件)的属性,比如产品维度可以包含产品名称、类别、品牌、供应商等描述产品的信息。
67+
2. **层次结构信息**
68+
维度通常包含一些层次性信息,支持按不同层级对数据进行汇总。例如,时间维度可能包括年、季度、月、周、日等层次。
69+
3. **分析维度**:
70+
维度数据使得用户能够从各个不同角度分析事务数据。例如,顾客维度可以使企业按客户地区、客户类型等粒度来分析营销效果。
71+
4. **历史变更跟踪**
72+
在某些维度设计中,可以追踪并记录随时间变化的属性值,以保持数据在特定时期的视图,这在做趋势分析或历史数据比对时特别有用。
73+
5. **参照规范化**
74+
维度表可以应用标准化参照,确保数据整洁并易于理解,并减少数据重复储存。
75+
76+
在数据仓库的“星型模式”或“雪花模式”设计中,DIM 层的维度表围绕事实表进行组织,事实表存储量化的业务数据(如销售总额、交易次数)。通过事实表与一个或多个维度表的关联查询,可以有效地分析和汇总业务数据。
77+
78+
总的来说,DIM 层(维度层)为事务数据提供有价值的环境信息,并且在数据仓库中起着至关重要的作用,使得复杂的数据分析变得可能。
79+
80+
### 2.4 DWS(Data Warehouse Summary )汇总数据层
81+
82+
基于上层的指标需求,以分析的主题对象作为建模驱动,构建公共统计粒度的汇总表。读取业务主题明细表,计算出各业务主题关心的通用维度和指标,并存储到自研的wtable(分布式KV、klist 存储系统 )
83+
84+
### 2.5 ADS(Application Data Service)数据应用层
85+
86+
存放各项统计指标结果。提供 ad-hoc 查询和实时大盘服务,ad-hoc查询指通过 Flink 将主题明细宽表实时导入ck,为分析师和产品提供 ad-hoc 查询;实时大盘主要读取 wtable 中存储的DWS多维汇总指标来提供。
87+
88+
### 2.6 DWT(主题数据层,可有可无)
89+
90+
做了哪些事。既然可有可无,就不要它,将其也放入 DWS。
91+
92+
参考:
93+
94+
- https://blog.csdn.net/wjt199866/article/details/115184169

0 commit comments

Comments
 (0)