Hbase-1.2.4 javaAPI实现简单的类CRUD操作

一、 概述 
关于Hbase的工作原理网上已经有很多详细介绍,就不在这里赘述了,我们直接研究代码

作为Hbase最新stable版,Hbase内部引入的部分hadoop2.5系列的jar包,这里且暂不去理会它,但是Java环境必须要8以上,我的正确运行环境为: 
Centos-6.5 
hadoop-2.6.5 
Hbase-1.2.4 
jdk1.8 
二、代码设计

package com.unisk.bigdata.hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HConstants;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Admin;import org.apache.hadoop.hbase.client.Connection;import org.apache.hadoop.hbase.client.ConnectionFactory;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;import org.apache.hadoop.hbase.util.Bytes;public class Hbase {

    private static final String TABLE_NAME = "PEOPLE";
    private static final String COLUMN_FAMILY = "baseINFO";

    public static void createOrOverwrite(Admin admin, HTableDescriptor table) throws IOException {
        if (admin.tableExists(table.getTableName())) {
          admin.disableTable(table.getTableName());
          admin.deleteTable(table.getTableName());
        }
        admin.createTable(table);
      }

    public static void createSchemaTables(Configuration config) throws IOException {

        Connection connection = ConnectionFactory.createConnection(config);
             Admin admin = connection.getAdmin();

          HTableDescriptor table = admin.getTableDescriptor(TableName.valueOf(TABLE_NAME));
          table.addFamily(new HColumnDescriptor(COLUMN_FAMILY).setCompressionType(Algorithm.NONE));

          System.out.println("Creating table......");
          createOrOverwrite(admin, table);
          System.out.println("Done.");

      }

    @SuppressWarnings("deprecation")
    public static void insert(Configuration conf)throws IOException{
        HTable table = new HTable(conf,TABLE_NAME.getBytes());

        Put put = new Put(Bytes.toBytes("0001"));
        put.add("baseINFO".getBytes(), "name".getBytes(), "wangxiaoming".getBytes());
        put.setAttribute("name", "wxm".getBytes());

        table.setWriteBufferSize(1024*1024*1024);
        table.put(put);
        System.out.println("insert success!");
        table.close();
    }

    public static void modifySchema (Configuration conf) throws IOException {
            Connection connection = ConnectionFactory.createConnection(conf);
                 Admin admin = connection.getAdmin();

              TableName tableName = TableName.valueOf(TABLE_NAME);
              if (!admin.tableExists(tableName)) {
                System.out.println("Table does not exist.");
                System.exit(-1);
              }

              HTableDescriptor table = admin.getTableDescriptor(tableName);

              // Update existing table
              HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF");
              newColumn.setCompactionCompressionType(Algorithm.GZ);
              newColumn.setMaxVersions(HConstants.ALL_VERSIONS);
              admin.addColumn(tableName, newColumn);

              // Update existing column family
              HColumnDescriptor existingColumn = new HColumnDescriptor(COLUMN_FAMILY);
              existingColumn.setCompactionCompressionType(Algorithm.GZ);
              existingColumn.setMaxVersions(HConstants.ALL_VERSIONS);
              table.modifyFamily(existingColumn);
              admin.modifyTable(tableName, table);

              // Disable an existing table
              admin.disableTable(tableName);

              // Delete an existing column family
              admin.deleteColumn(tableName, COLUMN_FAMILY.getBytes("UTF-8"));

              // Delete a table (Need to be disabled first)
              admin.deleteTable(tableName);

      }

    public static void main(String... args) throws IOException {
        Configuration config = HBaseConfiguration.create();

      //Add any necessary configuration files (hbase-site.xml, core-site.xml)
      //config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml"));
      //config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml"));

      config.addResource("/wxm/software/hbase/hbase-1.2.4/conf/hbase-site.xml");
      config.addResource("/wxm/software/hbase/hbase-1.2.4/conf/core-site.xml");

      createSchemaTables(config);

      insert(config);  
     //modifySchema(config);
      }  
}

三、代码分析

为了逻辑上严谨一点,这里写了createOrOverwrite方法,若初学API,大可不必浪费这几行空间,升级1.0之后,不建议使用HTablePool对象,可使用Admin来跟Hbase交互,另在main方法中,因为运行调用Hbase环境配置,故需要加入运行时参数,但简单起见,依然可以固定在代码里,关于put对象,以及HTableDescripter对象,可以以集合的形式传入从而增加效率,这个看需求,后期改进即可,后面如果有时间,我会将关于Hbase的通用增删改查的工具发布到github,大家有问题可以加qq1821088755一起交流。

时间: 2024-10-11 12:07:23

Hbase-1.2.4 javaAPI实现简单的类CRUD操作的相关文章

JSP简单练习-EL表达式操作JavaBean

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

T4 生成实体和简单的CRUD操作

<#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core.dll" #> <#@ assembly name="System.Data.dll" #> <#@ assembly name="System.Data.DataS

【C++】编写一个简单的类。包含构造函数,成员函数等。

<pre name="code" class="cpp">//编写一个简单的类.包含构造函数,成员函数等. #include <iostream> using namespace std; class Rec { public: Rec(int l,int w); int Area(); void Print(); private: int length,wide; }; Rec::Rec(int l,int w) { length=l; w

SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作

上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了. 建议去安装体验一下吧. 在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰.MongoDB启动进程,后面跟着一大串配置,有点云里雾里的感觉,这个对初学者不太友好.而SequoiaDB的部署,着眼整个集群环境,能在脑中轻松构建一副设计图,协调节点的服务端口是11810,catalog节点的服务端口是11820,11830,11840,而数据节点的服务端口是11850,11860,1

【JavaScript】使用setInterval()函数作简单的轮询操作

轮询(Polling)是一种CPU决策怎样提供周边设备服务的方式,又称"程控输出入"(Programmed I/O). 轮询法的概念是.由CPU定时发出询问.依序询问每个周边设备是否须要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始. 轮询法实作easy.但效率偏低. 在JavaScript使用setInterval函数作简单的轮询操作,能够随时判定某一个參数值,但不用刷新页面.即不用在页头增加<META HTTP-EQUIV="Refresh&quo

Hibernate系列(五):利用Hibernate完成简单的CRUD操作

这里利用Hibernate操作数据库完成简单的CRUD操作. 首先,我们需要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id

基于Android 下载文件时,更新UI简单帮助类

由于在项目开发时,有这样的简单需求,问谷歌,网络上也有好多Utils工具类,但是比较冗余.自己就简单的写了一个简单帮助类. /** * 下载文件,更新UI简单帮助类 * * @author jarlen * */ public class DownLoadHelper { private static final int DOWN_BEGIN = 0; private static final int DOWN_UPDATA = 1; private static final int DOWN_

JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set().add().roll()方法区别 http://www.360doc.com/content/15/0616/16/25883431_478549940.shtml http://blog.csdn.net/csdnbenbenchong/article/details/7010908

Android开发系列(九):创建数据库以及完成简单的CRUD操作

本篇博文主要实现简单的创建数据库以及实现CRUD操作. 首先,我们建立一个Android Project,命名为db 一.完成数据库的创建操作: 用SQLiteOpenHelper类中的getWritableDatabase()和getReadableDatabase()都可以获取一个操作数据库的SQLiteDatabase实例,其中getReadableDatabase()方法中会调用getWritableDatabase()方法. 区别:其中,getWritableDatabase() 方法