hbase与hive整合研究

2022-02-28 05:40田燕军
山西电子技术 2022年1期
关键词:PC机结构化语句

田燕军,王 玥

(山西经济管理干部学院,山西 太原 030024)

1 为什么要整合hbase和hive

hive是基于hadoop的数仓工具,它用于将结构化的数据文件"映射"为一张数据库表,并提供一个被称为Hive查询语言(简称HiveQL或HQL)的SQL语言[1],来查询数据。Hive中的表是纯逻辑表,只有表的定义, 它本身不存储数据,数据放在hdfs中,也不存储元数据,元数据都放在MySql中,hive本身也不执行具体的查询工作,会由yarn执行。可以将hive理解为一个客户端工具,其接收SQL语句,将其转换为相应的MapReduce[2]程序,然后在yarn上面运行。Hive是基于hadoop的,就具有与hadoop一样的特点,能够处理高吞吐量的数据,数据越多,hive的优势就越明显, 但延迟也高。故一般用于ETL清洗数据、网络日志分析、构建数据仓库、数据挖掘。hive中的表模型如表1。

表1 hive表模型

hbase: Hadoop Database 的简称,Hadoop 的数据库,属于NoSQL[2], 基于hdfs而实现的列式数据库,数据最终存储在hdfs上面,主要用来存储结构化和半结构化的数据, 可达到PB级; 在查询hbase中数据的时候, 只能通过rowkey(行键)或者rang(范围)的查询方案,即简单的基于key的快速查询,hbase不支持SQL语句操作,故不能进行复杂的条件查询,hbase仅支持单行事务,不支持多行事务。hase中的表模型如表2。

表2 hbase表模型

由上述可以看出,hbase不支持SQL语句,在实际的业务中查询数据很不方便,但hive就不一样了,hive提供类SQL语句,查询数据很方便; 我们可以整合hive与hbase,通过hive这个客户端对hbase中的数据用SQL进行查询,让hbase也支持GROUP BY、CLUSTER BY、ORDER BY等SQL语法,后续相应的数据分析就会很方便。另一方面,hive中因数据实际上都存储在hdfs中,数据存储不是很方便,但hbase中却可以存储PB级数据,通过整合hive与hbase,我们可以把hive中经过分析出的大量数据映射存储到hbase中。示意图如图1。

图1 hive与hbase整合示意图

2 实验环境

使用三台PC机搭建分布式计算平台,3台PC机分别都安装CentOS6.8 64位操作系统,并按下边2.1进行大数据集群环境准备,再按2.2进行大数据平台软件安装。

2.1 大数据集群环境准备

修改/etc/sysconfig/network文件,分别设置三台PC机的主机名为:node01、node02、node03;

修改/etc/hosts文件,分别绑定三台PC机的主机名与IP地址;使用service iptables stop临时关闭防火墙,使用chkconfig iptables off永久关闭防火墙;使用setenforce 0临时关闭selinux,修改/etc/selinux/config文件永久关闭selinux;三台PC机分别使用yum源安装ntp(网络时间服务),并进行配置,使三台PC机时间同步;使用ssh-keygen-t rsa,ssh-copy-id node01对三台PC机互相做免密登录。

2.2 安装大数据平台软件

在三台PC机分别新建/export/softwares目录用于存放软件安装包,新建/export/servers目录用于存放安装程序; 接下来三台PC机分别安装jdk(版本为jdk-8u144-linux-x64.tar.gz),安装mysql(版本为mysql-connector-java-5.1.38.jar),用于存放hive的元数据, 用于提供java运行环境,安装hadoop(版本为hadoop-2.6.0.tar.gz),用于分布式存储与分布式计算,安装zookeeper(版本为zookeeper-3.4.5.tar.gz),用于分布式协调, 安装hive(版本为hive-1.1.0.tar.gz),用于数据分析, 安装Hbase(版本为hbase-1.2.0.tar.gz),用于分布式存储。

3 整合操作

hbase与hive的整合主要是利用两者的API接口互相通信来完成,核心就是把两者的表绑定,及它们之间的列做映射表,相应语法如下:

createtable hivetable(id string,col1 string,col2 string,col3 string,col4 string)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,f1:col1,f1:col2,f2:col3,f2:col4") tblproperties("hbase.table.name"="hbasetable");

注:hbase.table.name 属性用于绑定hbase与hive二者的表,hivetable是hive中建立的表,对应hbase中建立的表hbasetable; hbase.columns.mapping属性用于把hbase与hive二者的列进行映射,id是hivetable中的列,对应hbasetable中的行键; col1、col2是hivetable中的列,对应hbasetable中f1列族下的col1、col2列; col3、col4是hivetable中的列,对应hbasetable中f2列族下的col3、col4列; hbasetable表中还有其它大量的列,但没有在此处与hivetable映射,在hive中查看hivetable时就不显示未映射的列,只显示已映射了的列。

3.1 hbase整合hive

初始数据在habse中,hbase的表中已存储大量数据,可在hive中创建一个外部表,用于与hbase当中的表绑定,再在hive中用SQL查询分析,具体步骤如下:

1) hive中创建外部表: create external table person_hbase2hive(id string, name string, age int)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,f1:name,f1:age") tblproperties("hbase.table.name" ="person");

2) hive中做分析查询: select avg(age) from person_hbase2hive

3.2 hive整合hbase

初始数据是在hive中,在hbase中先创建一个用于存储数据的表,再在hive中创建一个内部管理表,用于映射刚创建的hbase表; 接下来给hive内部管理表当中存数据时,都会存储到hbase上面去,具体步骤如下:

1) hbase中建表:create' hbase_student', {NAME=>' f1',VERSIONS=>3}

2) hive中建内部表: create table student_hive2hbase(id int,namestring,age int)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "f1:name,f1:age") tblproperties("hbase.table.name" = "hbase_student");

3) hive内部表中插入数据: insert overwrite table student_hive2hbase select id,name,age from student

4) hbase中查看表及数据: scan' hbase_student'

4 结束语

在实际的工作中,hbase与hive的整合也大量使用,一般通过ETL工具将数据源抽取到HDFS进行存储,再利用Hive清洗、分析数据,如分析出的结果数据较多,可对hbase与hive进行整合,将分析处理后的结果存入Hbase中,对于简单查询,可直接从HBase中快速查出,如是多条件复杂查询,可再次利用hive进行查询。

通过上边的整合,结合了hive利于查询、hbase利于存储的优点,使得hive可以读取hbase中数据,hbase可以存储hive中数据,让Hadoop生态系统中最为常用的两大框架互相结合,相得益彰,更加方便了我们大数据领域的分析研究。

猜你喜欢
PC机结构化语句
改进的非结构化对等网络动态搜索算法
深度学习的单元结构化教学实践与思考
重点:语句衔接
结构化面试方法在研究生复试中的应用
左顾右盼 瞻前顾后 融会贯通——基于数学结构化的深度学习
用VC++实现PC机与单片机的串行通信
VC.NET下实现dsPIC单片机与PC机的通信
单片机与PC机串行数据通信的工程实践
基于单片机与PC机的电气量采集系统设计
我喜欢