Hive分桶超详细!!!

1、分桶的意义

数据分区可能导致有些分区,数据过多,有些分区,数据极少。分桶是将数据集分解为若干部分(数据文件)的另一种技术。

分区和分桶其实都是对数据更细粒度的管理。当单个分区或者表中的数据越来越大,分区不能细粒度的划分数据时,我们就采用分桶技术将数据更细粒度的划分和管理。

分桶其实跟我们MR中的分区是一样的

2、分桶的原理

与MapReduce中的HashPartitioner的原理一模一样
MapReduce:使用key的hash值对reduce的数量进行取模(取余)
hive:使用分桶字段的hash值对分桶的数量进行取模(取余)。针对某一列进行分桶存储。每一条记录都是通过分桶字段的值的hash对分桶个数取余,然后确定放入哪个桶。

MapReduce:   Key  单词  reduce的数量是3个,最后形成3个。
    hello --> hello 进行hash算法  --> 得到的hash值对3取模(0 1 2)
MapReduce假如不指定分区,是否有分区呢?答案是有,使用默认分区HashPartitioner。

Hive --> 假如 我指定分桶字段为 id , 桶的数量为 3个,就是hash(id) % 3 = 0 1 2

桶是一个个的文件,分区是一个个的文件夹。

hash 是一种算法,你需要知道,任何值都可以 hash

举例:hello --> 237847238

"hello".hashCode()

3、分桶有啥好处

分区的意义:提高查询效率
分桶的意义:将每一个分区的数据进行切分,变成一个个小文件,然后进行抽样查询(从一堆数据中找一些数据进行分析)。在进行多表联查的时候,可以提高效率(hive优化的时候再提)。

两个大表 join,使用分桶表,查询速度快。

4、分桶的实战

创建分桶的表:
create table stu_bucket(id int, name string)
clustered by(id) 
into 4 buckets
row format delimited fields terminated by ' ';

设置reduce的数量:

注意:
想要将表创建为4个桶,需要将hive中mapreduce.job.reduces参数设置为>=4或设置为-1;
通过 set mapreduce.job.reduces ; 可以查看参数的值hive (yhdb)> set mapreduce.job.reduces;
mapreduce.job.reduces=-1
hive (yhdb)> set mapreduce.job.reduces=-1;reduces = -1 表示让系统自行决定reduce的数量。

在 wordcount 的时候,创建了三个分区,reduce 的数量设置为 3,最合理,也可以设置为 1,也可以设置为 4。

加载数据:

建议:不要使用load直接加载!
使用:创建普通表,加载普通表的数据到分桶表。数据:student.txt
1001 ss1
1002 ss2
1003 ss3
1004 ss4
1005 ss5
1006 ss6
1007 ss7
1008 ss8
1009 ss9
1010 ss10
1011 ss11
1012 ss12
1013 ss13
1014 ss14
1015 ss15
1016 ss16建议不要使用load直接加载,但是可以尝试一下:
load data local inpath '/home/hivedata/student.txt' into table stu_bucket;

如上所示:Hive的分桶采用对分桶字段的值进行哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

1、reduce=-1 让job自行决定开启多少个reduce,或者设置数量大于等于桶的数量。

2、建议关闭本地模式:

官方建议使用 创建临时表加载数据:使用insert将数据插入到分桶表

hive(yhdb)> truncate table stu_bucket;(删除表内数据,不删表结构,因此只能删内表)
hive(yhdb)> create table temp_stu(id int, name string)               
row format delimited fields terminated by ' ';
hive(yhdb)> load data local inpath '/home/hivedata/student.txt' into table temp_stu;
hive(yhdb)> insert into table stu_bucket select * from temp_stu cluster by (id);

5、分桶的查询

数据不对语法: tablesample(bucket x out of y on sno)select * from stu_bucket;
select * from stu_bucket tablesample(bucket 1 out of 1);查询第一桶
select * from stu_bucket tablesample(bucket 1 out of 4 on id);查询第一桶和第三桶
select * from stu_bucket tablesample(bucket 1 out of 2 on id);查询第二桶和第四桶的数据
select * from stu_bucket tablesample(bucket 2 out of 2 on id);        
查询对8取余的第一桶的数据:
select * from stu_bucket tablesample(bucket 1 out of 8 on id);

其他查询:

查询前三条
select * from stu_bucket limit 3;
select * from stu_bucket tablesample(3 rows);
查询百分比的数据select * from stu_bucket tablesample(13 percent);大小的百分比所占的那一行。
查询固定大小的数据select * from stu_bucket tablesample(68b); 单位(K,KB,MB,GB...)固定大小所占的那一行。  byte--字节   bit --位
随机抽三行数据select * from stu_bucket order by rand() limit 3;

6、总结(重要)

定义阶段:

clustered by (id);          ---指定表内的字段进行分桶。
sorted by (id asc|desc)     ---指定数据的排序规则,表示咱们预期的数据是以这种规则进行的排序举例:
create table stu_bucket2(id int, name string)
clustered by(id) sorted by(id desc)
into 4 buckets
row format delimited fields terminated by ' ';

sorted by 指定分桶表中的每一个桶的排序规则

导入数据阶段:

cluster by (id)   
--指定getPartition以哪个字段来进行hash,并且排序字段也是指定的字段,排序是以asc排列
--相当于distribute by (id) sort by (id)insert into table stu_bucket select * from student cluster by (id);
想当于:
insert into table stu_bucket select * from student distribute by (id) sort by (id) ;distribute by (id)    -- 指定getPartition以哪个字段来进行hash
sort by (name asc | desc) --指定排序字段
-- 区别:distribute by 这种方式可以分别指定getPartition和sort的字段

总结:

分区使用的是表外字段,分桶使用的是表内字段
分桶更加细粒度的管理数据,更多的是使用来做抽样、join


cluster 和 clusted 的区别:一个是导入数据的时候调用的,一个是创建表的时候使用的。
sort by 和 sorted by 区别:sort by 是导入数据的时候,sorted by 是分桶排序规则指定的时候
distribute by 和 cluster by 的区别:前一个是分区,后一个是分区并排序。
partition by 和 partitioned by 的区别:partition by 一般和开窗函数一起使用,partitioned by 建表的时候一起使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475283.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI大模型引领变革】探索AI如何重塑软件开发流程与未来趋势

文章目录 每日一句正能量前言流程与模式介绍【传统软件开发 VS AI参与的软件开发】一、传统软件开发流程与模式二、AI参与的软件开发流程与模式三、AI带来的不同之处 结论 AI在软件开发流程中的优势、挑战及应对策略AI在软件开发流程中的优势面临的挑战及应对策略 结论 后记 每…

根据条件 控制layui的table的toolbar的按钮 显示和不显示

部分代码&#xff1a; <!-----查询条件-----> <input type"date" id"StartDate" onchange"PageList()" /> <input type"date" id"EndDate" onchange"PageList()" /><!-----表格Table-----&…

uniApp项目运行到鸿蒙手机,应用图标一直是H,应用名一直是HBuilder问题

项目运行到鸿蒙手机&#xff0c;应用图标一直是H,应用名一直是HBuilder问题 应用运行到鸿蒙手机和鸿蒙模拟器&#xff0c;应用图标一直是H,应用名一直是HBuilder&#xff0c;在自动生成的harmony-configs文件夹下也没有配置的文件&#xff0c; 这时候需要你将DevEco Studio 下…

使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题

在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法&#xff1a;有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…

vue--响应式数据

1、建一个vue应用程序&#xff08;简约&#xff09; 引入外链式 <title>第一个Vue程序</title><script src"../vue.global.js"></script> </head> {{}}插值表达式 <body><!-- {{ }} 插值表达式, 可以将 Vue 实例中定义的…

Flutter:photo_view图片预览功能

导入SDK photo_view: ^0.15.0单张图片预览&#xff0c;支持放大缩小 import package:flutter/material.dart; import package:photo_view/photo_view.dart;... ...class _MyHomePageState extends State<MyHomePage>{overrideWidget build(BuildContext context) {return…

React面试宝典

React Diff 在 React 中,diff 算法需要与虚拟 DOM 配合才能发挥出真正的威力。react 会使用 diff 算法计算出虚拟 DOM 中真正发生变化的部分&#xff0c;并且只会针对该部分进行 dom 操作&#xff0c;从而避免了对页面进行大面积的更新渲染&#xff0c;减少性能的开销。 Reac…

脚手架vue-cli,webpack模板

先安装node.js&#xff0c;它是服务器端&#xff0c;用于给页面提供服务。前端学习不需要会node.js&#xff0c;只需要学会node.js衍生出来的npm命令即可。 npm 是node.js的一个工具&#xff0c;作用是进行包管理&#xff0c;npm是node.js的包管理器。 接着安装脚手架&#xff…

二叉搜索数(二叉排序树、二叉查找树)-----详解

C系列—二叉搜索树 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 前言 一、二叉搜索树 1.1、二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

SPSS统计学:全距

概念 全距&#xff0c;也被称为极差&#xff0c;是统计学中衡量数据变异程度的一项指标。它代表了一组数据中最大值和最小值之间的差距&#xff0c;计算方式为最大值减去最小值。 用途 全距直观地揭示了总体内数值变化的幅度&#xff0c;或者说是标志值差异的范围&#xff0…

飞米仕智能门锁:以科技之名,重塑未来家居安全新篇章

在智能科技日新月异的今天&#xff0c;家居安全已悄然迈入了一个全新的智能化时代。近日&#xff0c;飞米仕智能门锁在杭州未来科技城举办了一场盛大的新品发布会&#xff0c;正式推出了其高端旗舰产品——飞米仕智能门锁K10系列。K10系列分为尊享版和旗舰版&#xff0c;售价分…

基于Java Springboot旅游民宿信息管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

SpringBoot - spring.profiles.active最佳实践

文章目录 Pre概述为什么需要多环境配置多环境配置实现步骤1. 配置文件准备2. 激活特定环境方法1&#xff1a;命令行参数方法2&#xff1a;环境变量方法3&#xff1a;IDE 配置方法4&#xff1a;全局配置文件默认设置 3. 配置文件加载顺序配置生效的原理 4. 常见问题多个配置文件…

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; Elasticsearch的索引文档过程是其核心功能之一&#xff0c;涉及将数据存储到…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说&#xff0c;被智能手机“绑架”是一件心甘情愿的事&#xff0c;和它相处的一天中&#xff0c;不必面对现实的压力&#xff0c;它就像个“舒适区”。这是因为在使用手机的过程中&#xff0c;应用程序&#xff08;尤其是游戏和社交媒体应用&#xff09;会不断刺激大…

解决“400 Bad RequestThe plain HTTP request was sent to HTTPS portnginx/1.23.1”

目录 一、问题描述 二、问题解决 三、问题原因 &#xff08;1&#xff09;问题成因 &#xff08;2&#xff09;那为什么访问其他网站的时候&#xff0c;其不会出错呢&#xff1f;而且自己会用https协议&#xff1f; 一、问题描述 在浏览器直接输入&#xff1a;“xxx.xxx.x…

有趣的跳马问题与最优路径

献给皮鞋&#x1f45e;经理 有一个无限大的棋盘&#xff0c;在某个点有一个只能走日的马&#xff0c;计算马到达棋盘上任意一个点 P(x, y) 最小步数。 “走日” 规则下&#xff0c;任意坐标的 “马” 是否可达任意其它坐标需要证明。按照递归原则&#xff0c;只需证明 “马” …

IDEA自定义文件打开格式

介绍在IDEA中自定义文件打开格式的方法&#xff0c;比如一个文件&#xff0c;可以选择用txt格式打开&#xff0c;也可以选择用xml格式打开&#xff0c;也可以用java格式打开等等&#xff0c;通过这个方法可以方便的用任意格式在idea中打开想要打开的文件。 下面分别讨论三种不…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…