Hbase JAVA API 增删改查操作
创建maven项目
添加pom依赖
打开https://mvnrepository.com/ 搜索hbase
选择hbase-client, 2.2.4版本,点进去复制依赖代码
<dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.2.4</version>
</dependency>
创建表格
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.access.Permission;import java.io.IOException;
import java.util.Scanner;public class Create_Table {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入对象tb_name,String类型String tb_name= sc.next();//TableDescriptorBuilder 类 用于列族创建和定义,tdb为对象,TableName.valueOf(tb_name)传入刚才定义的表格名字参数TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tb_name));//使用etColumnFamily方法,以及TableDescriptorBuilder下的ColumnFamilyDescriptorBuilder实例来添加和定义列族//此处分别为Per_Info,Edu_Info两个列族tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.of("Per_Info")).build();tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.of("Edu_Info")).build();//使用 Admin类 admin对象 createTable方法,将tdb里的表格名+列族名参数传入,表格创建完毕admin.createTable(tdb.build());//控制台打印提示创建成功System.out.println("Table created successfully");//使用 Admin类 admin对象 close方法关闭hbase连接admin.close();}}
表格失效
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 java.io.IOException;
import java.util.Scanner;public class Disable_Table {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入对象tb_name,String类型String tb_name = sc.next();//使用 Admin类 admin对象 isTableDisabled方法查看表格失效情况,并将结果存入对象isDisable,类型为布尔类型Boolean isDisabled = admin.isTableDisabled(TableName.valueOf(tb_name));//如果表格有效if(isDisabled==false)//则提示表格是有效的System.out.println("Table is Enabled");//如果表格失效else//则提示表格是失效的System.out.println("Table is Disabled");//如果表格有效if(!isDisabled){//使用 Admin类 admin对象 disabTable方法,传入表格名参数将表格失效admin.disableTable(TableName.valueOf(tb_name));//控制台提示表格失效成功System.out.println("Table is Disabled now");}}
}
删除表格
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 java.io.IOException;
import java.util.Scanner;public class Drop_table {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入对象tb_name,String类型String tb_name = sc.next();//使用 Admin类 admin对象 isTableDisabled方法查看表格失效情况,并将结果存入对象isDisable,类型为布尔类型Boolean isDisabled = admin.isTableDisabled(TableName.valueOf(tb_name));//如果表格为有效状态if(isDisabled==false) {//使用 Admin类 admin对象 disableTable方法将表格失效admin.disableTable(TableName.valueOf(tb_name));//使用 Admin类 admin对象 deleteTable方法将表格删除admin.deleteTable(TableName.valueOf(tb_name));}//如果表格为失效状态else//使用 Admin类 admin对象 deleteTable方法将表格删除admin.deleteTable(TableName.valueOf(tb_name));//控制台打印提示表格成功删除System.out.println("Table Dropped successfuly");//关闭admin表格管理admin.close();//关闭hbase连接conn.close();}
}
删除数据
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.Scanner;public class Delete_Data {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入对象tb_name,String类型String tb_name = sc.next();//Table 类 用于表格数据更改 table对象,表格名称数据参数传入Table table = conn.getTable(TableName.valueOf(tb_name));//控制台提示(“请输入行键”)System.out.println("Enter the row key:");//将输入的数字读入 rk 对象,String类型String rk = sc.next();//Delete 类用于删除 del对象 Hbase中数据都是字节类型,所以要将刚才的行键转化为字节类型,并存入del对象Delete del = new Delete(Bytes.toBytes(rk));//使用 Delete 类 del对象 addColumn方法 设置要删除的列族的列,都要转成字节类型操作//此处删除某一行的cf2列族,degree列,如果你的表格没有,请根据自己的表格格式更改del.addColumn(Bytes.toBytes("cf2"),Bytes.toBytes("degree"));//使用 Table类 table对象 delete方法 传入del对象包含的表格名行键列族名列名参数,删除表格数据table.delete(del);//控制台提示删除数据成功System.out.println("Data Deleted Successfully");//table表格更改关闭table.close();//连接hbase关闭conn.close();}
}
删除多个数据 使用List数组
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class List_Delete {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入对象tb_name,String类型String tb_name = sc.next();//Table 类 用于表格数据更改 table对象,表格名称数据参数传入Table table = conn.getTable(TableName.valueOf(tb_name));//Delete 类, 设置删除行键为1, 存入del1对象Delete del1 = new Delete(Bytes.toBytes("1"));//使用 Delete类 del1对象 addColumn方法 设置列族为cf1,列为agedel1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("age"));//Delete 类, 设置删除行键为12, 存入del2对象Delete del2 = new Delete(Bytes.toBytes("12"));//使用 Delete类 del2对象 addColumn方法 设置列族为cf1,列为namedel1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"));//Delete 类, 设置删除行键为4, 存入del3对象Delete del3 = new Delete(Bytes.toBytes("4"));//使用 Delete类 del3对象 addColumn方法 设置列族为cf1,列为namedel1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"));//List类 创建一个数组类型的Delete,对象listList<Delete> list = new ArrayList<Delete>();//使用List类,list对象,add方法,将del1 del2 del3参数传入数组list.add(del1);list.add(del2);list.add(del3);//使用Table类 table对象 delete方法,传入list对象参数,删除数组数据,即三个表格数据同时删除table.delete(list);//控制台打印数据删除成功提示System.out.println("Data Deleted Successfully");//关闭更改表格table.close();//关闭hbase连接conn.close();}
}
插入数据
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.Scanner;public class Insert_Data {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//Admin 类 用于管理表格的名字,创建,删除,有效,失效操作,给定对象adminAdmin admin = conn.getAdmin();//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入变量tb_name,String类型String tb_name = sc.next();//Table 类 用于表格数据更改 table对象,表格名称数据参数传入Table table = conn.getTable(TableName.valueOf(tb_name));//控制台提示输入插入数据的行键System.out.println("Enter the row key:");//读取的行间数据放入rk这个变量,String类型String rk = sc.next();//Put 类 用于数据插入,将rk行键参数传入 p对象, 全部转化为字节类型Put p = new Put(Bytes.toBytes(rk));//使用 Put类 p对象 addColumn方法插入具体数据,第一个为列族,第二个为列,第三个为值,全部转化为字节类型p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Lily"));p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("age"),Bytes.toBytes("20"));p.addColumn(Bytes.toBytes("cf2"),Bytes.toBytes("degree"),Bytes.toBytes("MBA"));//使用Table类 table对象 put方法,传入参数p,包含表格名,列族,列,值table.put(p);//控制台提示插入数据成功System.out.println("Data inserted successfully");//关闭表格更改table.close();//关闭hbase链接conn.close();}
}
插入多个数据,使用List数组
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class List_Insert {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入变量tb_name,String类型String tb_name = sc.next();//Table 类 用于表格数据更改 table对象,表格名称数据参数传入Table table = conn.getTable(TableName.valueOf(tb_name));//使用 Put 类 p1对象插入行键为7,列族为cf1,列为name,值为MiryPut p1 = new Put(Bytes.toBytes("7"));p1.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Miry"));//使用 Put 类 p2对象插入行键为8,列族为cf1,列为name,值为PeterPut p2 = new Put(Bytes.toBytes("8"));p2.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Peter"));//使用 Put 类 p3对象插入行键为9,列族为cf1,列为name,值为MikePut p3 = new Put(Bytes.toBytes("9"));p3.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("Mike"));//List类 创建一个数组类型的Put,对象listList<Put> list = new ArrayList<Put>();//使用List类,list对象,add方法,将p1,p2,p3 参数传入数组list.add(p1);list.add(p2);list.add(p3);//使用Table类 table对象 put方法插入数据至表格,参数为listtable.put(list);//控制台提示数据插入成功System.out.println("Data inserted successfully");//关闭表格更改table.close();//关闭hbase链接conn.close();}
}
读取数据GET
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.Scanner;public class ReadData_GET {public static void main(String[] args) throws IOException {//实例化配置信息对象,简而言之Configuration类用于连接Windows中的idea软件与Linux中的hdfs和里面的hbase等配置文件Configuration con = new Configuration();//conf对象得到数据库连接信息后使用set方法连接上zookeeper和对应的虚拟机主机名或者ip地址,此处配置在hbase-site.xmlcon.set("hbase.zookeeper.quorum","192.168.237.200");//Connection类创建连接,传入con对象参数实现hbase连接Connection conn = ConnectionFactory.createConnection(con);//控制台提示输入表格名System.out.println("Enter the table Name:");//控制台扫描提取输入的表格名Scanner sc = new Scanner(System.in);//将读取的表格名存入变量tb_name,String类型String tb_name = sc.next();//Table 类 用于表格数据更改 table对象,表格名称数据参数传入Table table = conn.getTable(TableName.valueOf(tb_name));//控制台提示输入行键System.out.println("Enter the row key:");//提取的行键数据存入rk变量String rk = sc.next();//Get 类 g对象 用于hbase表格数据提取,传入参数行键rk,存入对象gGet g = new Get(Bytes.toBytes(rk));//Result 类 result对象 用于结果返回提取,传入参数对象gw,存入result对象Result result = table.get(g);//通过 Result类 result对象 getValue方法 提取列族和列名,都是字节类型byte[] name = result.getValue(Bytes.toBytes("cf1"),Bytes.toBytes("name"));byte[] age = result.getValue(Bytes.toBytes("cf1"),Bytes.toBytes("age"));byte[] degree =result.getValue(Bytes.toBytes("cf2"),Bytes.toBytes("degree"));//控制台提示输出转化为String类型的对应数据System.out.println("Name = "+Bytes.toString(name));System.out.println("Age = "+Bytes.toString(age));System.out.println("Degree = "+Bytes.toString(degree));//关闭表格更改table.close();//关闭hbase链接conn.close();}
}
e[] age = result.getValue(Bytes.toBytes(“cf1”),Bytes.toBytes(“age”));
byte[] degree =result.getValue(Bytes.toBytes(“cf2”),Bytes.toBytes(“degree”));
//控制台提示输出转化为String类型的对应数据
System.out.println("Name = "+Bytes.toString(name));
System.out.println("Age = "+Bytes.toString(age));
System.out.println("Degree = "+Bytes.toString(degree));
//关闭表格更改
table.close();
//关闭hbase链接
conn.close();
}
}