Hive是构建在Hadoop之上的数据仓库软件。它提供类似sql的查询语句HiveQL对数据进行分析处理,Hive将HiveQL语句转换成一系列MapReduce作业并执行。
目前,Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎,常用于离线批处理。
http://hive.apache.org/
数据仓库(Data Warehouse),是一个面向主题、集成的、随时间变化的,但信息本身相对稳定的数据集合,用于对管理决策过程的支持。
https://www.jianshu.com/p/0b6414f92442
Hive的元数据:包括表的名字、列、分区、属性(内/外部表)以及表数据所在目录等。将元数据存储在数据库中(metastore),支持mysql、derby、oracle等数据库。
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用生成。
具体说明分桶:clustered by (user_id) sorted by (leads_id) into 10 buckets
其中,TEXTFILE为默认格式,导入数据时会直接将数据文件copy到hdfs上不进行处理;
其他三种格式的表不能直接从本地文件导入数据,数据要先导入到 TEXTFILE 格式的表中,然后再从表中用 insert 导入 SequenceFile,RCFile,ORCFile 表中。
缺点:
缺点:
load data local inpath 'xxx.txt' into table xxx
load data inpath '/home/xxx/add.txt' into table xxx
alter table db.access_log add partition (dt='18-09-18') location 'hdfs://ns/hive/warehouse/access_log/dt=18-09-18';
insert overwrite table db.log_v2 partition(dt='18-09-26')
select uid,model,key,value,time from db.log where dt='18-09-26';
create table test4 as select id, name, tel from xxx
HQL | SQL | |
---|---|---|
数据存储 | HDFS、Hbase | Local FS |
数据格式 | 用户自定义 | 系统决定 |
数据更新 | 不支持(将之前的数据覆盖) | 支持 |
索引 | 有(0.8版之后增加) | 有 |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高(UDF、UDAF、UDTF) | 低 |
数据规模 | 大(数据量大于TB) | 小 |
数据检查 | 读时模式 | 写时模式 |
Hive在0.8之后增加的索引为位图索引,而传统SQL有复杂的索引。
UDF(User-Defined-Function) 一进一出;
UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出;
UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view explore()。
1、在大数据场景下不担心数据体量问题,需要注意的是数据倾斜。而避免数据倾斜,关键在于找到可能导致数据倾斜的函数,在数据量较大时,需慎用 count(distinct) 等;
2、设置合理的map reduce 的task数量。
参考资料:
https://zhuanlan.zhihu.com/p/46210633
https://zhuanlan.zhihu.com/p/82859179
https://zhuanlan.zhihu.com/p/46210633
https://www.jianshu.com/p/b3e618c8af86
偏技术:
https://blog.csdn.net/youyou1543724847/article/details/83446908