Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
主要用途:用来做离线数据分析,比直接用mapreduce开发效率更高。
1.2. 为什么要使用hive
操作接口采用类SQL语法,提供快速开发的能力,避免了去写MapReduce,减少开发人员的学习成本,功能扩展很方便。
1.3. hive的特点
可扩展
– hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
延展性
– hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
容错
– 良好的容错性,节点出现问题SQL仍可完成执行。
1.4. 架构
1.5. hive的基本操作
详情链接1
详情链接2
1.6. hive的数据存储
Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)SequenceFile是hadoop中的一种文件格式:文件内容是以序列化的kv对象来组织的
只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据
Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket
db
:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
table
:在hdfs中表现所属db目录下一个文件夹
external table
:与table类似,不过其数据存放位置可以在任意指定路径
partition
:在hdfs中表现为table目录下的子目录 注意这里分区的概念
bucket
:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件
2. hive的安装部署
解压
修改配置文件
百度云提取码;rbnz
加载驱动包
安装hive和mysq/postgresql完成后,将mysql/postgresql的连接jar包拷贝到$HIVE_HOME/lib目录下
Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的 /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar
2.1. hive为什么要启用Metastore?
metastore的三种模式
2.2. hive集群搭建(主要留意配置文件)
3. hive的基本操作
3.1. 数据定义语言DDL
创建表
具体实例
内部表和外部表的区别
修改表
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
把表(或者分区)组织成桶(Bucket)有两个理由:
获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。 使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。多表关联应用
桶表抽样查询
Hive 区分cluster by、distribute by + sort by、order by以及创建表带有clustered by和sort by
3.5. Hive join(只支持等值链接,和sql用法类似) 4. hive的集合类型集合类型主要包括:array,map,struct等,hive的特性支持集合类型,这特性是关系型数据库所不支持的,利用好集合类型可以有效提升SQL的查询速率.
hive提供了一个严格模式,可以防止用户执行那些可能产生意想不到的不好的效果的查询。即某些查询在严格模式下无法执行。通过设置hive.mapred.mode的值为strict,可以禁止3中类型的查询。
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
第一步,先求个用户的月访问次数