IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hive的分区与分桶操作 -> 正文阅读

[大数据]Hive的分区与分桶操作

Hive分区与分桶

1. 前置准备

查看数据文件

stocks.csv文件以逗号“,”分隔,依次记录股票代码、股票交易日期、股票开盘价、股票最高价、股票最低价、股票收盘价、股票交易量和股票成交价。
在这里插入图片描述

进入hive客户端

设置Hive本地执行模式,注意如果通过网络执行,可省略此步,数据量不大时,本地可加快执行速度。

SET mapreduce.framework.name=local;

1.1 实验环境

1)Oracle Linux 7.4

2)Java1.8.0_144

3)Hadoop2.7.4

4)Hive2.3.3

1.2 实验流程

1)建立表stocks,做为原始股票数据表

2)建立分区表p_stocks,将原始表中数据按分区抽取进来,每个分区在HDFS上建立一个文件夹,每个文件夹下存储该分区的数据文件

3)建立分桶表b_stocks,将原始表中的数据按分桶抽取进来,每个分桶在HDFS上所属表下生成一个文件,文件中存储分桶的数据

2. 分区分桶

建立表stocks,做为原始股票数据表
在这里插入图片描述
加载数据

LOAD DATA LOCAL INPATH '/root/experiment/datas/hive/stocks.csv' OVERWRITE INTO TABLE stocks;

查询表

SELECT * FROM stocks;

在这里插入图片描述

2.1 表分区

**建立按symbal分区表p_stocks **

CREATE EXTERNAL TABLE p_stocks(
sno STRING,
symbol STRING,
month STRING,
price_open FLOAT,
price_high FLOAT,
price_low FLOAT,
price_close FLOAT,
volume INT,
price_adj_close FLOAT)
PARTITIONED BY (p_symbol STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

将表stocks中数据按symbol字段分区存储至表p_stocks中

FROM stocks

INSERT INTO TABLE p_stocks PARTITION(p_symbol='APPL') SELECT * WHERE symbol='APPL'

INSERT INTO TABLE p_stocks PARTITION(p_symbol='AAME') SELECT * WHERE symbol='AAME'

INSERT INTO TABLE p_stocks PARTITION(p_symbol='IBM') SELECT * WHERE symbol='IBM'

INSERT INTO TABLE p_stocks PARTITION(p_symbol='ACFN') SELECT * WHERE symbol='ACFN'

INSERT INTO TABLE p_stocks PARTITION(p_symbol='ACAT') SELECT * WHERE symbol='ACAT';

在Web页面查看HDFS数据物理存储情况,共分为5个文件夹分别记录symbol的5个分区,每个分区下生成一个文件存储了插入的数据。

在这里插入图片描述

通过HQL查询表p_stocks中APPL分区的内容

在这里插入图片描述

2.2 表分桶

依据stocks.csv内容,将下面命令输入hive>后,建立分桶表b_stocks

CREATE EXTERNAL TABLE b_stocks(
sno STRING,
symbol STRING,
month STRING,
price_open FLOAT,
price_high FLOAT,
price_low FLOAT,
price_close FLOAT,
volume INT,
price_adj_close FLOAT)
CLUSTERED BY (symbol) INTO 3 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

设置分桶,设置Reducer的数量与分桶的数量一致

-- 如果不使用set hive.enforce.bucketing=true这项属性,需要显式地声明SET mapreduce.job.reduces=3;来设置Reducer的数量。此外,还需要在SELECT语句后面加上CLUSTERBY来实现INSERT查询。
SET hive.enforce.bucketing=true;

SET mapreduce.job.reduces=3;

将原始表stocks中的数据按分桶设定格式插入至分桶表b_stocks中

INSERT INTO TABLE b_stocks

SELECT * FROM stocks CLUSTER BY symbol;

在这里插入图片描述

查看分桶表b_stocks在HDFS上物理数据存储的格式

在这里插入图片描述

以第1个分桶为例,通过HQL语句查看分桶表b_stocks中分桶1的数据

SELECT * FROM b_stocks tablesample(BUCKET 1 out of 3 ON symbol);

在没有经过分桶的表stocks中,通过tablesample方法,取出随机分成3桶中的第2桶数据。

SELECT * FROM stocks tablesample(BUCKET 2 out of 3 ON rand());

在这里插入图片描述

3. 流程总结

分桶操作需要根据某一列具体数据来进行哈希取模操作,故指定的分桶列必须基于表中的某一列(字段)。分桶改变了数据的存储方式,它会把哈希取模相同或者在某一区间的数据行放在同一个桶文件中。

桶为表加上了额外的结构,Hive 在处理查询时能利用这个结构,提高了执行效率。

文章仅做记录,涉及侵权内容请联系删除

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:32:03  更:2022-03-30 18:35:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:20:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码