配色: 字号:
03-HBase与hive整合、Kundera
2022-09-15 | 阅:  转:  |  分享 
  
Hbase与hive整合kundera2018-04-28版本修改人修改记录修改时间V1.0王守奎编写2018/4/28目录HBase与hi
ve关系整合4Hive与Hbase整合的必要性4Hive与Hbase整合的过程4创建Kundera,以JPA的方式操作Hbase7
HBase与hive关系整合Hive与Hbase整合的必要性Hive是建立在Hadoop之上的数据仓库基础构架、是为了减少MapR
educe编写工作的批处理系统,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。Hive可以理解为一个客户
端工具,将我们的sql操作转换为相应的MapReducejobs,然后在Hadoop上面运行。Hbase全称为HadoopD
atabase,即Hbase是Hadoop的数据库,是一个分布式的存储系统。Hbase利用Hadoop的HDFS作为其文件存储系统
,利用Hadoop的MapReduce来处理Hbase中的海量数据。利用zookeeper作为其协调工具。Hbase数据库的缺点
在于—-语法格式异类,没有类sql的查询方式,因此在实际的业务当中操作和计算数据非常不方便,但是Hive就不一样了,Hive支持标
准的sql语法,于是我们就希望通过Hive这个客户端工具对Hbase中的数据进行操作与查询,进行相应的数据挖掘,这就是所谓Hive
与hbase整合的含义。Hive与Hbase整合的示意图如下:Hive与Hbase整合的过程1、在hbase中创建表$hbase>
create''ns1:customer1'',{NAME=>''address''},{NAME=>''info''}在hiv
e中创建表只要建立对应的关系即可查询hbase中的数据。$hive>usehivedb;$hive>createexterna
ltablehive_customer1(hivekeystring,citystring,countrystring
,provincestring,ageint,companystring)storedby''org.apache.ha
doop.hive.hbase.HBaseStorageHandler''withserdeproperties("hbase.
columns.mapping"=":key,address:city,address:country,address:pro
vince,info:age,info:company")tblproperties("hbase.table.name"="n
s1:customer1");语法具体含义:上面这个建表语句表示在Hive中建立一个外部表—名字叫做hive_customer
1,与其在Hbase中建立映射关系的表名字为customer1。1)、映射关系如下:hive_customer1—>cust
omer1hivekey—>key(Hive中的hivekey字段关联到Hbase中的行健key)city—>addr
ess:citycountry—>address:countryprovince—>address:provinc
eage—>info:agecompany—>info:company2)、storedby‘org.apach
e.hadoop.hive.hbase.HBaseStorageHandler’的含义是:Hive与Hbase整合功能(互相通信
)的实现主要是通过hive-hbase-handler-2.1.1.jar这个工具类来完成的,而语法中的HBaseStorageH
andler指的就是这个工具类。3、查看表数据通过以下语句查询hive和hbase数据库,均为空$hbase>scan''ns1:
customer1''hive>selectfromhive_customer1;4、插入数据到hive表$hive>i
nsertintohive_customer1(hivekey,city,country,province,age,compa
ny)values(''lucy'',''taiyuan'',''china'',''shanxi'',30,''chinaMobile.Co'')
;5、查询hive表和hbase表$hive>selectfromhive_customer1;$hbase>scan
''ns1:customer1''6、插入数据到hbase表$hbase>put''ns1:customer1'',''xiaowang
'',''info:age'',29$hbase>put''ns1:customer1'',''xiaowang'',''info:co
mpany'',''alibaba''7、查询hbase表和hive表$hbase>scan''ns1:customer1''$hive
>selectfromhive_customer1;$hive>selectfromhive_custome
r1wherehivekey=''xiaowang'';$hive>selectcount()fromhive_cust
omer1;创建Kundera,以JPA的方式操作HbaseJPA:javapersistenceAPI以面向对象方式处理Ge
tScanPutDelete创建mvn项目(bigdata-hbase-kundera2.8.1)2、引入依赖[pom]xmlversion="1.0"encoding="UTF-8"?>apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema
-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0modelVersion>com.issbigData-hbase-
kundera2.8.1
0.0.1-SNAPSHOTb
igData-hbase-kundera2.8.1
Encoding>UTF-8ce>1.71.7ompiler.target>ju
nit
junit4.11>test
com.impetus
.kundera.client
kundera-hbaseersion>3.6
javax.persi
stence
persistence-api
1.0.2
org.hibernateroupId>ejb3-persistence3.3.2.Be
ta1
org.apache.geronim
o.specs
geronimo-jpa_2.0_specersion>1.1
org.eclipse
.persistence
javax.persistence<
version>2.1.1
3、创建
持久的xml位置:需要读取\META-INF\persistence.xml这个文件。内容如下:0"?>mlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc
ation="http://xmlns.jcp.org/xml/ns/persistencehttp://xmlns.jcp.o
rg/xml/ns/persistence/persistence_2_1.xsd"version="2.1">nce-unitname="hbase_pu">com.impetus.kundera.KunderaPer
sistence
ue="datanode1,datanode2"/>181"/>value="ns1:t1"/>>client.hbase.HBaseClientFactory"/>t>配置目录:创建实体类T1packagecom.iss.kundera;importjavax
.persistence.Column;importjavax.persistence.Entity;importjavax.
persistence.Id;importjavax.persistence.Table;@Entity@Table(name
="cf1")publicclassT1{@IdprivateStringno;@ColumnprivateStri
ngname;@Columnprivateintage;publicStringgetNo(){returnno;}
publicvoidsetNo(Stringno){this.no=no;}publicStringgetName
(){returnname;}publicvoidsetName(Stringname){this.name=na
me;}publicintgetAge(){returnage;}publicvoidsetAge(intage)
{this.age=age;}}5、创建Apppackagecom.iss.kundera;importjava.util
.List;importjavax.persistence.EntityManager;importjavax.persist
ence.EntityManagerFactory;importjavax.persistence.Persistence;im
portjavax.persistence.Query;importorg.junit.Before;importorg.j
unit.Test;publicclassTestCRUD{EntityManagerFactoryemf;@Before
publicvoidiniEMF(){emf=Persistence.createEntityManagerFactor
y("hbase_pu");}@Testpublicvoidget(){EntityManagerem=emf.cre
ateEntityManager();T1e=em.find(T1.class,"row1");System.out.pr
intln(e.getAge()+","+e.getName());}@Testpublicvoiddelete()
{EntityManagerem=emf.createEntityManager();T1e=newT1();e.
setNo("row1");em.remove(e);}@TestpublicvoidbatchInsert(){Enti
tyManagerem=emf.createEntityManager();em.getTransaction().begi
n();for(inti=1;i<1000;i++){T1e=newT1();e.setNo("row1
"+i);e.setName("toms"+i);e.setAge(i%100);em.persist(e);}em.getTransaction().commit();System.out.println("over!!");}@SuppressWarnings("unchecked")@TestpublicvoidfindAll(){EntityManagerem=emf.createEntityManager();Stringjpaql="selecttfromT1t";Queryq=em.createQuery(jpaql);Listlist=q.getResultList();for(T1t:list){System.out.println(t.getName());}}}4A项目组魁魁语录:返景入深林,复照青苔上4A项目组江湖一哥版权所有
献花(0)
+1
(本文系王守奎的图...原创)