hive初探_框架组成、简单使用

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)列分隔符(空格、\t、\x001)、(2)行分隔符("\n"、\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目录也能看到该文件。

posted @ 2015-10-02 19:09  风儿飞  阅读(2371)  评论(0编辑  收藏  举报