基于Hadoop的数据仓库工具讲解(2)

Hive的MetaStore,集中存储元数据的一个库,可以叫它元数据库。
元数据库保存的是不是我们要计算的数据?不是,元数据库中并没有保存我们要计算的数据,我们要计算的数据是存放在HDFS(分布式文件系统)里。
Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等表的描述信息。真正要处理的数据在HDFS里。
元数据通常是存储在关系数据库如 mysql, derby 中。

Metastore默认使用内嵌的derby数据库作为存储引擎
Derby引擎的缺点:不支持多链接,一次只能打开一个会话
使用MySql作为外置存储引擎,支持多用户同时访问,所以一般将MySQL作为Hive的MetaStore。
Hive 的数据存储在 HDFS 中,大部分SQL转换成 MapReduce 任务来完成。(全表扫描,比如 select * from table 不会就生成 MapRedcue 任务)

hive> create table test(id int,name string) row format delimited fields terminated by '\t';

 

hive> load data local inpath ‘/home/hadoop/test/test.txt’ into table test; 


五、hive 数据类型

Hive数据类型分为基础数据类型复杂数据类型
基础数据类型包括:
数字  TINYINT,SMALLINT,INT/INTEGER,BIGINT,FLOAT,DOUBLE
字符串:
    STRING,CHAR,VARCHAR
日期/时间类型
  TIMESTAMP,DATE,INTERVAL    (没有datetime)
其他类型
    BOOLEAN

复杂类型包括  ARRAY,MAP,STRUCT,UNION,这些复杂类型是由基础类型组成的。
arrays: ARRAY<data_type>
maps: MAP<primitive_type, data_type>
structs: STRUCT<col_name : data_type [COMMENT col_comment],...>
union: UNIONTYPE<data_type, data_type,...>


六、hive与依赖环境的交互

与linux交互:

hive> !pwd;                          #查看路径

hive> !ls;                              #查看有哪些文件

与hdfs交互:

hive> dfs -ls / ;                      #查看hdfs下目录

hive> dfs -mkdir /haha;        #hdfs下创建目录haha

基于Hadoop的数据仓库工具讲解

基于Hadoop的数据仓库工具讲解

七、hive表的基本操作

Hive的数据模型-表的分类:
Table  内部表
External Table  外部表
Partition  分区表
Bucket  Table 桶表

Hive的数据模型-内部表
与数据库中的 Table 在概念上是类似,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/warehouse/test。
warehouse是在 hive-site.xml 中由${hive.metastore.warehouse.dir} 指定的数据仓库目录。
所有的 Table 数据(不包括 External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除(对应目录和文件都会被删除)

创建数据文件inner_table.dat
创建表

hive>create table inner_table (id int,key string);

加载数据

hive>load data local inpath  '/var/lib/hadoop-hdfs/test/inner_table.dat'  into table inner_table;


查看数据

select * from inner_table

select count(*) from inner_table  (也可以排序)

删除表

drop table inner_table

Hive的数据模型- External Table 外部表

指向已经在 HDFS 中存在的数据,可以创建 partition
它和内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
内部表的创建过程和数据加载过程,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。
外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接。

创建数据文件

/data/student/text.txt

 

创建外部表:

create external table ext_student(id int,

name string) row format delimited fields terminated by '\t' location '/data/student';

加载数据

load data inpath '/home/external_table1.dat' into table ext_student;

查看数据

select * from ext_student;

select count(*) from ext_student;

删除表

drop table ext_student;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f657313ec2ece3197966de9cd15d647c.html