Hive

1 简介

Hive是Hadoop家族的一员,它能在HDFS存储的结构化或者半结构化的文件上运行类似sql的查询。通俗讲就是能将普通文件抽象成表,例如有个1.txt文件内容如下。三列分别是id name和age。

1	张三	22
2	李四	33
3	王五	12

通过Hive就可以将这个文件看成一张表,只要设置列之间是’\t’隔开。就可以运行sql查询,如

select count(*) from tablename where age>20;

反过来想,我们将这些数据直接存到MySQL不是更好吗,为什么要存到Hadoop然后用Hive查询呢? 原因主要有:

schematool -dbType mysql -initSchema

5 启动hiveserver2
```shell
nohup hive --service hiveserver2 &

6 客户端查询工具

beeline

1.x版本的hive指令在2.x中也进行了保留,但已经不推荐使用:

hive

3 使用hive查询

查询方式同样有自己提供的CLI和JavaAPI的方式,这里我们同样只讲前者。 使用create table指令可以创建表row format可以界定列之间的隔开。

CREATE TABLE test(id int,name string,age int)ROW FORMAT DELIMITED FIELDS TERMINATED BY '|';

利用load指令可以将本地或者hdfs中的文件转化成hive中的表。

load data local inpath '/root/2.txt' into table test;

不加local参数则是hdfs文件导入表中,如果文件中某一行和表格不一致,则尽量匹配,实在匹配不到的字段就是NULL image

Hive运行order by或group by的时候会转化成MapReduce程序去执行,这里会有警告Hive-On-MR将会被弃用,请选择Spark等执行器。 image