Hbase 流水笔记 六 Java API 操作

这是用api操作的时候,需要考虑Hbase的版本,这里使用Hbase 0.98.17,所以我们的api 

从maven中引入配置

  <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>0.98.17-hadoop2</version>
        </dependency>

1、 首先需要连接zookeeper获取数据。

   需要引用键值对。


//@since 0.98.17-hadoop2
 private final static String zkServers ="hadoop01.fandong.com:2182,hadoop01.fandong.com:2183,hadoop01.fandong.com:2184";
    private final static String HBASE_ZOOKEEPER_QUORUM="hbase.zookeeper.quorum";

    private static Configuration getConfig(){
        Configuration conf = HBaseConfiguration.create();
        conf.set(HBASE_ZOOKEEPER_QUORUM,zkServers);
        return conf;
    }

2、首先我们先创建一个命名空间,比如:dream

    首先我们需要获取 HBaseAdmin 类,这个是Hbase的管理类。

    其次需要 NamespaceDescriptor 这个命名空间的描述类。

   

    
    /**
     * 创建namespace
     * @param nameSpace
     * @return
     * @since 0.98.17-hadoop02
     */
    public static  boolean createNamespace(String nameSpace){
        try{
            HBaseAdmin admin = new HBaseAdmin(getConfig());
            NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor
                    .create(nameSpace)
                    .build();
            admin.createNamespace(namespaceDescriptor);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

发现已经创建成功了,我们从shell看下是否真的OK了。

hbase(main):009:0> list_namespace
NAMESPACE                                                                                                                                                                                                   
default                                                                                                                                                                                                     
dream                                                                                                                                                                                                       
hbase                                                                                                                                                                                                       
weibo                                                                                                                                                                                                       
4 row(s) in 0.0330 seconds

hbase(main):010:0> 

发现我们的dream 已经在里面了。

我们还可以从hdfs 文件上看出是否创建OK了

--- 创建表

创建表比较复杂些,需要使用

HBaseAdmin

HTableDescriptor

HColumnDescriptor

创建表,我们设置缓存块的大小HFile,

保存的版本,columnDescriptor.setMinVersions(minVersion);
                       columnDescriptor.setMaxVersions(maxVersion); ,设定这个会按照时间戳保留多个版本。

 /**
     * create hbase table
     * @param tableName
     * @param cloumnFamily
     * @param minVersion
     * @param maxVersion
     * @since 0.98.17-hadoop2
     * @return
     */
    public static boolean createTable(String tableName,String[] cloumnFamily,int minVersion,int maxVersion){
       Configuration conf = HbaseHelper.getConfig();
        try {
            HBaseAdmin admin = new HBaseAdmin(conf);
            HTableDescriptor descriptor = new HTableDescriptor(Bytes.toBytes(tableName));
            HColumnDescriptor columnDescriptor =null;
            for(String family : cloumnFamily){
                columnDescriptor =new HColumnDescriptor(Bytes.toBytes(family));
                columnDescriptor.setBlockCacheEnabled(true);
                columnDescriptor.setBlocksize(1024);
                columnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY);
                columnDescriptor.setMinVersions(minVersion);
                columnDescriptor.setMaxVersions(maxVersion);
                descriptor.addFamily(columnDescriptor);
            }

            admin.createTable(descriptor);
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

--创建表 dream: content ,"info"

hbase(main):011:0> describe 'dream:content'
Table dream:content is ENABLED                                                                                                                                                                              
dream:content                                                                                                                                                                                               
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                                 
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '1', 
BLOCKCACHE => 'true', BLOCKSIZE => '1024', REPLICATION_SCOPE => '0'}                                                                                                                                        
1 row(s) in 0.0930 seconds

hbase(main):012:0> 

----往表中写入数据

 /**
     * 向表中插入数据
     * @param tableName
     * @param put
     */
    public static void put(String tableName,Put put){
        try{
            HTable table =new HTable(getConfig(),tableName);
            table.put(put);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 向表中插入数据列
     * @param tableName
     * @param putlist
     */
    public static void put(String tableName, List<Put> putlist){
        try{
            HTable table =new HTable(getConfig(),tableName);
            table.put(putlist);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

hbase(main):012:0> scan 'dream:content'
ROW                                                  COLUMN+CELL                                                                                                                                            
 myrow-1                                             column=info:address, timestamp=1574951897593, value=chian,shenzhen                                                                                     
 myrow-1                                             column=info:content, timestamp=1574951897593, value=\xE5\xB0\xB1\xE8\xBF\x99\xE6\xA0\xB7\xE5\x90\xA7                                                   
 myrow-1                                             column=info:title, timestamp=1574951897593, value=\xE6\x88\x91\xE7\x88\xB1Hbase                                                                        
1 row(s) in 0.0720 seconds

hbase(main):013:0> 

---读取api

/**
     * 获取单行数据
     * @param tableName
     * @param get
     * @return
     */
    public static Result get(String tableName,Get get){
        try{
            HTable table =new HTable(getConfig(),tableName);
            Result result = table.get(get);
            return result;

        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值