第七章 HiveQL:视图
Hive不支持物理视图,hive中视图只是一个逻辑结构。
Hive先执行这个视图,然后使用这个结果进行余下的查询。
作用:
1. 降低查询的负责度
2. 通过创建视图限制数据访问
Create view shorter_join as Select * from people join cart On (cart.people_id=people.id) Where firstname=’john’;
查询语句简化为:
Select lastname from shorter_join where id=3;
创建视图时也能使用if not exists和comment子句
Create view if not exists shipments(time,part) Comment ‘time and parts for shipments’ Tblproperties(‘creator’=’me’) As select …;
删除视图:
Delete view if exists shipments;
查看视图:
Show tables;
--注意,没有show view
第八章 HiveQL:索引
Hive只有有限的索引功能。Hive中一张表的索引存储在另一张表中。
1. 提高查询速度
剪裁掉一张表的部分数据块,减少MapReduce的输入数据量。
通过explain命令可以查看某个查询语句是否用到了索引。
--创建索引
Create index employees_index Ontable employees(country) As ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’
--索引处理器
With deferred rebuild
Idxproperties(‘creator’=’me’,’created_at’=’some_time’)
--索引额外描述信息
In table employees_index_table
--索引信息存储的表
Partitioned by (country,name)
--索引包含的分区
Comment ‘Employees indexed by country and name’;
--创建内置的Bitmao索引
Create index employees_index Ontable employees(country) As ‘BITMAP’
--索引处理器
With deferred rebuild Idxproperties(‘creator’=’me’,’created_at’=’some_time’)
--索引额外描述信息
In table employees_index_table
--索引信息存储的表
Partitioned by (country,name)
--索引包含的分区
Comment ‘Employees indexed by country and name’;
--重建索引
Alter index employees_index On table employees Partition(country=’US’) Rebuild;
--显示索引
Show formatted index on employees;
--删除索引
Drop index if exists employees_index on table employees;
第10章 调优
1.使用explain查看执行计划
Hive>Explain select sum(number) from onecol;
2.使用explain extended 查看更多信息
3.限制调整
主要是对limit的一些控制优化。
Hive.limit.optimize.enable=true
--当开启后,使用limit会对源数据进行抽样
4.join优化
大表放在join语句的最右边或使用/*+STREAMTABLE(s)*/显示指出大表
小表载入内存中/*+mapjoin(d)*/
Hive>set hive.auto.convert.join=true
--自动将小表缓存
Hive.mapjoin.smalltable.filesize=25000000
--判断是否是小表的阀值
5.本地模式
Set hive.exec.mode.local.auto=true
不进行MapReduce计算
6.并行执行
特定job包含众多的阶段,有些阶段是可以并行执行的,那么job可能越快完成
Hive.exec.parallel=true
7.严格模式
Hive.mapred.mode=strict
禁止3中查询:
Ø 对于分区表,用户不允许扫描所有分区
Ø 对于使用了order by语句的查询,要求必须使用limit语句
Ø 限制笛卡尔积
8.调整mapper和reducer个数
9.JVM重用
Hadoop的默认配置通常是使用派生JVM来执行map和reduce任务的。
而启用JVM重用可以使得JVM实例在同一个job中重新使用N次。
Mapred.job.reuser.jvm.num.tasks=10
10.索引
11.动态分区调整
开启动态分区的“严格模式”
Hive.exec.dynamic.partition.mode=strict
12.开启中间压缩
Hive.exec.compress.intermediate=true
13.开启最终输出结果压缩
Hive.exec.compress.output=true
--开启输入结果压缩
Mapred.output.compression.codec=org.apache.hadoop.id.compress.GzipCodec
–指定压缩格式
第18章 安全和授权
Hive.security.authorization.enabled=true
--开启授权
Hive.security.authorization.createtable.owner.grants=All
--文件的创建者具有所有权限
--授权,给用户Edward授予创建表的权限
Hive> Grant create ondatabase default to user Edward;
--查看权限
Hive>show grant user Edward on database default;
--使用revoke取消权限
Hive> revoke create ondatabase default to user Edward;
权限列表:
All 赋予所有的权限
Alter 有修改表结构的权限
Create 有创建表的权限
Drop 有删除表或表的分区的权限
Index 有创建索引的权限
Lock 开启并发后,锁定和解锁表的权限
Select 查询表或者分区中数据的权限
Show_database 查看所有数据库的权限
Update 向表或者分区中插入或加载数据的权限
自动授权:
Hive.security.authorization.createtable.owner.grants=select,drop
设置创建表的用户自动授予对这张表的查询和删除的权限
在创建表时自动授予指定用户指定的权限:
--hive管理员admin1和Edward用户默认授予所有表的读权限,user1只有创建的权限
<property> <name>Hive.security.authorization.createtable.owner.grants</name> <value>admin1,Edward:select;user1:create</value> </property>
第19章 锁
Hive缺少update和insert类型的查询中用到的对于列、行或者查询级别的锁支持。
多用户操作时,锁和协调时非常有用的。
Hive的锁机制需要Zookeeper的支持。
Hive.zookeeper.quorum
--配置Zookeeper集群所有机器的ip
Hive.support.concurrency=true
--开启hive的锁机制
--查看锁
Show locks;
--对表people创建一个显示锁
Hive> lock table people exclusive;
--解锁