Hive 常见问题

Hive 内部表和外部表的区别

  • 外部表在创建时需要加关键字 external;
  • 创建内部表时,会将数据移动到数据仓库指定的路径;
  • 创建外部表时,不会移动数据,只会记录数据所在的路径;
  • 删除内部表时,会删除元数据和数据本身;
  • 删除外部表时,仅仅删除元数据,不会删除数据本身;

Hive cluster by、sort by、distribute by、order by 的区别

  • order by :全局排序,只有一个 reduce ,数据量很大时会比较慢;
  • sort by :局部排序,只保证每个 reduce 中的数据有序,不能保证全局有序;
  • distribute by :控制 map 结果分发,相同值会被分发到同一个 map ;
  • cluster by :根据指定字段将数据分组,每组内再根据该字段正序排序(只能正序),cluster by = distribute by + sort by;

Hive 分区和分桶的区别

  • 分区是将 Hive 表数据分离为多个目录;
  • 分桶是将对应的数据文件分解为若干个部分;
  • 分区的字段必须是表中没有的字段;
  • 分桶的字段必须是表中已经存在的字段;

Hive Union 和 Union all 的区别

  • union :将多个结果合并为一个,对结果去重并排序;
  • union all :将多个结果合并为一个,不对结果去重不排序;

Hive join 的原理

在 Map 阶段将 on 的字段设为 key ,然后将选择的字段作为 value 在 Reduce 阶段,相同 key 值的数据分发到同一个 Reducer;

Hive 如何优化 join 操作

  • 若有大量 null key ,则先过滤或者随机赋值;
  • 所是大小表 join ,可使用 MapJoin ;
  • 若两张大表 join,可将倾斜的 key 过滤出来单独 join,则会分不到多个 task 进行 join 操作,最后在进行 union 操作;

Hive 的三种自定义函数及区别

  • UDF :用户自定义函数,一对一输出,例如 round;
  • UDTF :用户自定义表生产函数,一对多输出,例如 explode;
  • UDAF :用户自定义聚合函数,多对一输出,例如count,sum 等;

Hive 数据倾斜

什么是数据倾斜?

  • 数据倾斜是指在分布式处理中,数据不均匀,有部分数据比较集中;
  • 数据倾斜会使得在处理过程中,某个结点的处理效率过低,甚至造成内存溢出;

造成数据倾斜的原因

  • 业务本身造成的;
  • 建表时考虑不周,导致 key 分布不均匀;
  • 某些 SQL 操作容易造成数据倾斜;

造成数据倾斜的主要操作

group by

维度过少,某些值比较大,分发到不同 Reduce 操作,造成某个 Reduce 数据倾斜;

join

某些 key 值比较多,或者 key 值存在大量 null ,join 后分发到某个 Reduce 的数据量过大;

数据倾斜的解决方法

group by 造成的数据倾斜

分组中有部分数据比较多,造成数据倾斜。这种情况可以通过调参解决:

bash 复制代码
set hive.map.aggr=true;
set hive.groupby.skewindata=true;
  • hive.map.aggr=true 表示开启 map 端聚合;
  • hive.groupby.skewindata=true 表示有数据倾斜时进行负载均衡,这会使得生成两个 MR job,第一个 job 会将数据随机分发到不同的 Reduce 进行聚合,可以达到负载均衡的效果;结果传入第二个 MR job ,根据预处理的数据结果按照 group by key 进行分发处理,包获赠相同的 key 分到同一个 Reduce 中,完成聚合;

join 造成的数据倾斜

有大量 null 值 join 的情况

  • 数据中有大量 null 值,可以过滤掉;
  • 使用随机值赋值;

大小表 join 的情况

  • 可以使用 map join 将小表加载到内存中,并在 map 阶段完成 join 操作;
    例如:
sql 复制代码
 select /*+MAPJOIN(b)*/ a.a1,a.a2,b.b2 from tablea a JOIN tableb b ON a.a1=b.b1  --其中b 为小表

key 值倾斜的情况

可以将倾斜的 key 过滤出来单独 join ,则会分散到多个 task 进行 join' 操作,最后再进行 union 即可;

相关推荐
Sayai14 小时前
Hadoop 集群安全加固实战:YARN 未授权访问漏洞修复,firewalld 白名单 + Nginx 反向代理 Basic Auth 全流程
运维·hadoop·nginx·安全·网络安全
IT小小猪16 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
泡干脆面就番茄16 小时前
Hive入门:架构解析与安装部署实录
大数据·数据仓库·hive·hadoop·架构
yyk3332416 小时前
Hive架构
hive·hadoop·架构
APItesterCris16 小时前
告别反复手工查价:用 Open‑Claw 搭建商品监控与数据分析小工具
大数据·数据库·数据仓库·自动化
Tongzhi202617 小时前
2026 年考勤行业趋势:考勤正在从“打卡工具“变成“人力成本中枢“
大数据·数据结构·数据仓库·科技·数据库开发
计算机编程指导师17 小时前
计算机毕设选题:基于Spark+Django的水质多指标关联分析与可视化系统源码 毕业设计 选题推荐 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·水质
计算机编程指导师17 小时前
【大数据毕设】Hadoop+Spark台北市住宅价格数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·住宅价格
计算机编程指导师1 天前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
计算机编程指导师1 天前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变