签约做网站模板,大连企业网站模板建站,北京值得去的互联网公司,南京 百度 网站建设Hive 内部表和外部表的区别
外部表在创建时需要加关键字 external#xff1b;创建内部表时#xff0c;会将数据移动到数据仓库指定的路径#xff1b;创建外部表时#xff0c;不会移动数据#xff0c;只会记录数据所在的路径#xff1b;删除内部表时#xff0c;会删除元…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 用户自定义函数一对一输出例如 roundUDTF 用户自定义表生产函数一对多输出例如 explodeUDAF 用户自定义聚合函数多对一输出例如countsum 等
Hive 数据倾斜
什么是数据倾斜
数据倾斜是指在分布式处理中数据不均匀有部分数据比较集中数据倾斜会使得在处理过程中某个结点的处理效率过低甚至造成内存溢出
造成数据倾斜的原因
业务本身造成的建表时考虑不周导致 key 分布不均匀某些 SQL 操作容易造成数据倾斜
造成数据倾斜的主要操作
group by 维度过少某些值比较大分发到不同 Reduce 操作造成某个 Reduce 数据倾斜
join 某些 key 值比较多或者 key 值存在大量 null join 后分发到某个 Reduce 的数据量过大
数据倾斜的解决方法
group by 造成的数据倾斜
分组中有部分数据比较多造成数据倾斜。这种情况可以通过调参解决
set hive.map.aggrtrue
set hive.groupby.skewindatatrue;hive.map.aggrtrue 表示开启 map 端聚合hive.groupby.skewindatatrue 表示有数据倾斜时进行负载均衡这会使得生成两个 MR job第一个 job 会将数据随机分发到不同的 Reduce 进行聚合可以达到负载均衡的效果结果传入第二个 MR job 根据预处理的数据结果按照 group by key 进行分发处理包获赠相同的 key 分到同一个 Reduce 中完成聚合
join 造成的数据倾斜
有大量 null 值 join 的情况
数据中有大量 null 值可以过滤掉使用随机值赋值
大小表 join 的情况
可以使用 map join 将小表加载到内存中并在 map 阶段完成 join 操作 例如 select /*MAPJOIN(b)*/ a.a1,a.a2,b.b2 from tablea a JOIN tableb b ON a.a1b.b1 --其中b 为小表key 值倾斜的情况 可以将倾斜的 key 过滤出来单独 join 则会分散到多个 task 进行 join’ 操作最后再进行 union 即可