🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
1. Hive内部表和外部表的区别
对比项 | 内部表 (Managed Table) | 外部表 (External Table) |
---|---|---|
数据存储位置 | 由Hive管理,默认存储在HDFS的/user/hive/warehouse | 数据位置由用户指定,Hive只管理元数据 |
删除表时 | 删除表时,数据和元数据都会被删除 | 删除表时,只删除元数据,数据保留 |
适用场景 | 临时数据、ETL中间结果 | 共享数据、多引擎访问(如Spark、Impala) |
2. Hive有索引吗?
Hive 有索引,但使用较少,因为:
-
性能问题:Hive索引维护成本高,查询优化不如分区和分桶高效。
-
替代方案:
-
分区(Partitioning):按字段值(如
dt=20230101
)物理分割数据。 -
分桶(Bucketing):按哈希值将数据分散到固定数量的文件。
-
注意:Hive 3.0+ 已弃用索引,推荐使用 物化视图 或 LLAP(Live Long and Process) 加速查询。
3. 运维如何对Hive进行调度?
常用调度工具和方案:
-
DolphinScheduler/Airflow:编排SQL脚本,依赖任务管理。
-
Oozie:Hadoop生态的任务调度工具,支持Hive Action。
-
Crontab:简单场景定时执行Hive SQL。
-
大数据平台集成:如阿里云DataWorks、AWS EMR Step。
优化建议:
-
设置合理资源队列(YARN队列优先级)。
-
监控长时间运行的查询,避免资源耗尽。
4. ORC、Parquet等列式存储的优点
格式 | 优点 |
---|---|
ORC | - 高压缩比(Snappy/ZLIB) - 支持ACID事务(Hive 3.0+) - 适合Hive场景 |
Parquet | - 跨生态兼容(Spark/Flink支持) - 嵌套结构存储优化(适合JSON/复杂类型) |
列式存储核心优势:
-
查询高效:只读取需要的列,减少I/O。
-
压缩率高:同列数据类型一致,压缩效果更好。
5. 数据建模用的哪些模型?
常用数据仓库模型:
-
星型模型(Star Schema)
-
一个事实表 + 多个维度表,适合OLAP分析。
-
-
雪花模型(Snowflake Schema)
-
维度表进一步规范化,减少冗余,但查询复杂。
-
-
宽表模型
-
大宽表(Flat Table),减少JOIN,适合实时查询。
-
现代趋势:
-
Data Vault:适用于高可扩展的企业级数仓。
-
OneBigTable:牺牲存储换查询性能(如ClickHouse)。
6. 为什么要对数据仓库分层?
分层目的:
分层 | 作用 |
---|---|
ODS | 原始数据备份,保持数据一致性。 |
DWD | 清洗和标准化(去噪、补全缺失值)。 |
DWS | 轻度汇总,面向主题(如用户行为聚合)。 |
ADS | 应用层,直接对接报表或BI工具。 |
核心价值:
-
解耦:避免重复计算,便于维护。
-
复用:中间层可被多个业务复用。
-
高效:上层查询只需处理聚合数据。
8. SORT BY
和 ORDER BY
的区别
对比项 | SORT BY | ORDER BY |
---|---|---|
执行方式 | 局部排序(每个Reducer内部排序) | 全局排序(最终结果全排序) |
性能 | 高效,适合大数据量 | 可能引起数据倾斜(单Reducer压力大) |
使用场景 | 需分区间有序但全局无序时(如分桶查询) | 需要严格全局排序时(如Top N查询) |
补充:
-
DISTRIBUTE BY
+SORT BY
:类似Spark的repartitionAndSortWithinPartitions
,先分区再排序。 -
CLUSTER BY
=DISTRIBUTE BY
+SORT BY
(同一字段)。