当前位置: 首页 > news >正文

hive分区分桶、数据倾斜总结

一、hive的基本概念

hive是一个构建在hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供数据查询功能

二、hive的特点

(1)数据是存储在hdfs上

(2)底层是将sql转换为MapReduce任务进行计算

(3)执行程序是运行在yarn上

三、hive表数据如何修改

(1)可以删除原表,然后新建一个与原表的表名、表结构相同的表,然后将需要修改的值更改后重新复制到新表;

1) 创建一个新表,其结构与原表相同

CREATE TABLE tmp_table ...;

2) 使用INSERT语句,将原表中的数据复制到新表,并对需要修改的值进行更改

INSERT INTO TABLE tmp_table
SELECT col1,col2,CASE WHEN col3=修改值 THEN 新值 ELSE col3 END,col4,...
FROM src_table;

 3) 删除原表

DROP TABLE src_table;

4) 将新表重命名为原表的名字

ALTER TABLE tmp_table RENAME TO src_table;
(2)也可以使用insert overwrite语句,结合where条件对需要修改的值更改过后,再将原表数据覆盖回去。
INSERT OVERWRITE TABLE src_table
SELECT col1,col2,col3,col4,... FROM src_table WHERE col3!=修改值
UNION ALL
SELECT col1原来值,col2原来值,col3新值,col4原来值,...;

四、hive分区表和桶表的区别

区别:从表现形式上来看:分区表是一个目录,而分桶表是一个文件;

从数量上来看:分区表的分区个数是可以增长的,而分桶表一旦指定完之后就不能增长;

从依据上来看:分区表需要手动添加分区,分区时依据的是表外字段,而分桶表是按照表内字段

从数据分布上来看:分区表在根据分区字段进行分区时可能会导致数据分布不均的情况,而分桶表是根据 hash值进行划分的,数据分布比较均匀。

五、如何给hive表增加一个分区

增加分区:通过alter修改表信息,然后在表名后面通过add添加一个经过判断后不存在的分区

删除分区同上,是通过drop删除一个经过判断后存在的分区

六、hive的数据倾斜

数据倾斜

hive的数据倾斜通常出现在MapReduce处理任务时,在不同节点并行处理数据的过程中,由于某一节点处理的数据远超其它节点的数据时,会导致此节点处理数据的时间远超出其它节点的时间甚至导致任务失败

原因及解决方案

(1)表关联时,关联字段null值过多;可以将空字段与非空字段分开检索,然后用union all合并查询结果,也可以使用外连接关联两表,然后对关联字段为的进行赋值,使其不为空;

(2)关联字段的数据类型不同;把不同的数据类型转为相同的;

(3)group by的维度过小,导致reduce处理一个分区的数据远多于另一个分区的数据;可以开

启Map端的聚合操作并设置groupby参数。

http://www.lryc.cn/news/500344.html

相关文章:

  • unity打包到安卓帧率降低
  • 【Python3】装饰器 自动更新缓存
  • 通过EPEL 仓库,在 CentOS 7 上安装 OpenResty
  • [RabbitMQ] RabbitMQ常见应用问题
  • 每日速记10道java面试题13-MySQL篇
  • 乐鑫科技嵌入式面试题及参考答案(3万字长文)
  • Leetcode 每日一题 56.合并区间
  • 【Vue】v-model、ref获取DOM
  • Python 类的设计(以植物大战僵尸为例)
  • python中权重剪枝,低秩分解,量化技术 代码
  • 调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量
  • RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式
  • Win10安装kafka并用C#调用
  • 高级架构二 Git基础到高级
  • 深入解析二叉树算法
  • 如何解决maven项目使用Ctrl + /添加注释时的顶格问题
  • 总结的一些MySql面试题
  • 渤海证券基于互联网环境的漏洞主动防护方案探索与实践
  • 用Go语言重写Linux系统命令 -- nc简化版
  • 面试复盘 part 02·1202-1207 日
  • Linux评估网络性能
  • 实战ansible-playbook(四) -文件操作重定向/追加
  • 简单题:1.两数之和
  • RTCMultiConnection 跨域问题解决
  • 23种设计模式之解释器模式
  • Postgresql内核源码分析-表数据膨胀是怎么回事
  • github使用SSH进行克隆仓库
  • 【Linux系统】 Linux内核与UNIX设计哲学的结合
  • 以太网PHY_RGMII通信(基于RTL8211)--FPGA学习笔记22
  • PowerShell 脚本实战:解决 GitLab 仓库文件批量重命名难题