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.0 modelVersion>com.issbigData-hbase- kundera2.8.10.0.1-SNAPSHOTb igData-hbase-kundera2.8.1Encoding>UTF-8ce>1.71.7ompiler.target>ju nitjunit4.11>testcom.impetus .kundera.clientkundera-hbaseersion>3.6javax.persi stencepersistence-api 1.0.2org.hibernateroupId>ejb3-persistence3.3.2.Be ta1org.apache.geronim o.specsgeronimo-jpa_2.0_specersion>1.1org.eclipse .persistencejavax.persistence< version>2.1.13、创建 持久的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 sistenceue="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项目组江湖一哥版权所有 |
|