hive学习笔记之五:分桶
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
《hive学习笔记》系列导航
本篇概览
本文是《hive学习笔记》的第五篇,前文学习了分区表,很容易发现分区表的问题:
- 分区字段的每个值都会创建一个文件夹,值越多文件夹越多;
- 不合理的分区会导致有的文件夹下数据过多,有的过少;
此时可以考虑分桶的方式来分解数据集,分桶原理可以参考MR中的HashPartitioner,将指定字段的值做hash后,根据桶的数量确定该记录放在哪个桶中,另外,在join查询和数据取样时,分桶都能提升查询效率;
- 接下来开始实战;
配置
- 执行以下设置,使得hive根据桶的数量自动调整上一轮reducers数量:
set hive.enforce.bucketing = true;
- 如果不执行上述设置,您需要自行设置mapred.reduce.tasks参数,以控制reducers数量,本文咱们配置为hive自动调整;
准备数据
接下来先准备外部表t13,往里面添加一些数据,将t13作为后面分桶表的数据源:
- 表名t13,只有四个字段:
create external table t13 (name string, age int, province string, city string)
row format delimited
fields terminated by ','
location '/data/external_t13';
- 创建名为013.txt的文件,内容如下:
tom,11,guangdong,guangzhou
jerry,12,guangdong,shenzhen
tony,13,shanxi,xian
john,14,shanxi,hanzhong
- 将013.txt中的四条记录载入t13:
load data
local inpath '/home/hadoop/temp/202010/25/013.txt'
into table t13;
分桶
- 创建表t14,指定字段分桶,桶数量为16:
create table t14 (name string, age int, province string, city string)
clustered by (province, city) into 16 buckets
row format delimited
fields terminated by ',';
- 从t13导入数据,注意语法是from t13开始,要用overwrite关键字:
from t13
insert overwrite table t14
select name, age, province, city;
- 导入过程如下图所示,可见reducer数量已被自动调整为桶数量:
- 导入后,查看hdfs,可见被分为16个文件,(和分区对比一下,分区是不同的文件夹):
取样
执行以下语句,取样查看t14的数据:
hive> select * from t14 tablesample(bucket 1 out of 2 on province, city);
OK
tom 11 guangdong guangzhou
john 14 shanxi hanzhong
Time taken: 0.114 seconds, Fetched: 2 row(s)
- 至此,分桶操作就完成了,基础知识的实践已经完成,接下来开始一些进阶实践;
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
hive学习笔记之五:分桶的更多相关文章
- hive学习笔记之一:基本数据类型
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之三:内部表和外部表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之四:分区表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之六:HiveQL基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之七:内置函数
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之九:基础UDF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Hive动态分区和分桶(八)
Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...
- hive学习笔记之十:用户自定义聚合函数(UDAF)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<hive学习笔记>的第十 ...
- hive学习笔记之十一:UDTF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 25.数据结构,LinkedList ,泛型,类型通配符
3.数据结构 数据结构是计算机存储,组织数据的方式.是指相互之间存在的一种或多种特定关系的数据元素的集合 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 ---------常见的数据结构 ...
- [bug] org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 2
原因 SpringBoot启动加载yml配置文件出现编码格式错误 参考 https://www.pianshen.com/article/2431144034/
- 二、Python流程控制练习题
一.分支结构-if等 练习题: 练习1:英制单位与公制单位互换 练习2:掷骰子决定做什么 练习3:百分制成绩转等级制 练习4:输入三条边长如果能构成三角形就计算周长和面积 练习5:个人所得税计算器 练 ...
- gcc 版本
$ gcc --versiongcc (Ubuntu 5.4.0-6kord1~16.04.4k2) 5.4.0 20160609Copyright (C) 2015 Free Software Fo ...
- zabbix官方源替换为阿里云的zabbix源,一键脚本。(安装zabbix报错curl#18 - "transfer closed with 2988713 bytes remaining to read":15 ETA Trying other mirro)
最近突然安装zabbix总是报错,比如 (24/27): t1lib-5.1.2-14.el7.x86_64.rpm | 166 kB 00:00:00 zabbix-web-4.4.6-1.el7. ...
- JavaEE 三层架构模式
什么是架构模式 要理解三层架构模式,我们得先搞清楚什么是架构模式.(这里说的架构模式是针对后端开发) 所谓架构就是系统最高级别的设计,一个系统特别复杂时才需要架构设计,如果只是开发一个很小程序,就谈不 ...
- KMP算法中我对获取next数组的理解
之前在学KMP算法时一直理解不了获取next数组的函数是如何实现的,现在大概知道怎么一回事了,记录一下我对获取next数组的理解. KMP算法实现的原理就不再赘述了,先上KMP代码: 1 void g ...
- win7 32位系统 安装node.js最新版本遇到的问题
win7 32位是安装不了10.0以上版本的node.js的 ,因为10.0以上版本的node.js已经不对win7 32位的电脑进行维护更新了,如果你的电脑是win7 32位系统的话,只能下载安 ...
- .NET平台系列15 .NET5的吊炸天性能改进
系列目录 [已更新最新开发文章,点击查看详细] .NET5的性能改进测试功能 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配. .NET5的性能 ...
- GO学习-(34) Go实现日志收集系统3
Go实现日志收集系统3 再次整理了一下这个日志收集系统的框,如下图 这次要实现的代码的整体逻辑为: 完整代码地址为: etcd介绍 高可用的分布式key-value存储,可以用于配置共享和服务发现 ...