HBase之四--(2):spring hadoop 访问hbase

1、  环境准备:

Maven

Eclipse

Java

Spring

2、 Maven  pom.xml配置

<dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>jdk.tools</artifactId>
                    <groupId>jdk.tools</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-hadoop</artifactId>
            <version>2.0.2.RELEASE</version>
         </dependency>

 

 

3、 Spring和hadoop、hbase相关配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:hdp="http://www.springframework.org/schema/hadoop" 
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop-1.0.xsd">

其中标红的是spring  hadoop xml命名空间配置。

Hadoop hbase相关配置文件如下:

对应的properties如下:

spring hbasetemplate配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:hdp="http://www.springframework.org/schema/hadoop" 
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop-1.0.xsd">

    <hdp:configuration>
        fs.default.name=hdfs://10.202.34.200:8020
    </hdp:configuration>
    

    <hdp:hbase-configuration delete-connection="true" stop-proxy="false">
        <!-- hbase.rootdir=${hbase.rootdir} -->
        <!-- hbase.zookeeper.quorum=${hbase.zookeeper.quorum} -->
        
        hbase.rootdir=hdfs://10.202.34.200:8020/hbase
        hbase.zookeeper.quorum=10.202.34.200
        hbase.zookeeper.property.clientPort=2181
        hbase.zookeeper.property.dataDir=/hbase
        
        hbase.cluster.distributed=true
        zookeeper.session.timeout=180000
        hbase.zookeeper.property.tickTime=4000
        dfs.replication=3
        hbase.regionserver.handler.count=100
        hbase.hregion.max.filesize=10737418240
        hbase.regionserver.global.memstore.upperLimit=0.4
        hbase.regionserver.global.memstore.lowerLimit=0.35
        hfile.block.cache.size=0.2
        hbase.hstore.blockingStoreFiles=20
        hbase.hregion.memstore.block.multiplier=2
        hbase.hregion.memstore.mslab.enabled=true  
        hbase.client.scanner.timeout.period=6000000
         hbase.client.write.buffer=20971520
           hbase.hregion.memstore.flush.size=268435456
         hbase.client.pause=20
           hbase.client.retries.number=11
           hbase.client.max.perserver.tasks=50
        hbase.client.max.perregion.tasks=10
    </hdp:hbase-configuration>
    
    <!-- 
    <bean id="tablePool" class="org.apache.hadoop.hbase.client.HTablePool">
        <constructor-arg ref="hbaseConfiguration" />
        <constructor-arg value="100" />
    </bean>
     -->

    <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate"> 
        <property name="configuration" ref="hbaseConfiguration" />
    </bean>
    
</beans>

 

Hbasetemplate使用代码示例:

1
2
3
4
5
6
7
8
9
10
11
Tile t = hbaseTemplate.get("GW_TILES""0_1_1"new RowMapper<Tile>() {
 
            @Override
            public Tile mapRow(Result result, int rowNum) throws Exception {
                // TODO Auto-generated method stub
                 
                Tile t = new Tile();
                t.setData(result.getValue("T".getBytes(), "key".getBytes()));
                return t;
            }
        });

  

Hbasetemplate 常用方法简介:

      hbaseTemplate.get("GW_TILES", "0_1_1", new RowMapper  常用于查询,使用示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
Tile t = hbaseTemplate.get("GW_TILES""0_1_1"new RowMapper<Tile>() {
 
            @Override
            public Tile mapRow(Result result, int rowNum) throws Exception {
                // TODO Auto-generated method stub
                 
                Tile t = new Tile();
                t.setData(result.getValue("T".getBytes(), "key".getBytes()));
                return t;
            }
        });

  hbaseTemplate.execute(dataIdentifier, new TableCallback 常用于更新操作,使用示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
return hbaseTemplate.execute(dataIdentifier, new TableCallback<Boolean>() {
 
            @Override
            public Boolean doInTable(HTableInterface table) throws Throwable {
                // TODO Auto-generated method stub
                boolean flag = false;
                try{
                Delete delete = new Delete(key.getBytes());
                table.delete(delete);
                flag = true;
                }catch(Exception e){
                    e.printStackTrace();
                }
                return flag;
            }
        });

备注:spring hbasetemplate针对hbase接口做了强大的封装,普通功能可以使用它强大的接口,同时复杂的功能,还可以使用hbase原生的接口,如:HTableInterface、Result等。其类方法如下图:

同时hbasetemplate封装了hbase连接池等,它的创建和释放通过配置来自动管理。

示例:

package com.sf.study.hbase;

import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.hadoop.hbase.HbaseTemplate;
import org.springframework.data.hadoop.hbase.RowMapper;

public class SpringHbaseTest {

    public static void main(String[] agrs) {
        // 在xml配置文件中找到htemplate
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:/com/sf/study/META-INF/config/biz-hbase.xml" });
        BeanFactory factory = (BeanFactory) context;
        HbaseTemplate htemplate = (HbaseTemplate) factory.getBean("hbaseTemplate");
        // 使用find方法查找 fvp_dev_duan为表名 ,info为列族名称及family
        htemplate.find("fvp_dev_duan", "info", new RowMapper<String>() {
            // result为得到的结果集
            public String mapRow(Result result, int rowNum) throws Exception {
                // 循环行
                for (KeyValue kv : result.raw()) {
                    // 得到列族组成列qualifier
                    String key = new String(kv.getQualifier());
                    // 得到值
                    String value = new String(kv.getValue());
                    System.out.println(key + "= " + Bytes.toString(value.getBytes()));
                }
                return null;
            }
        });
    }

}

 结果:

D= 
10000092161011592W"7958687*209��n�

 

posted on 2015-05-18 19:22  duanxz  阅读(1320)  评论(0编辑  收藏  举报