立即注册 登录
About云-梭伦科技 返回首页

pig2的个人空间 https://www.aboutyun.com/?61 [收藏] [复制] [分享] [RSS]

日志

hbase-0.90.2中创建表、插入数据,更新数据,删除数据实例

已有 791 次阅读2014-4-25 20:33 |个人分类:云技术

问题导读
删除表应该注意什么问题?
如何创建列族?
如何插入数据?
如何更新用户信息与关系型数据库更新的区别在什么地方?
hbase通过什么标准来区别两条记录是否相同?






所需要的包有:

commons-codec-1.4.jar
commons-logging-1.1.1.jar
hadoop-0.20.2-core.jar
hbase-0.90.2.jar
log4j-1.2.16.jar
zookeeper-3.3.2.jar


背景
假设有一个部门人员表:)
表里需要存入人员和其相对应的部门信息

代码:

import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;

public class HbaseAddEdtDel {

public static Configuration configuration=null;
  static {
  configuration = HBaseConfiguration.create();
  configuration.set("hbase.master", "192.168.0.201:60000");
  configuration.set("hbase.zookeeper.quorum","192.168.0.201,192.168.0.202,192.168.0.203");  
  configuration.set("hbase.zookeeper.property.clientPort", "2181");        
}

    public static void main(String[] args) throws Exception {

       HBaseAdmin admin = new HBaseAdmin(configuration);


       if (admin.tableExists("riapguh")) {
            System.out.println("删除 table");
            admin.disableTable("riapguh");
            admin.deleteTable("riapguh");
        }


       //创建riapguh表
        System.out.println("创建 table");
        HTableDescriptor tableDescripter = new HTableDescriptor("riapguh".getBytes());//创建表
        tableDescripter.addFamily(new HColumnDescriptor("user"));//创建列簇user
        tableDescripter.addFamily(new HColumnDescriptor("dpt"));//创建列簇dpt
        admin.createTable(tableDescripter);

        HTable table = new HTable(configuration, "riapguh");

      //插入数据 
      System.out.println("add riapguh data");
      List<Put> putuser = new ArrayList<Put>();


       Put user1 = new Put(new String("用户A").getBytes());
       //写入用户员信息
       user1.add(new String("user").getBytes(), new String("user_code").getBytes(), new String("u_0001").getBytes());
       user1.add(new String("user").getBytes(), new String("user_name").getBytes(), new String("u_用户A").getBytes());

       //写入部门信息
       user1.add(new String("dpt").getBytes(), new String("dpt_code").getBytes(), new String("d_001").getBytes());
       user1.add(new String("dpt").getBytes(), new String("dpt_name").getBytes(), new String("d_部门A").getBytes());
       putuser.add(user1);



       Put user2 = new Put(new String("用户B").getBytes());
       //写入用户员信息
       user2.add(new String("user").getBytes(), new String("user_code").getBytes(), new String("u_0002").getBytes());
       user2.add(new String("user").getBytes(), new String("user_name").getBytes(), new String("u_用户B").getBytes());

       //写入部门信息
       user2.add(new String("dpt").getBytes(), new String("dpt_code").getBytes(), new String("d_002").getBytes());
       user2.add(new String("dpt").getBytes(), new String("dpt_name").getBytes(), new String("d_部门B").getBytes());
       putuser.add(user2);



       Put user3 = new Put(new String("用户C").getBytes());
       //写入用户员信息
       user3.add(new String("user").getBytes(), new String("user_code").getBytes(), new String("u_0003").getBytes());
       user3.add(new String("user").getBytes(), new String("user_name").getBytes(), new String("u_用户C").getBytes());

       //写入部门信息
       user3.add(new String("dpt").getBytes(), new String("dpt_code").getBytes(), new String("d_003").getBytes());
       user3.add(new String("dpt").getBytes(), new String("dpt_name").getBytes(), new String("d_部门C").getBytes());
       putuser.add(user3);


      table.put(putuser);
      table.flushCommits();

      //更新用户B
      Put updateb = new Put(new String("用户B").getBytes());
     //写入用户员信息
      updateb.add(new String("user").getBytes(), new String("user_code").getBytes(), new String("u_000xsx").getBytes());
      updateb.add(new String("user").getBytes(), new String("user_name").getBytes(), new String("u_用户xsx").getBytes());  
      //写入部门信息
      updateb.add(new String("dpt").getBytes(), new String("dpt_code").getBytes(), new String("d_00xsx").getBytes());
      updateb.add(new String("dpt").getBytes(), new String("dpt_name").getBytes(), new String("d_部门xsx").getBytes());
      table.put(updateb);
      table.flushCommits();
      //HBaseBasic.selectByRowKey("riapguh");
对于更新里面:这里面我们需要知道是否是我们关系数据库中所理解的更新:我们看下面内容:
-------------------------------------------------------------------------------------------------------------------------------------------
hbase是以rowkey,column,timestamp这三个维度来区分的。
即如果两条记录其rowkey,column,timestamp一样的话,那么hbase就会认为其是相同的数据。
  1.          row     column   value   time
  2. put      r1     cf:c1      '5'       10
  3. put      r1     cf:c1      '6'       10
  4. put      r1     cf:c2      '7'  
  5. put      r1     af:c2      '8'
  6. put      r2     cf:c1      '9'

如上所示首先插入一条数据其值为5,然后又插入一条数据其值为6.
此时用客户端接口取到的都是value=‘6’的数据,这可以认为是对原数据的一个覆盖,即可以认为是更新。
-------------------------------------------------------------------------------------------------------------------------------------------





      System.out.println("-------------删除用户C---------------------");
      //删除用户C
      //able.delete(new Delete(new String("用户C").getBytes()));
      List<Delete> deld = new ArrayList<Delete>();
      deld.add(new Delete(new String("用户C").getBytes()));
      table.delete(deld);

      table.flushCommits();
      //HBaseBasic.selectByRowKey("riapguh");
    }

}

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条