Hive数仓:使用桶表

2023-05-16

Hive数仓:使用桶表

文章目录

    • Hive数仓:使用桶表
      • 实验环境
      • 实验步骤
        • 1.点击"命令行终端",打开新窗口
        • 2.启动MySQL
        • 3.指定元数据数据库类型并初始化Schema
        • 4.启动Hadoop
        • 5.启动hive
        • 6.创建名为dolphin的数据库
        • 7.创建分桶表
        • 8.查看分桶表具体信息
        • 9.测试分桶表导入本地数据
        • 10.查看表bucket数据
        • 11.新建分桶表和过渡表
        • 12.插入数据到分桶表
        • 13.查询bucket_2的信息
        • 14.hive中查询分桶表中的数据
        • 15.修改桶表中bueket数量
        • 15.分桶表的抽样查询
        • 16.删除分桶表bucket_2
        • 实验总结

实验环境

Linux Ubuntu 16.04

前提条件:
1)Java 运行环境部署完成
2)Hadoop2.7.6的单点部署完成
3) MySQL数据库安装完成
4) Hive单点部署完成
上述前提条件,我们已经为你准备就绪了。

###实验内容

使用Hive完成以下实验:

  1. 创建分桶表
  2. 导入数据
  3. 抽样查询
  4. 删除分桶表

现在开始我们的学习吧!

实验步骤

1.点击"命令行终端",打开新窗口

2.启动MySQL

本实验平台已经提前安装好了MySql(账户名root,密码123456),这里只需要启动MySql服务即可

sudo /etc/init.d/mysql start

3.指定元数据数据库类型并初始化Schema

schematool -initSchema -dbType mysql

4.启动Hadoop

进入/apps/hadoop/bin目录

cd /apps/hadoop/sbin

执行启动脚本

./start-all.sh

注意,如果终端显示Are you sure you want to continue connecting (yes/no)? 提示,我们需要输入yes,再按回车即可。

检验hadoop是否启动成功

jps

5.启动hive

hive

此时,终端显示hive>,表明已经进入hive的命令行模式。

6.创建名为dolphin的数据库

create database if not exists dolphin;

显示并使用新建的dolphin数据库

show databases;

use dolphin;

7.创建分桶表

创建桶表的语法:clustered by 后面加的列一定是在表中存在的列

后面接的是桶的个数,4意味着一次上传数据会根据id的hash值再与4取模,根据这个值决定这条数据落入那个文件中。

create table bucket(id int, name string) CLUSTERED BY (id) INTO 4 BUCKETS row format delimited fields terminated by ','lines terminated by '\n'stored as textfile;

执行后显示如下:

image-20210512002355914

8.查看分桶表具体信息

输入如下命令,回车

desc formatted bucket;

执行后显示如下:

image-20210512002423100

我们从上面观察表的基本结构,列,属性,存储位置,导入导出依赖,分桶数量,等等

9.测试分桶表导入本地数据

设置强制分桶机制来保证reducer数量和桶的数量一致

set hive.enforce.bucketing = true;

尝试直接上传一个数据

我们已经在桌面为大家准备好数据集bucket.txt,打开文件后观察数据

load data local inpath '/home/dolphin/Desktop/bucket.txt' overwrite into table bucket;

image-20210512003204278

执行后显示如下:

image-20210512002805185

10.查看表bucket数据

首先查看bucket中的数据

select * from bucket;

执行后部分日志显示如下:

image-20210512003113773

查看数据在HDFS上的分布

新打开一个命令行终端,输入如下命令

hadoop fs -ls /user/hive/warehouse/dolphin.db/bucket

执行后部分日志显示如下:

image-20210512003234973

我们看到虽然设置了强制分桶,但实际bucket表下面只有一个bucket.txt一个文件
分桶也就是分区,分区数量等于文件数,所以上面方法并没有成功分桶。

结论:桶表不能通过load的方式直接加载数据

11.新建分桶表和过渡表

创建新的分桶表

create table bucket_2(id int, name string) CLUSTERED BY (id) INTO 4 BUCKETS row format delimited fields terminated by ','lines terminated by '\n'stored as textfile;

创建过渡表

create table dome(id int, name string)row format delimited fields terminated by ',';

执行后显示如下:

image-20210512003434672

12.插入数据到分桶表

现在,我们用插入的方法给另外一个分桶表传入同样数据

首先上传数据到过渡表dome

load data local inpath '/home/dolphin/Desktop/bucket.txt' overwrite into table dome;

查看数据是否导入成功

select * from dome;

执行后显示如下:

image-20210512003512625

将过渡表中的数据插入新建的分桶表

insert into table bucket_2 select * from dome;

执行后部分日志显示如下:

由于我们设置了强制分桶机制,在这里我们可以看到MarReduce任务中启动了4个Reduce

image-20210512003810626

image-20210512003917778

13.查询bucket_2的信息

查看bucket_2数据在HDFS上的分桶文件

重新打开一个命令行终端,输入如下命令,回车

hadoop fs -ls /user/hive/warehouse/dolphin.db/bucket_2

执行后显示如下:

image-20210512004145083

查看bucket_2中的分桶中的数据

hadoop fs -cat /user/hive/warehouse/dolphin.db/bucket_2/000000_0

执行后部分日志显示如下:

image-20210512004210109

14.hive中查询分桶表中的数据

查看bucket_2中的数据

select * from bucket_2;

执行后显示如下:

image-20210512004254415

15.修改桶表中bueket数量

重新将bucket_2表中的数据按id,name分成20个桶,并用id排序

alter table bucket_2 clustered by(id,name) sorted by(id) into 20 buckets;

执行后部分日志显示如下:

image-20210512004423284

观察日志发现,表格已经分成20个桶

15.分桶表的抽样查询

语法:
select * from table_name tablesample(bucket X out of Y on field);
X表示从哪个桶中开始抽取,Y表示相隔多少个桶再次抽取。
Y必须为分桶数量的倍数或者因子

select * from bucket_2 tablesample(bucket 2 out of 4 on id);

执行后部分日志显示如下:

image-20210512004518545

16.删除分桶表bucket_2

输入如下命令,回车

drop table bucket_2;

执行后显示如下:

image-20210512004543275

实验总结

  • 桶表是对某一列数据进行哈希取值以将数据打散,然后放到不同文件中存储。
  • 在hive分区表中,分区中的数据量过于庞大时,建议使用桶。
  • 在分桶时,对指定字段的值进行hash运算得到hash值,并使用hash值除以桶的个数做
    取余运算得到的值进行分桶,保证每个桶中有数据但每个桶中的数据不一定相等。
    做hash运算时,hash函数的选择取决于分桶字段的数据类型
  • 分桶后的查询效率比分区后的查询效率更高
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive数仓:使用桶表 的相关文章

随机推荐

  • Mac上类似于xshell的远程工具:finalshell 和 royal tsx

    FinalShell 国产 国产 国产 自己研发的 是一体化的的服务器 网络管理软件 不仅是ssh客户端 还是功能强大的开发 运维工具 充分满足开发 运维需求 特色功能 免费海外服务器远程桌面加速 ssh加速 本地化命令输入框 支持自动补全
  • css查找元素注意事项

    一 CSS ID 选择器查找元素 1 注意 xff1a 如果元素的ID不唯一 xff0c 或者是动态的 或者name以及linktext属性值也不唯一 我们就需要考虑用Xpath来查找元素了 xff0c 然后再对元素执行操作 不管用什么方式
  • OS2.3.7:多生产者,多消费者问题

    文章目录 0 问题描述1 问题分析2 实现3 总结 0 问题描述 桌子上有一只盘子 xff0c 每次只能向其中放入一个水果 爸爸专向盘子中放苹果 xff0c 妈妈专向盘子中放橘子 xff0c 儿子专等着吃盘子中的橘子 xff0c 女儿专等着
  • java 方法名类名命名规范

    一 命名规范 1 项目名全部小写 2 包名全部小写 3 类名首字母大写 xff0c 如果类名由多个单词组成 xff0c 每个单词的首字母都要大写 大驼峰 xff0c 如 xff1a public class MyFirstClass 4 变
  • Qt arm环境安装

    一 相关工作准备 Qt opensource 和 Qt everywhere 下载 链接 版本为5 9 8 arm linux gcc下载 链接 版本为4 8 3 tslib 下载 链接 版本为1 21 ps 可以不安装Qt opensou
  • STM32驱动ST7789V2 tft屏幕

    一 简介 本次教程使用的是1 54寸240 240像素的tft屏幕 xff0c 其接口协议为SPI协议 在使用的过程中仅需要四根数据即可驱动点亮屏幕 然后硬件使用的是STM32F103C8T6核心板 xff0c 用的是SPI2 一般购买屏幕
  • linux设置复杂度策略、登录超时处理功能

    1 在字符终端下 xff0c 实现某一用户连续错误登陆N次后 xff0c 就锁定该用户X分钟 pam tally2 执行 vi etc pam d login 在 PAM 1 0 下新起一行 xff0c 加入 auth required p
  • 飞控陀螺仪,磁力计,加速计,四元数姿态结算

    MPU6050主要包含陀螺仪和加速度计 陀螺仪主要测量角速度 xff0c 即可以测出某一时间段物体转过的角度 加速度计测量的是物体的加速度 xff0c 重力加速度即物体受重力作用的情况下具有的加速度 xff0c 物体静止时 xff0c 加速
  • 智慧物业管理系统(Springboot)

    开发工具 xff1a IDEA xff0c jdk1 8 数据库 xff1a mysql5 7 前台框架 xff1a layui 后端技术 xff1a springboot 项目描述 xff1a 1 前台住户登录 2 智慧物业管理后台 2
  • 北京大学2020公开课 AVL-Python实现代码

    class TreeNode def init self key val left 61 None right 61 None parent 61 None self key 61 key self payload 61 val self
  • Docker-2020详细教程<配合千锋Java学习营>

    Docker 2020详细教程 lt 配合千锋Java学习营 gt 2020 Docker最新超详细版教程通俗易懂 一 Docker介绍 1 下载Dcoker依的赖环境 想安装Docker xff0c 需要先将依赖的环境全部下载下来 xff
  • 使用阿里云部署Flask网页

    使用阿里云部署Flask网页 前端网页部署 阿里云apache CentOS 配置好Apache后 xff0c 将一整个html css js文件全部copy进 var www html目录下 之后就可以通过访问IP地址访问到你的index
  • MapReduce的个人理解

    MapReduce的个人理解 文章目录 MapReduce模型简介Map和Reduce函数这里给出一个简单实例 MapReduce的工作流程工作流程概述MapReduce的各个执行阶段 Shuffle过程详解Shuffle过程简介Map端的
  • Hadoop配置

    Hadoop配置 文章目录 Linux shell配置环境变量使环境变量生效Hadoop 集群安装配置到两台阿里云linux主机上Hadoop集群模式安装实验环境实验内容1 安装jdk2 下面来修改环境变量3 安装hadoop4 下面来修改
  • HDFS 的使用和管理

    HDFS 的使用和管理 文章目录 HDFS 的使用和管理实验环境实验内容实验步骤1 启动hadoop的hdfs相关进程2 用jps查看HDFS是否启动3 验证HDFS运行状态4 ls 命令5 put 命令6 moveFromLocal 命令
  • HDFS API操作

    HDFS API操作 实验环境 Linux Ubuntu 16 04 前提条件 xff1a 1 xff09 Java 运行环境部署完成 2 xff09 Hadoop 的单点部署完成 上述前提条件 xff0c 我们已经为你准备就绪了 实验内容
  • HBase的安装部署和使用

    HBase的安装部署和使用 文章目录 HBase的安装部署和使用实验环境实验内容实验步骤1 点击 34 命令行终端 34 xff0c 打开新的命令行窗口2 解压安装包3 更改文件夹名和所属用户4 设置HBASE HOME环境变量5 修改hb
  • 熟悉常用的HBase操作

    熟悉常用的HBase操作 文章目录 实验环境实验内容1 编程实现以下指定功能 xff0c 并用Hadoop提供的HBase Shell命令完成相同的任务 xff08 1 xff09 列出HBase所有的表的相关信息 xff0c 如表名 创建
  • Hive的安装部署和管理

    Hive的安装部署和管理 文章目录 实验环境实验内容实验步骤1 点击 34 命令行终端 34 xff0c 打开新窗口2 解压安装包3 更改文件夹名和所属用户4 设置HIVE HOME环境变量5 导入MySql jdbc jar包到hive
  • Hive数仓:使用桶表

    Hive数仓 xff1a 使用桶表 文章目录 Hive数仓 xff1a 使用桶表实验环境实验步骤1 点击 34 命令行终端 34 xff0c 打开新窗口2 启动MySQL3 指定元数据数据库类型并初始化Schema4 启动Hadoop5 启