BigBrother的大数据之旅Day 11 hive(2)
HIVE参数
命名空间 | 读写权限 | 含义 |
---|---|---|
hiveconf | 可读写 | hive-site.xml当中的各配置变量 例:hive --hiveconf hive.cli.print.header=true 只当前会话有效 |
system | 可读写 | 系统变量,包含JVM运行参数等 例:set system:user.name=root 当前会话有效 在命令行中hive> |
env | 只读 | 环境变量 例:env:JAVA_HOME |
hivevar | 可读写 | 例:hive -d val=key 当前cli有效 启动hive时加入参数(用的比较少) |
a, 在命令行输入 set;当前会话中的所有变量都展示出来
b,在家目录.hivehistory中有敲过端所有命令和结果
c,家目录.hiverc中可以设置参数(hive的参数初始化)
d,set system:user.name=lisi; 设置当前用户为lisi
详述动态分区以及SQL
动态分区
动态分区: 数据自动分区,和静态分区相比,数据不需要在添加的时候直接指定分区了
1 开启动态分区
(必须设置的参数)
set hive.exec.dynamic.partition=true
set hive.exec.dynamic.partitohn.mode=nonstricet(不是no是non)
strict时至少有一个静态分区
(可选参数)
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)
2 创建表
create table tb_user2(id int,name string,age int,sex string,likes array<string>,addrs map<string, string>)row formatdelimitedfields terminated by ","collection items terminated by "-"map keys terminated by ":"lines terminated by "\n";
创建分区表
create table tb_user3(id int,name string,likes array<string>,addrs map<string, string>)partitioned by(age int,sex string)row formatdelimitedfields terminated by ","collection items terminated by "-"map keys terminated by ":"lines terminated by "\n";
from tb_user2 insert into tb_user3 partition(age,sex)select id,name,likes,addrs,age,sex;
结果
静态分区块,动态分区开启了mapreduce任务,所以慢
hive 视图
1 不支持物化视图,每次视图都是一个子查询
2 只能查询
分桶
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
对于hive中每一个表、分区都可以进一步进行分桶。
由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
主要适用场景:数据抽样
抽样表: TABLESAMPLE (BUCKET x OUT OF y [ON colname])
TABLESAMPLE子句允许用户对表中数据抽样,而不是获取全表数据。 TABLESAMPLE子句可以跟在任何表的from子句之后。桶从1开始计数。colname表示通过哪列进行抽样。colname可以是表中非分区列或者rand()表示对一整行而非单个列进行抽样。表中的记录根据指定的列分桶到y个桶中(从1到y)。返回属于x桶的列。
下面SQL语句表示source表中分桶为32个桶之后返回第三个桶的数据。's’是表的别名:
SELECT * FROM source TABLESAMPLE(BUCKET 3 OUT OF 32 ON rand()) s;
上面的效率不高
一般情况下,TABLESAMPLE会扫描整张表来获取抽样数据,效率不高。在创建表的时候可以通过clustered by子句指定一列或几列将表的数据先使用hash分区。如果TABLESAMPLE子句指定的列和clustered by子句中的列一样,TABLESAMPLE子句只扫描表中需要的hash分区并返回:
如果上面例子中,表source创建的时候使用了’clustered by id into 32 buckets’,则:
TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)
TABLESAMPLE(BUCKET X OUT OF y ON id)
N:桶的个数,一共多少桶 – 例如32个
x:第一个取端桶 --例如2
y:桶的个数或者因子,可以理解为步长-- 例如 4
32/4=8 , 取8份数据
2 ,6,10,14…30
1 开启分桶
set hive.enforce.bucketing=true;
2 创建分桶表
CREATE TABLE tb_bucket( id INT, name STRING, age INT)
CLUSTERED BY (age) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;
3 导入数据(从其他表中)
insert into tb_bucket select id,name,age from tb_user2;
4 进行分桶抽样
select * from tb_bucket tablesample(bucket 2 out of 4);
权限管理
三种授权方式
1、Storage Based Authorization in the Metastore Server
基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
2、SQL Standards Based Authorization in HiveServer2
基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。
3、Default Hive Authorization (Legacy Mode)
hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
修改权限为hiveserver2
1 修改服务器配置文件
<property><name>hive.security.authorization.enabled</name><value>true</value>
</property>
<property><name>hive.server2.enable.doAs</name><value>false</value>
</property>
<property><name>hive.users.in.admin.role</name><value>root</value>
</property>
<property><name>hive.security.authorization.manager</name><value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property><name>hive.security.authenticator.manager</name><value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
2 服务端启动hiveserver2;客户端通过beeline进行连接
3 使用命令对权限进行管理
CREATE ROLE role_name; -- 创建角色
DROP ROLE role_name; -- 删除角色
SET ROLE (role_name|ALL|NONE); -- 设置角色
SHOW CURRENT ROLES; -- 查看当前具有的角色
SHOW ROLES; -- 查看所有存在的角色
启动hiveserver2;客户端通过beeline进行连接
3 使用命令对权限进行管理
CREATE ROLE role_name; -- 创建角色
DROP ROLE role_name; -- 删除角色
SET ROLE (role_name|ALL|NONE); -- 设置角色
SHOW CURRENT ROLES; -- 查看当前具有的角色
SHOW ROLES; -- 查看所有存在的角色
BigBrother的大数据之旅Day 11 hive(2)相关推荐
- BigBrother的大数据之旅Day 10 hive(1)
HIVE 1 一些概念 HIve存在的目的:非编程人员使用mapreduce进行分析 HIVE:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功 ...
- BigBrother的大数据之旅 Day 5 负载均衡
BigBrother的大数据之旅 Day 5 负载均衡 学习目标: 掌握nginx集群 nginx的配置文件基本配置 Location(难点,重点) 一个配置属性:根据用户的请求地址,去服务器上匹配文 ...
- BigBrother的大数据之旅 Day 1 Linux(1)
Today is a new day! 1 scala是大数据的主流编程语言 Scala是一种强大的JVM语言,混合了函数式和面向对象编程范式 2 大数据的本质为:分布式计算 3 大数据中常见的数据类 ...
- BigBrother的大数据之旅Day 12 Hbase(1)
HBASE (Hadoop Database)是个高可用,高性能, 面向列可伸缩.实时读写的分布式数据库 Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase ...
- BigBrother的大数据之旅Day 13 hbase(2)
HBase(2) 详述人员角色表的设计思路以及实现 思路:两个部分的信息分别保存到两张表中,因为hbase是列存储的表,一般存储非关系数据,就像记笔记一样,把关键点写上. 第一张表: 个人信息表 ro ...
- BigBrother的大数据之旅Day 14 某项目流程
某平台日志项目流程 架构分析 1 埋点程序把数据 以url的方式提交给nginx服务器 2 nginx服务器把日志信息(文本文件)保存到本地硬盘 3 flume,安装中nginx上通过主动方式读取日志 ...
- BigBrother的大数据之旅Day 15 sqoop
sqoop part one 1 数据迁移工具 2 通常用于hdfs和关系型数据库之间 3 实质是mapreduce 4 数据的导入导出是从hdfs的角度来说的,谁让sqoop是apache的东西呢 ...
- BigBrother的大数据之旅 Day 4 Linux(4)
学习目标: 掌握shell的基本语法 变量 本地变量:作用在当前shellscript中 环境变量:作用在当前的shell(bash)及其子shell(bash) 局部变量 特殊变量 :$#, $?, ...
- BigBrother的大数据之旅Day 2 Linux(2)
1vi和vim vim是vi的升级版,加入了高亮更适合编程,是liunx中的文本编辑器 1.1vim + 文件: 打开文件,光标移动到末 1.2 vim +数字 文件: 打开文件,光标移动到数字行 1 ...
最新文章
- emacs python环境配置
- jquery判断方法是否存在_判断图中是否有环的三种方法
- winsock select模型实现
- 每天一点Linux --- 目录的可执行权限
- linux命令学习记录一
- Spark精华问答 | Spark和Hadoop的架构区别解读
- Vue学习笔记(二) —— 组件开发
- 销售99绝招 成功没商量
- 2012.4.16总结(三)
- 使用sm2签名并验签efi文件
- Linux共享文件夹
- c语言英文背单词软件下载,英语背单词软件
- 卡诺模型案例分析_需求分析神器 | 如何用卡诺模型分析需求
- 小说平台系统开发(PHP)
- 航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
- 2020年中国互联网数据中心行业现状及发展趋势分析
- Raspberry-Pi-PICO系列--第七篇 创建自己的工程
- 电脑装windows和安卓双系统引导_Remix mini安卓电脑,玩的不只是Windows那张皮
- mongoDB数据库安装报错问题SocketException: Error connecting to和Shutting down
- 微擎系统内置的所有函数大全,一共5435个,可以当作微擎开发函数手册来查看(下篇)
热门文章
- java 矫正鱼眼图像_鱼眼图像校正
- Axure交互样式的简单使用介绍
- Java面向对象(类的无参和带参)
- 血泪教训,机械硬盘间歇性罢工,机械硬盘不显示或者显示“硬盘出现致命错误”怎么办
- Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分
- 计算机专业可以考天文学研究生吗,天文学专业强势高校来袭 看似冷门考生却挤破头都想去...
- 高效mongoDB开发规范
- MST53XXB 35V,200mA,1.9uA,低压线性稳压器
- 运放稳定性连载14:RO何时转变为ZO?(3)
- SAP se11透明表添加字段时报错:字段级的结构更改(转换表xxxxxx)