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 即可;

相关推荐
B站计算机毕业设计超人1 小时前
计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
大数据·hadoop·爬虫·深度学习·机器学习·数据可视化·推荐算法
专注API从业者14 小时前
分布式电商系统中的API网关架构设计
大数据·数据仓库·分布式·架构
我要用代码向我喜欢的女孩表白16 小时前
hive迁移补数脚本细粒度 表名-分区唯一键
数据仓库·hive·hadoop
隔壁老登16 小时前
查询hive指定数据库下所有表的建表语句并生成数据字典
数据库·hive·hadoop
m0_748233642 天前
【分布式】Hadoop完全分布式的搭建(零基础)
大数据·hadoop·分布式
薇晶晶2 天前
如何安装Hadoop
大数据·hadoop·分布式
人类群星闪耀时2 天前
数据湖与数据仓库:初学者的指南
大数据·数据仓库·spark
一张假钞2 天前
MapReduce 读取 Hive ORC ArrayIndexOutOfBoundsException: 1024 异常解决
大数据·hive·mapreduce
python资深爱好者2 天前
Hive中的分区和桶的概念及其作用
数据仓库·hive·hadoop
Beekeeper&&P...3 天前
Spring Security,servlet filter,和白名单之间的关系
hive·spring·servlet