Hive
Impala
HBase
HiveQL
大数据
javascript
Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,能够将SQL语句转换为MapReduce任务进行运行。
HBase(Hadoop Database),是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,只能经过Rowkey来取数据,没法进行SQL查询。
所以若是Hive能够从HBase中取数据,并结合Hive的SQL查询功能,便能作到较为复杂的SQL查询操做。
Impala对存储在HDFS、HBase的数据提供直接查询互动的SQL。除了像Hive使用相同的统一存储平台,Impala也使用相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue Beeswax)。Impala还提供了一个熟悉的面向批量或实时查询和统一平台。css
达成目标:一、支持HBase多表联接查询等较复杂的SQL查询操做。html
CentOS-6.5
JDK-1.7
hive:hive-0.13.1+cdh5.3.6+397,impala:impala-2.1.5+cdh5.3.6+0,spark:spark-1.2.0+cdh5.3.6+379,
elasticsearch:elasticsearch-1.7.1,elasticsearch-hadoop-hive:elasticsearch-hadoop-hive-2.1.1html5
不管是使用Hive仍是Impala仍是Spark,第一步都是让他们先知道数据的表结构。
Hive的内置数据类型能够分为两大类:(1)、基础数据类型;(2)、复杂数据类型。其中,基础数据类型包括:TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、FLOAT、DOUBLE、STRING、BINARY、TIMESTAMP、DECIMAL、CHAR、VARCHAR、DATE。java
CREATE EXTERNAL TABLE default.hive_hbase_anqi( id BIGINT, name STRING, visible BOOLEAN, cdecimal DECIMAL(12,2), cdate TIMESTAMP) ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, angel:name, angel:visible, angel:cdecimal, angel:cdate") TBLPROPERTIES("hbase.table.name" = "hbaseanqi");
能够看到,语句中经过WITH SERDEPROPERTIES指定了Hive与HBase的列映射关系。经过以上语句,在Hive中能够看到结构正确的表,并能够在Hue中看到HBase中的数据。 linux
注意:
创建起的Hive表中全部字段均变为小写。这同ES-Hive同样。详情见:使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操做。android
咱们选择如下几条有表明性的SQL查询语句,来验证使用Hive能够对存储在HBase中的数据进行正确的查询操做。css3
Decimal类型数据求和
SELECT SUM(cdecimal) FROM default.hive_hbase_anqi;
经验证,能够正确的获得精确的求和值。git
TIMESTAMP类型数据排序
SELECT * from default.hive_hbase_anqi ORDER BY cdate limit 5;
经验证,能够依据TIMESTAMP值正确排序。github
普通表与外表关联
select * from hive_hbase_anqi,sample_08 WHERE hive_hbase_anqi.id=sample_08.salary;
其中sample_08表是Hive普通表,hive_hbase_anqi是数据存储在HBase中的Hive外表。
经验证,经过执行上面语句,能够将Hive普通表与Hive的HBase外表进行正确的关联。
insert OVERWRITE table hive_hbase_anqi select salary,dtime,sdecimal,sname,svisible from sample_09;
将Hive普通表sample_09中的数据导入Hive外部表anqi中,去HBase中查看,能够看到数据被正确导入。
Hive四种数据导入方式:从本地文件系统中导入数据到Hive表;从HDFS上导入数据到Hive表;从别的表中查询出相应的数据并导入到Hive表中;在建立表的时候经过从别的表中查询出相应的记录并插入到所建立的表中。
向HBase写不是很方便。
在Impala中执行INVALIDATE METADATA
、REFRESH table_name
语句即可让 Impala识别在Hive中新建的或已发生变更的表。
Hive中创建的表,impala能够直接读取使用。执行复杂SQL语句时,impala明显比hive快不少。
一样的,咱们选择上面(一.2)节中的典型SQL语句进行验证,Impala-SQL都可以快速正确的返回结果,结果与Hive-SQL执行结果一致。
Impala的插入数据SQL语句与Hive相差很大,Impala更接近标准SQL。
insert into hive_hbase_anqi values(0,'1999-09-09',8.88,'name',true);
insert into hive_hbase_anqi(id,name,cdate) select id,name,udate from hive_hbase_xi;
数据存储在HBase中,使用Impala或Hive执行SQL语句进行操做是一个好主意。虽然使用Impala和使用Hive一样能够正确执行,但使用Impala比使用Hive更加方便且更高效。目标达成。
做者 @王安琪
aitanjupt@hotmail.com