hive&impala查询准备工作

前言:

之前在公司写一套hive大数据查询接口,对大数据环境与查询有了一定了解,这里写个入门文章总结一下。一开始我们的方案是java直接连hive去查,数据是存hbase的,大数据工程师在hive和hbase之间做了映射,所以在hive中能查到。但是经过我的实际测试,直接连hive查速度很慢,即使只有几条数据查出来也要等待n秒钟,关于这个问题的分析我在网上看到的最好懂的说法是hive是数据仓库,原理和数据库不同,没有为数据建立索引,所以性能达不到数据库级别。所以最终的方案是在大数据环境引入了impala工具,通过把hive的元数据刷到内存,java查数据时去内存查,这样子性能有了明显提高,但这种方式的话数据就不能只存hbase了,要存到hive中,顺便说一下,我们对应的项目是在云上的微服务,所以大数据环境也在云上。

正文:

接下来我对查询过程做一个demo级的描述:

1、先用远程工具登录上远程的云主机节点,在linux环境输入"hive"命令进入hive的客户端(这里假设公司的大数据工程师已经布好并启动了大数据环境)。

2、建表:

hiveQL的语法规范跟SQL差不多,比如说:

create table test(sname string,time string,data float) row format delimited fields terminated by ',';

注意,这里的“row format delimited fields terminated by ','”不能省略,我是通过导入数据文件的方式去存hive数据的,这里指定了解析数据文件时使用的分隔符,这里对应的就是数据文件里的分隔符。

数据文件可以是在/tmp/data/下新建的一个data.txt,在里面写上数据,类似csv格式的,对应上建表语句那些字段顺序写就行了。

3、导入数据:

先use 你要使用的数据库,跟mysql客户端操作一样。然后在hive客户端中输入:“load data local inpath '/tmp/data/data.txt'  into table test”导入数据,这时候“select * from test”就可以看到你导入的数据了;

4、把元数据刷到impala:

前面说了,我们并不直接连hive查,而是通过连impala间接地查hive里的数据,所以hive里有数据之后还需要把hive的元数据刷到impala中,这时候要进入impala客户端,通过输入“impala-shell”,然后回车进入,进入客户端后输入命令“invalidate metadata”刷元数据,完成后在impala客户端“show tables”一下就可以看到多出了一个数据库(同hive),数据库里有一个test表(在hive新建的)。

5、这时候使用能连接外网的电脑便可以进行连接与调试了:

这部分过程我就不贴代码了,网上demo很多,jdbc的连接方式,hive,impala,jdbc的几个jar包。

你可能感兴趣的:(大数据,java)