分区
静态分区
内存将划分为多个区域,每个区域对应一个分区,当程序访问内存时系统将为其分配一个固定大小的分区; 优点:简单易于管理 缺点:浪费资源,内存碎片化积多
动态分区
内存会划分为不同大小的分区,程序访问时自动分配合适大小的分区; 优点:灵活,空间最大化; 缺点:管理复杂,需要时间匹配合适的分区,时间延迟;
内外表区别
内部表
- 存储:数据库管理系统内部的表,数据和表结构都在数据库中;
- 访问:直接通过SQL工作;
- 删除:元数据,原始数据
- 建议:测试
外部表
- 存储:数据库管理系统之外的表,数据通常存储再外部文件:
- 访问:需要外部表定义才可以访问;
- 删除:元数据
- 建议:生产环境
HiveSQL执行流程(==>)
查询解析查询优化元数据查询任务分配任务执行返回结果
HiveSQL中小文件处理
处理hiveSQL底层原理MR,小文件在于map阶段将数据划分若干分,Reduce合并输出的小文件;
缺点:小文件过多浪费资源,降低效率
解决:设定条件,按照任务输出文件大小的平均值作为阈值,若大于这个阈值将独立创建一个文件继续工作;
开窗函数
聚合函数
sum求和avg平均值count计数max最大min最小分析函数
lead下一条字段数据lag上一条字段数据first_value第一条字字段数据last_value最后一条字段数据顺序函数
rank不连续可跳dense_rank不连续不跳row_number连续不跳Hive4个by
order by 全局排序
sort by 排序
distribute by 分区
cluster by 分区字段名和排序字段名相同进行简化
hive文件格式和压缩
Hive 文件格式
- 文本文件格式:Hive 支持基本的文本文件格式,如 CSV、TSV 等。这些格式易于查看和编辑,但不适合大规模数据处理,因为它们没有压缩和列式存储的优势。
- 序列文件格式:序列文件是一种二进制文件格式,可以提高数据的读写效率。它支持数据压缩,适合大规模数据的存储和处理。
- ORC 文件格式(Optimized Row Columnar):ORC 是一种列式存储格式,可以提供更好的查询性能和压缩比率。它适用于大型数据集和复杂查询。
- Parquet 文件格式:Parquet 也是一种列式存储格式,与 ORC 类似,可以提供高性能查询和压缩优势。Parquet 格式通常用于数据仓库和大数据分析场景。
Hive 压缩方式
- Snappy 压缩:Snappy 是一种快速压缩/解压缩算法,可以提供较快的压缩速度和相对较好的压缩比率。在 Hive 中,Snappy 压缩常用于中等大小的数据集。
- Gzip 压缩:Gzip 是一种通用的压缩算法,在 Hive 中也可以使用。Gzip 压缩率较高,但解压缩速度较慢,适合对数据进行长期存档。
- LZO 压缩:LZO 是一种较快的压缩算法,可以提供高速的压缩和解压缩性能。LZO 压缩在 Hive 中可以用于需要快速数据访问的场景。
数据倾斜
- Group by
原因:一个key值或者多个key值对应的数据量超过了其他key值对应的数据,导致大量的key值数据在reduce阶段聚合,该reduce所需要的时间高于其他reduce任务时间,产生数据倾斜;
解决:
- map-side :在map阶段部分聚合操作再执行后续任务;
- Skey-groupby:整个业务执行两次MR任务,第一个MR任务通过随机数先聚合;第二个MR通过指定的字段进行处理;
- JOIN
原因:在关联表的时候字段分布不均匀,导致数据倾斜因素
解决:map-join 只有map阶段没有reduce阶段;
拉链表意义以及用途
拉链可以理解为数据模型,防止海量数据中对其无休止的存储,浪费极大空间;
优点:可以满足获取历史数据状态并减少空间浪费
用法:增加两个字段StartTime和EndTime,如:某App登录系统,后台记录用户的登录信息,采用拉链式,一个用户共两条数据来记录,第一条记录历史数据,第二条记录当日的数据。
版权归原作者 阿龙要当程序猿 所有, 如有侵权,请联系我们删除。