1、hive:建立在Hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供了简单的类SQL查询语言,称为QL,允许用户开发自定义的mapper、reducer来处理复杂的分析工作,十分适合数据仓库的统计分析。
2、Hive架构包括如下组件:
CLI、JDBC、Thrift Server、WEB GUI、Metastore and Diver,分成两类:服务端组件、客户端组件
服务端组件:
Driver组件:包括编译器、优化器、执行器,作用是将我们写的HQL进行解析、编译优化、生成执行计划,然后调用底层的marreduce计算框架
metastore组件:元数据服务组件,负责存储hive的元数据,hive的元数据存储在关系型数据库中,hive支持把metastore服务独立出来,安装到远程的服务集群里,从而解耦hive服务和metastore服务,从而保证hive运行的健壮性
thrift服务:用来进行可扩展且跨语言服务的开发,hive集成该服务,能让不同的开发语言调用hive接口
客户端组件:
CLI:命令行接口
thrift客户端:hive的许多客户端接口是建立在thrift客户端的基础之上,包括JDBC、ODBC
WEB GUI:可以通过浏览器的方式访问hive提供的服务接口,该接口对应hive的hwi(hive web interface),所以首先要启动hwi服务
3、metastore组件:
hive元数据存放地,包括metastore服务、后台数据存储两部分
metastore服务:
建立在后台数据存储介质上,并且可以和hive提供的服务进行交互的服务组件,默认情况下metastore服务是和hive服务安装在一起的,但是也可以独立出来,提升hive服务效率
hive执行流程如下图:
4、和普通关系数据库的区别
Hive |
RDBMS |
|
查询语言 |
HQL |
SQL |
数据存储 |
HDFS |
Raw Device or Local FS |
索引 |
无 |
有 |
执行 |
MapReduce |
Excutor |
执行延迟 |
高 |
低 |
处理数据规模 |
大 |
小 |
5、数据格式:hive中没有定义专门的数据格式,可以由用户指定,需要指定三个属性:(1)列分隔符(空格、 、x001)、(2)行分隔符(" "、x002)、(3)读取数据的方法
hive中文件有3种格式:TextFile、SequenceFile、RCFile
hive在进行加载时不需要进行数据格式的转换,只是将数据复制到相应的HDFS目录,所以数据加载速度相对数据库要快一些
6、Hive中的数据不允许修改,在加载的时候就已经确定
7、索引:由于Hive中没有索引,当要访问hive数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟要高,但是由于MR的引入,可以并行访问数据,但是不适合在线数据查询
8、hive中除了select * from语句不需要生成MR任务执行外,其它都需要
9、hive包含以下几种数据模型:
(1)table:
每个table在hive中都有一个相应的目录存储数据,如table a的hdfs目录为/warehouse/a,其中warehouse是hive-site.xml中由hive.metastore.warehouse.dir属性指定,所有的table数据都保存在这个目录下
(2)external table:
数据存储在hdfs中,可以创建分区,并不会将数据移动到仓库目录中
(3)partition:表table的一个partition对应表下的一个目录,所有partition的数据都对应在相应的目录下,如表a包含dt、city两个partition,则对应于 dt = 20100801, ctry = US 的 HDFS 子目录为:/ warehouse /xiaojun/dt=20100801/ctry=US;对应于 dt = 20100801, ctry = CA 的 HDFS 子目录为;/ warehouse /xiaojun/dt=20100801/ctry=CA
(4)buckets:对指定列进行hash,根据hash值切分数据,每个bucket对应一个文件,例如将表a中 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020
下面记录一下hive加载本地数据的方法:
1、首先在本地创建一个文本文件,如empinfo.txt,内容如下:
1|name1|25|13188888888888
2|name2|30|13888888888888
3|name3|3|147896221
2、输入hive进入hive模式:
hive>
3、创建表:
create table tb_emp_info
> (id int,
> name string,
> age int,
> tel string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '|'
> STORED AS TEXTFILE;
4、加载本地数据:
load data local inpath 'empinfo.txt' into table tb_emp_info;
5、select * from tb_emp_info;查询是否有数据,验证数据是否加载成功。
6、查看该表对应的hdfs目录:
dfs -ls /user/hive/warehouse/tb_emp_info;
查看文件内容:
dfs -text /user/hive/warehouse/tb_emp_info/empinfo.txt;
显示如下内容:
1|name1|25|13188888888888
2|name2|30|13888888888888
3|name3|3|147896221
在界面查看hdfs目录也能看到该文件。