Hive学习总结及应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、文档说明

熟悉Hive功能,了解基本开发过程,及在项目中的基本应用。

注意:本文档中但凡有hive库操作的语句,其后面的“;”是语句后面的,非文档格式需要。每个hive语句都要以“;”来结束,否则将视相邻两个分号“;”之间的所有语句为一条语句。

二、Hive(数据提取)概述

Hive是构建在HDFS 和Map/Reduce之上的可扩展的数据仓库。是对HADOOP的Map-Reduce进行了封装,类似于sql语句(hive称之为HQL)计算数据从而代替编写代码对mapreduce的操作,数据的来源还是HDFS上面的文件。

Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hive管理,外部表的数据在指定位置,不在Hive的数据仓库中,只是在Hive元数据库中注册。创建外部表采用“create external tablename”方式创建,并在创建表的同时指定表的位置。

Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。

三、Hive的元数据

Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。

Hive metastore 三种存储方式:

Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。

1、使用derby数据库存储元数据(内嵌的以本地磁盘作为存储),这称为“内嵌配置”。

这种方式是最简单的存储方式,只需要在hive-default.xml或hive-site.xml做如下配置便可。使用derby存储方式时,运行hive 会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。

2、使用本机mysql服务器存储元数据,这称为“本地metastore”。这种存储方式需要在本地运行一个mysql服务器,

3、使用远端mysql服务器存储元数据。这称为“远程metastore”。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

四、Hive数据导入方式

1、从本地文件系统中导入数据到Hive表

hive> load data local inpath 'wyp.txt' into table wyp;

2、HDFS上导入数据到Hive表

hive> load data inpath '/home/wyp/add.txt' into table wyp;

3、从别的表中查询出相应的数据并导入到Hive表中

hive> insert into table test

> partition (age='25')

> select id, name, tel

> from wyp;

五、Hive数据导出方式

1、导出到本地文件系统

hive> insert overwrite local directory '/home/wyp/wyp' > select * from wyp;

[boco@cloud216~]$hive -e "select * from wyp" >> local/wyp.txt

2、导出到HDFS中

hive> insert overwrite directory '/home/wyp/hdfs' > select * from wyp;

3、导出到Hive的另一个表中

hive> insert into table test

> partition (age='25')

> select id, name, tel

> from wyp;

六、HiveQL的常用操作

HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持SQL标准,如HiveQL不支持更新操作,也不支持索引和事务,它的子查询和join操作也很局限。

#hive 启动

1、退出hive

hive> quit;

2、查看数据库

hive> show databases;

3、创建数据库

hive> create database test;

4、创建数据库,并设置其存放的位置,注意该路径在hdfs下

hive> CREATE DATABASE financials

> LOCATION '/my/preferred/directory';

5、使用哪个数据库

hive> use default;

6、创建表

hive>create table t1 (key string);

7、判断一个表是外部表还是内部表

hive>DESCRIBE EXTENDED tablename;

8、查看该数据库中的所有表

hive>show tables;

9、显示表结构

hive>desc tablename;

hive> desc extended tmr_format;

10、查看表有哪些分区

hive>show partitions t1;

11、删除分区:ALTER TABLE table_name DROP partition_spec

hive>ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');

12、删除表

hive>drop table t1 ;

13、移动hdfs中数据到t1表中

hive>load data inpath ‘/root/inner_table.dat’ into table t1;

相关文档
最新文档