zoukankan      html  css  js  c++  java
  • 使用java操作hbase(单节点)

    1.在运行java代码之前,一定要先启动Hbase,很重要!!
       cd /home/cx/itcast/hbase-1.2.6/bin
       ./start-hbase.sh
    2.新建一个java项目,导入相关的jar包,放在lib目录下,并右键build path将它们添加到referenced libraries
    3.在项目下新建conf文件夹,将Hbase的配置文件hbase-site.xml复制到该目录,然后选择项目属性,在Libraies->add class
      folder,将conf目录选上。(这一步代替了集群情况下,java连接zookeeper的操作)
      hbase-site.xml配置如下:

     <configuration>  
      <property>  
       <name>hbase.rootdir</name>  
       <value>file:///home/cx/myhbase1/</value>  
      </property>  
      <property>  
        <name>hbase.zookeeper.property.dataDir</name>  
        <value>/home/bigfish/myhbase1/zookeeper</value>  
      </property>  
      </configuration>  


    4.java代码如下:

      1 package com.cx;
      2 
      3 import java.io.IOException;
      4 import java.util.ArrayList;
      5 import java.util.List;
      6 
      7 import org.apache.hadoop.conf.Configuration;
      8 import org.apache.hadoop.hbase.HBaseConfiguration;
      9 import org.apache.hadoop.hbase.HColumnDescriptor;
     10 import org.apache.hadoop.hbase.HTableDescriptor;
     11 import org.apache.hadoop.hbase.MasterNotRunningException;
     12 import org.apache.hadoop.hbase.TableName;
     13 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
     14 import org.apache.hadoop.hbase.client.*;
     15 import org.apache.hadoop.hbase.util.Bytes;
     16 
     17 
     18 
     19 public class Hbase1 {
     20     static private Configuration conf=HBaseConfiguration.create();;
     21     //------------------创建表操作 -------------------------------------
     22     public static void createTable(String tableName,String[] cfs) throws Exception {
     23         HBaseAdmin admin=new HBaseAdmin(conf);
     24         if(admin.tableExists(tableName)) {
     25             System.out.println("表已经存在");
     26         }else {
     27             //指定表名
     28             HTableDescriptor htd=new HTableDescriptor(TableName.valueOf(tableName));
     29             //添加列族
     30             for(int i=0;i<cfs.length;i++) {
     31                 htd.addFamily(new HColumnDescriptor(cfs[i]));
     32             }
     33             //创建表
     34             admin.createTable(htd);
     35             System.out.println("表创建成功!");
     36         }
     37         admin.close(); 
     38     }
     39     //----------------------一次插入一条数据----------------------------------
     40     public static  void put
     41     (String tableName,String row,String columnFamily,String column,String data) throws Exception{
     42         //得到一个表对象
     43         HTable table =new HTable(conf, tableName);
     44         //得到一个Put对象
     45         //将字符串转换为字符数组
     46         Put put=new Put(Bytes.toBytes(row));
     47         put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(data));
     48         //在表中放入put对象   
     49         table.put(put);
     50         System.out.println("插入数据成功!");
     51         table.close();
     52     }
     53 //    //----------------------一次插入海量数据(1oow)--------------------------
     54 //    public static  void putAll(String tableName) throws Exception{
     55 //        HTable table =new HTable(conf, tableName);
     56 //        //得到list对象//得到list对象
     57 //
     58 //        List<Put> puts=new ArrayList<Put>(10000);
     59 //        for(int i=1;i<=1000000;i++) {
     60 //               Put put =new Put(Bytes.toBytes("rk"+i));
     61 //               put.add(Bytes.toBytes("info"), Bytes.toBytes("money"), Bytes.toBytes(""+i));
     62 //               puts.add(put);
     63 //               //每隔1w条放一次
     64 //               if(i%10000==0){
     65 //                   table.put(puts);
     66 //                   puts=new ArrayList<Put>(10000);//相当于清空
     67 //               }
     68 //        }
     69 //        table.put(puts);
     70 //        table.close();
     71 //    }
     72     //------------------查询一个---------------------------
     73         public static void get(String tableName,String row) throws IOException{
     74             HTable table =new HTable(conf, tableName);
     75             Get get =new Get(Bytes.toBytes(row));
     76             //传get对象
     77             //返回result对象
     78             Result result=table.get(get);
     79             String r=Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
     80             System.out.println("get="+r);
     81             table.close();
     82         }
     83   //---------------------查询多个-------------------------------
     84         public static void scan(String tablename) throws Exception{  
     85                  HTable table = new HTable(conf, tablename);  
     86                  Scan scan = new Scan();  
     87                  ResultScanner rs = table.getScanner(scan);  
     88                  for(Result result:rs){  
     89                      String r=Bytes.toString(result.getValue(Bytes.toBytes("info"),Bytes.toBytes("name")));
     90                      System.out.println("Scan:"+r);  
     91                   } 
     92                  table.close();
     93                 }
     94   //----------------------更新(put将老版本覆盖,查询最新的)-----------------
     95  
     96         
     97  //-------------------------删除--------------------------------------
     98         public static void del(String tableName) throws IOException{
     99              HTable table =new HTable(conf, tableName);
    100             //创建delete对象
    101              Delete delete = new Delete(Bytes.toBytes("rk0003"));
    102              table.delete(delete);
    103              System.out.println("删除成功!");
    104              table.close();
    105         }
    106     
    107     public static void main(String args[]) throws Exception  
    108     {   
    109           
    110         String tableName="people";  
    111         String columnFamilys[]={"info","data"};  
    112         Hbase1.createTable(tableName, columnFamilys);  
    113         Hbase1.put(tableName,"rk0001" , "info", "name", "cx");
    114         Hbase1.put(tableName,"rk0002" , "info", "name", "zhangsan");
    115         Hbase1.put(tableName,"rk0001" , "info", "age", "20");
    116         Hbase1.put(tableName,"rk0001" , "info", "sex", "male");
    117         Hbase1.put(tableName,"rk0001" , "info", "height", "1.75");
    118         Hbase1.put(tableName,"rk0002" , "info", "age", "22");
    119         Hbase1.put(tableName,"rk0001" , "data", "sal", "10000");
    120         Hbase1.put(tableName,"rk0003" , "info", "age", "25");
    121        // Hbase1.putAll(tableName);
    122         Hbase1.get(tableName,"rk0001");
    123         Hbase1.scan(tableName);  
    124         Hbase1.del(tableName);  
    125     }  
    126     
    127 }


    5.运行无错误

    6.在命令行中查询表是否建立成功

  • 相关阅读:
    ES6中的新特性
    怎样优化CPU
    es6 一些小知识
    ECMAScript有6种继承方式(实现继承)
    angula的factory service provider
    angular的继承作用域通信
    MVP和MVC的区别
    判断浏览器版本语句大全
    IScroll5+在ios、android点击(click)事件不兼容解决方法
    css中单位px和em,rem的区别
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/7504146.html
Copyright © 2011-2022 走看看