一、hive的基本概念与原理
Hive是基于Hadoop之上的数据仓库,可以存储、查询和分析存储在 Hadoop 中的大规模数据。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据,允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。Hive 没有专门的数据格式。
hive的访问方式:
hive的执行原理:
二、hive的常用命令
连接进入hive:hive
删除数据库:drop database if exists qyk_test cascade;如下图:
然后,我们使用create database qyk_test;创建一个qyk_test的数据库,如下:
接下来,我们执行create table user_info(id bigint, account string, name string, age int) row format delimited fields terminated by ‘\t’;创建一张表,如下:
我们可以执行describe user_info;查看表结构,如下:
然后,我们使用create table user_info_tmp like user_info;创建一个和user_info一样结构的临时表,如下:
然后我们准备一个文件user_info.txt,以制表符分隔,如下
接下来执行load data local inpath ‘/tmp/user_info.txt’ into table user_info;可看到如下:
然后执行select * from user_info;可看到:
然后,我们执行insert into table user_info_tmp select id, account, name, age from user_info;可以看到:
这里,hive将此语句的执行转为MR,最后将数据入到user_info_tmp。
然后,我们执行select count(*) from user_info_tmp;可看到:
同样的是将sql转为mr执行。
最后,执行insert overwrite table user_info select * from user_info where 1=0;清空表数据。
执行drop table user_info_tmp;便可删除表,如下:
好了,基本命令就讲到这儿,关于外部表、分区、桶以及存储格式相关的概念大家也可以去研究下。
三、编写MR将数据直接入到hive
此MR只有Mapper,没有reducer。直接在mapper输出到hive表。
pom需新增依赖:
Mapper类:
主类:
然后,我们使用maven打个包,上传到服务器。
然后,我们准备一个user_info.txt,上传至hdfs中的/qiyongkang/input下:
注意以制表符\t分隔。
然后执行yarn jar mr-demo-0.0.1-SNAPSHOT-jar-with-dependencies.jar,在jobhistory可以看到:
其实,hive的元数据是放在hdfs上,执行hadoop fs -ls /user/hive/warehouse可以看到:
然后,我们在hive命令行执行 select * from user_info;可以看到:
说明数据从hdfs写入到hive成功。
四、使用java jdbc连接Thrift Server查询元数据
接下来,我们使用java编写一个客户端,来查询刚才入到hive里面的数据,代码如下:
执行后,可以看到控制台输出如下:
开始的异常可以忽略。可以看到数据,说明是成功的。
好了,hive就讲到这儿了。其实,hive还可以同步hbase的数据,还可以将hive的表数据同步到impala,因为它们都是使用相同的元数据,这个在后面的博文中再进行介绍。