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(5) -> 正文阅读

[大数据]hive(5)

4.1 Hive参数
4.1.1 hive当中的参数、变量,都是以命名空间开头

通过${}方式进行引用,其中system、env下的变量必须以前缀开头。
4.1.2 hive 参数设置方式
1、修改配置文件 ${HIVE_HOME}/conf/hive-site.xml
2、启动hive cli时,通过–hiveconf key=value的方式进行设置
例:hive --hiveconf hive.cli.print.header=true
3、进入cli之后,通过使用set命令设置
注意:2和3两种方式设置的参数只在当前会话有效。
4.1.3 hive set命令
在hive CLI控制台可以通过set对hive中的参数进行查询、设置
set设置:
set hive.cli.print.header=true;
set查看
set hive.cli.print.header;查看该参数的值
set;查看hive的所有参数。
hive历史操作命令集
~/.hivehistory

hive参数初始化配置
当前用户家目录下的.hiverc文件
如: ~/.hiverc
如果没有,可直接创建该文件,将需要设置的参数写到该文件中,hive启动运行时,会加载改文件中的配置。
[root@node4 ~]#vim .hiverc
set hive.cli.print.header=true;
[root@node4 ~]#hive
hive>

4.2 hive 动态分区
开启支持动态分区
set hive.exec.dynamic.partition=true;
默认:true
set hive.exec.dynamic.partition.mode=nostrict;
默认:strict严格模式(比如订单表以秒为单位创建分区,将会导致特别多的分区,严格模式一般不允许,但是非严格模式允许)。
nostrict:非严格模式
案例演示:
创建原始数据表
create table person21(
id int,
name string,
age int,
gender string,
likes array,
address map<string,string>
)
row format delimited
fields terminated by ‘,’
collection items terminated by ‘-’
map keys terminated by ‘:’;
load data local inpath ‘/root/data/person21.txt’ into table person21;

create table person22(
id int,
name string,
likes array,
address map<string,string>
)
partitioned by(age int,gender string)
row format delimited
fields terminated by ‘,’
collection items terminated by ‘-’
map keys terminated by ‘:’;

加载数据
from person21
insert overwrite table person22 partition(age, gender)
select id, name,likes, address,age, gender distribute by age, gender;
或简写为:
from person21
insert overwrite table person22 partition(age, gender)
select id, name,likes, address,age, gender;
注意:分区字段一定要写到最后面,否则容易出错。
show partitions person22;#查询某表上的 分区
相关参数
set hive.exec.max.dynamic.partitions.pernode;
每一个执行mr节点上,允许创建的动态分区的最大数量(100)
set hive.exec.max.dynamic.partitions;
所有执行mr节点上,允许创建的所有动态分区的最大数量(1000)
set hive.exec.max.created.files;
所有的mr job允许创建的文件的最大数量(100000)

5 Hive分桶
5.1 hive 分桶概述
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
对于hive中每一个表、分区都可以进一步进行分桶。
由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
适用场景:
对比MR的HashPartition
数据抽样( sampling )

5.2 开启支持分桶
set hive.enforce.bucketing=true;
默认:false;设置为true之后,mr运行时会根据bucket的个数自动分配reduce task个数。(用户也可以通过mapred.reduce.tasks自己设置reduce任务个数,但分桶时不推荐使用)
注意:一次作业产生的桶(文件数量)和reduce task个数一致。
5.3 分桶操作
5.3.1 往分桶表中加载数据
insert into table bucket_table select columns from tbl;
insert overwrite table bucket_table select columns from tbl;
5.3.2 桶表 抽样查询
select * from bucket_table tablesample(bucket 1 out of 4 on columns);
TABLESAMPLE语法:
TABLESAMPLE(BUCKET x OUT OF y)
x:表示从哪个bucket开始抽取数据
y:必须为该表总bucket数的倍数或因子

当表总bucket数为32时

  1. TABLESAMPLE(BUCKET 3 OUT OF 16),抽取哪些数据?
    共抽取2(32/16)个bucket的数据,抽取第3、第19(16+3)个bucket的数据
  2. TABLESAMPLE(BUCKET 3 OUT OF 8),抽取哪些数据?
    共抽取4(32/8)个bucket的数据,抽取:3,11,19,27
  3. TABLESAMPLE(BUCKET 3 OUT OF 256),抽取哪些数据?
    共抽取1/8(32/256)个bucket的数据,抽取第3个bucket的1/8数据
    5.4 实操案例
    例:
    CREATE TABLE psn31( id INT, name STRING, age INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;
    测试数据:
    [root@node4 ~]# vim bucket
    1,tom,11
    2,cat,22
    3,dog,33
    4,hive,44
    5,hbase,55
    6,mr,66
    7,alice,77
    8,scala,88
    加载原始数据:
    hive> load data local inpath ‘/root/bucket’ into table psn31;
    创建分桶表
    CREATE TABLE psnbucket( id INT, name STRING, age INT)
    CLUSTERED BY (age) INTO 4 BUCKETS
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

desc formatted psnbucket;
莫忘记开始分桶支持:
set hive.enforce.bucketing=true;
从源数据表向分桶表中添加数据:
insert into table psnbucket select id, name, age from psn31;
抽样
hive> select id, name, age from psnbucket tablesample(bucket 2 out of 4 on age);
OK
id name age
3 dog 33
7 alice 77
[root@node4 ~]# hdfs dfs -cat /user/hive_remote/warehouse/psnbucket/000001_0
7,alice,77
3,dog,33

总结:分区是分目录存储,分桶是将表中的数据分文件存储。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:32:29  更:2021-08-21 15:33:52 
 
开发: 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/23 13:10:16-

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