Hbase javaAPI(工具类)表的增删改查

Stella981
• 阅读 513

建立连接:

package Init;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;
public class Init {
     public static Configuration configuration;//Hbase配置信息
        public static Connection connection;//Hbase连接
        public static Admin admin;
        
/*        public static void main (String [] agrs) throws IOException{
            init();//建立连接
            close();//关闭连接
        }*/

        public static void init()
        {
            configuration = HBaseConfiguration.create();
            configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
            try{
                connection = ConnectionFactory.createConnection(configuration);
                admin = connection.getAdmin();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        
        public static void close()
        {
             try{
                    if(admin != null) {
                        admin.close();
                    }
                    if (null != connection) {
                        connection.close();
                    }
                }catch (IOException e) {
                    e.printStackTrace();
                }
        }
}   

创建表:

import java.io.IOException;
import org.apache.hadoop.hbase.*;
import java.util.Scanner;

import  Init .Init;
public class CreateTable {
     public static void main (String [] args) throws IOException{
             Scanner sc=new Scanner (System.in);
             System.out.println("请输入表名:");
            String tbname=sc.nextLine();//表名
            System.out.println("请确定列族数:");
            int n=sc.nextInt();//确定列族
            String [] strArray = new String [n];
            for(int i=0;i<n;i++)
            {
                System.out.println("请输入列族名:");
                sc=new Scanner (System.in);//对sc对象初始化
                String col=sc.nextLine();//列族属性
                strArray[i]=col;
            }
            sc.close();
        
            createTable(tbname,strArray);//建表
        }
     
     public static void createTable(String myTableName,String[] colFamily) throws IOException {
         
            Init.init();//调用工具类
            TableName tableName = TableName.valueOf(myTableName);
     
            if(Init.admin.tableExists(tableName)){
                System.out.println("talbe is exists!");
            }else {
                HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
                for(String str:colFamily){
                    HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
                    hTableDescriptor.addFamily(hColumnDescriptor);
                }
                Init.admin.createTable(hTableDescriptor);
                System.out.println("create table success");
            }
            Init.close();
        }
}

修改表(列族名或者列名):

import java.io.IOException;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.util.Bytes;

import java.util.Scanner;

import Init.Init;
public class AlterTable {

    public static void main(String [] args) throws IOException
    {
        meau();
        /*Scanner sc=new Scanner(System.in);
        System.out.println("请输入创建数量");
        int n=sc.nextInt();
        for(int i=0;i<n;i++)
        {
        sc=new Scanner(System.in);
        System.out.println("请输入修改表名");
        String tb_name=sc.nextLine();
        System.out.println("请输入列族名");
        String colFamily=sc.nextLine();
        addColFamily(tb_name,colFamily);
        }*/
        
        //delColFamily("Score","course");
    }
    public static void meau() throws IOException
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("请选择:1.增加列族!!!2.删除列族!!!");
        int n=sc.nextInt();
        switch(n)
        {
        case 1:
            sc=new Scanner(System.in);
            System.out.println("请输入创建数量");
            int a=sc.nextInt();
            for(int i=0;i<a;i++)
            {
            sc=new Scanner(System.in);
            System.out.println("请输入修改表名");
            String tb_name=sc.nextLine();
            System.out.println("请输入列族名");
            String colFamily=sc.nextLine();
            addColFamily(tb_name,colFamily);
            };
            
        case 2:
        sc=new Scanner(System.in);
        System.out.println("请输入删除数量");
        int b=sc.nextInt();
        for(int i=0;i<b;i++)
        {
        sc=new Scanner(System.in);
        System.out.println("请输入修改表名");
        String tb_name=sc.nextLine();
        System.out.println("请输入列族名");
        String colFamily=sc.nextLine();
        delColFamily(tb_name,colFamily);
        };
        
        }
    }
    
    public static void addColFamily(String tableName, String colFamily)throws IOException
    {
        Init.init();
        TableName tablename=TableName.valueOf(tableName);
        //判断表是否存在
          if (Init.admin.tableExists(tablename)) {
              try  {
         Init.admin.disableTable(tablename);
         HTableDescriptor tb_des =  Init.admin.getTableDescriptor (tablename ); //获取表的描述
         HColumnDescriptor newcol =  new  HColumnDescriptor( colFamily );//创建列族添加对象;为添加对象赋值
         tb_des.addFamily(newcol);//添加列族
         Init.admin.modifyTable(tablename, tb_des);
          Init. admin.enableTable(tablename);
          System.out.println(colFamily+"创建成功");
          Init.close();
          System.out.println("是否继续修改:1.继续修改!!!2.退出!!!");
          Scanner sc=new Scanner(System.in);
          int n =sc. nextInt();
          if(n==1)
          {
              meau();
          }
          else
          {
              System.out.println("谢谢使用");
          }
          }catch  (Exception e) {
              //  TODO : handle exception
             e.printStackTrace();
         }  
         }    
    }
    
    public static void delColFamily(String tableName, String colFamily)throws IOException
    {
        Init.init();
        TableName tablename=TableName.valueOf(tableName);
        //判断表是否存在
          if (Init.admin.tableExists(tablename)) {
              try  {
         Init.admin.disableTable(tablename);
         HTableDescriptor tb_des =  Init.admin.getTableDescriptor (tablename ); //获取表的描述
         tb_des.removeFamily(Bytes. toBytes (colFamily ));
         Init.admin.modifyTable(tablename, tb_des);
          Init. admin.enableTable(tablename);
          System.out.println(colFamily+"删除成功");
          Init.close();
          System.out.println("是否继续修改:1.继续修改!!!2.退出!!!");
          Scanner sc=new Scanner(System.in);
          int n =sc. nextInt();
          if(n==1)
          {
              meau();
          }
          else
          {
              System.out.println("谢谢使用");
          }
          }catch  (Exception e) {
              //  TODO : handle exception
             e.printStackTrace();
         }  
         }    
    }
    
    
}

列出所有表:

import java.io.IOException;

import org.apache.hadoop.hbase.HTableDescriptor;

import Init.Init;
public class ListTable {
    public static void main(String [] args) throws IOException
    {
        listTable();
    }
     public static void listTable() throws IOException {
            Init.init();
            HTableDescriptor hTableDescriptors[] = Init.admin.listTables();
            for(HTableDescriptor hTableDescriptor :hTableDescriptors){
                System.out.println(hTableDescriptor.getNameAsString());
            }
           Init. close();
        }
}

添加数据:

import java.io.IOException;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.util.Scanner;
import Init.Init;

public class InsertData {
    public static void main( String [] args ) throws IOException
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请确定添加数量:");
        int n =sc.nextInt();//确定添加数量
        
        for(int i= 0;i<n;i++)
        {
            sc=new Scanner(System.in);//初始化sc
            System.out.println("请输入添加数据的表名:");
            String tb_Name=sc.nextLine();//选择表
            System.out.println("请输入行键:");
            String tb_rowKey=sc.nextLine();
            System.out.println("请输入列族:");
            String tb_colFamily=sc.nextLine();
            System.out.println("请输入列:");
            String tb_col=sc.nextLine();
            System.out.println("请输入数据:");
            String tb_val=sc.nextLine();
            
            insertData(tb_Name,tb_rowKey,tb_colFamily,tb_col,tb_val);//添加数据
        }
        sc.close();
    }
    
    public static void insertData(String tableName, String rowKey, String colFamily, String col, String val) throws IOException {
        Init.init();
        Table table = Init.connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(),val.getBytes());
        table.put(put);
        table.close();
        System.out.println("数据添加成功!");
        Init.close();
    }
}

删除数据:

import java.io.IOException;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;

import java.util.Scanner;
import Init.Init;
public class DelData {
    public static void main(String [] args) throws IOException
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请确定删除数量:");
        int n =sc.nextInt();//确定添加数量
        
        for(int i= 0;i<n;i++)
        {
            sc=new Scanner(System.in);//初始化sc
            System.out.println("请输入删除数据的表名:");
            String tb_Name=sc.nextLine();//选择表
            System.out.println("请输入行键:");
            String tb_rowKey=sc.nextLine();
            System.out.println("请输入列族:");
            String tb_colFamily=sc.nextLine();
            System.out.println("请输入列:");
            String tb_col=sc.nextLine();
            
            deleteData(tb_Name,tb_rowKey,tb_colFamily,tb_col);//添加数据
        }
        sc.close();
    }
    
     public static void deleteData(String tableName,String rowKey,String colFamily,String col) throws IOException {
           Init. init();
            Table table = Init.connection.getTable(TableName.valueOf(tableName));
            Delete delete = new Delete(rowKey.getBytes());
           // 删除指定列族的所有数据
            delete.addFamily(colFamily.getBytes());
            //删除指定列的数据
            delete.addColumn(colFamily.getBytes(), col.getBytes());
     
            table.delete(delete);
            table.close();
            System.out.println("删除成功");
            Init.close();
        }
}

Get获取单个数据:

import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
import java.util.Scanner;

import Init.Init;
public class GetData {
    public static void main(String [] args) throws IOException
    {
        Scanner sc=new Scanner (System.in);
        System.out.println("请输入查找数量:");
         int n = sc.nextInt();
         for(int i=0;i<n;i++)
         {
             sc=new Scanner(System.in);//sc对象初始化
             System.out.println("请输入查找表名:");
             String tb_Name=sc.nextLine();
             System.out.println("请输入行键:");
             String tb_rowKey=sc.nextLine();
             System.out.println("请输入列族:");
            String tb_colFamily=sc.nextLine();
            System.out.println("请输入列:");
            String tb_col=sc.nextLine();
            getData(tb_Name,tb_rowKey,tb_colFamily,tb_col);
         }
         sc.close();
    }
    
     public static void getData(String tableName,String rowKey,String colFamily,String col)throws  IOException
     {
            Init.init();
            Table table =Init. connection.getTable(TableName.valueOf(tableName));
            Get get = new Get(rowKey.getBytes());
            get.addColumn(colFamily.getBytes(),col.getBytes());
            Result result = table.get(get);//返回到结果集
           // showCell(result);
           Cell[] cells = result.rawCells();
           for(Cell cell:cells)
                   {
                System.out.println("行键:"+new String(CellUtil.cloneRow(cell))+" ");
               // System.out.println("Timetamp:"+cell.getTimestamp()+" ");
                System.out.println(" 列族:"+new String(CellUtil.cloneFamily(cell))+" ");
                System.out.println(" 列:"+new String(CellUtil.cloneQualifier(cell))+" ");
                System.out.println("数据:"+new String(CellUtil.cloneValue(cell))+" ");
            table.close();
           Init. close();
                   }
        }
}
     //将结果集的值遍历输出
     /*public static void showCell(Result result){
            Cell[] cells = result.rawCells();
            for(Cell cell:cells){
                System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");
                System.out.println("Timetamp:"+cell.getTimestamp()+" ");
                System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");
                System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
                System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
            }
        }*/

Scan获取所有数据:

import java.io.IOException;


import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import java.util.Scanner;

import Init.Init;
public class ScanData {
    public static void main(String [] args) throws IOException
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入查询表的数量");
        int n=sc.nextInt();
        for(int i=0;i<n;i++)
        {
            sc=new Scanner(System.in);
            System.out.println("请输入查询的表名");
            String tb_name=sc.nextLine();
            scanData(tb_name);
        }            
        sc.close();
    }
    
     public static void scanData(String tableName)throws  IOException
     {
         
         Scan scan = new Scan();
         //scan.addColumn(Bytes.toBytes(""),Bytes.toBytes(""));    添加列族;列的约束查询
            Init.init();
            Table table = Init.connection.getTable(TableName.valueOf(tableName));
                ResultScanner resultScanner = table.getScanner(scan);
                Result rs = resultScanner.next();
                for (; rs != null;rs = resultScanner.next()){
                    for (KeyValue kv : rs.list()){
                        System.out.println("--------------");
                        System.out.println("行键:"+ new String(kv.getRow()));
                        System.out.println("列族: "+ new String(kv.getFamily()));
                        System.out.println("列 :" + new String(kv.getQualifier ()));
                        System.out.println("数值 :"+ new String(kv.getValue()));
                    }
                }

         }
     }
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这