Java API连接HBase 进行增删查改操作
来源:互联网 发布:中兴软件测试怎么样 编辑:程序博客网 时间:2024/05/16 09:48
- 准备工作
(1).创建maven工程,添加以下依赖,导入jar包
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.6</version></dependency><dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.2.6</version></dependency>
(2) 创建hbase-site.xml
文件配置hbase的连接信息
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> <description>The directory shared by RegionServers.</description></property><property> <name>hbase.zookeeper.property.clientport</name> <value>2181</value></property></configuration>
(3) 打开hbase服务,准备工作完成。
2. 通过configuration获取hbase连接
public Connection connection; // 用HBaseconfiguration初始化配置信息是会自动加载当前应用的classpath下的hbase-site.xml public static Configuration configuration = HBaseConfiguration.create(); public HbaseTest() throws Exception { // 对connection进行初始化、 // 当然也可以手动加载配置文件,手动加载配置文件时要调用configuration的addResource方法 // configuration.addResource("hbase-site.xml"); connection = ConnectionFactory.createConnection(configuration);
3 、 通过java API创建表、删除表
- 获取连接后就可以通过API操作HBase了,对表的操做是通过Admin类的方法进行操作的。
public void createTable(String tableName , String... cf1)throws Exception{ Admin admin = connection.getAdmin(); //HTD需要TableName类型的tableName,创建TableName类型的tableName TableName tbName = TableName.valueOf(tableName); //判断表述否已存在,不存在则创建表 if(admin.tableExists(tbName)){ System.err.println("表" + tableName + "已存在!"); return; } //通过HTableDescriptor创建一个HTableDescriptor将表的描述传到createTable参数中 HTableDescriptor HTD = new HTableDescriptor(tbName); //为描述器添加表的详细参数 for(String cf : cf1){ // 创建HColumnDescriptor对象添加表的详细的描述 HColumnDescriptor HCD =new HColumnDescriptor(cf); HTD.addFamily(HCD); } //调用createtable方法创建表 admin.createTable(HTD); }
- 删除表
public void deleteTable(String tableName) throws Exception { Admin admin = connection.getAdmin(); //通过tableName创建表名 TableName tbName = TableName.valueOf(tableName); //判断表是否存在,若存在就删除,不存在就退出 if (admin.tableExists(tbName)) { //首先将表解除占用,否则无法删除 admin.disableTable(tbName); //调用delete方法 admin.deleteTable(tbName); System.err.println("表" + tableName + "已删除"); }else{ System.err.println("表" + tableName + "不存在!"); } }}
- 向表中写入数据
操作表中的数据要用Table类下的方法,写入数据要调用put方法
public void putData() throws Exception{ //通过表名获取tbName TableName tbname = TableName.valueOf("bd14:fromJava"); //通过connection获取相应的表 Table table =connection.getTable(tbname); //创建Random对象以作为随机参数 Random random = new Random(); //hbase支持批量写入数据,创建Put集合来存放批量的数据 List<Put> batput = new ArrayList<>(); //循环10次,创建10组测试数据放入list中 for(int i=0;i<10;i++){ //实例化put对象,传入行键 Put put =new Put(Bytes.toBytes("rowkey_"+i)); //调用addcolum方法,向i簇中添加字段 put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("username"),Bytes.toBytes("un_"+i)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("age"),Bytes.toBytes(random.nextInt(50)+1)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("birthday"),Bytes.toBytes("2017"+i)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("phone"),Bytes.toBytes("phone:"+i)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("邮箱"),Bytes.toBytes("邮箱:"+i)); //将测试数据添加到list中 batput.add(put); } //调用put方法将list中的测试数据写入hbase table.put(batput); System.err.println("数据插入完成!"); }
- 查询数据
- 方法1:使用CellScanner类遍历数据表
public void getData() throws Exception{ //获取想要查询的表的TableName TableName tbname = TableName.valueOf("bd14:fromJava"); //通过tbName获得Table对象 Table table =connection.getTable(tbname); //创建Get的集合以承接查询的条件 List<Get> gets = new ArrayList<>(); //循环五次,取前五个测试数据 for(int i=0;i<5;i++){ //就将查询条件放入get对象中 Get get = new Get(Bytes.toBytes("rowkey_"+i)); //将get对象放入聚合 gets.add(get); } //调用table.get方法传入查询条件,获得查询的结果的数组 Result[] results = table.get(gets); //遍历结果数组,利用CellScanner配合cellUtil获得对应的数据 for (Result result : results) { //调用result.cellscanner创建scanner对象 CellScanner cellScanner = result.cellScanner(); //遍历结果集,取出查询结果, //如果存在下一个cell则advandce方法返回true,且current方法会返回一个有效的cell,可以当作循环条件 while (cellScanner.advance()) { //current方法返回一个有效的cell Cell cell = cellScanner.current(); //使用CellUtil调用相应的方法获取想用的数据,并利用Bytes.toString方法将结果转换为string输出 String family = Bytes.toString(CellUtil.cloneFamily(cell)); String qualify = Bytes.toString(CellUtil.cloneQualifier(cell)); String rowkey = Bytes.toString(CellUtil.cloneRow(cell)); String value = Bytes.toString(CellUtil.cloneValue(cell)); System.err.println(family+"_"+qualify+"_"+rowkey+"_"+value); } } }
- 方法 2: 通过getmap方法获取结果集,并循环遍历map获取数据
public void getData() throws Exception{ TableName tbname = TableName.valueOf("bd14:fromJava"); Table table =connection.getTable(tbname); List<Get> gets = new ArrayList<>(); for(int i=0;i<5;i++){ Get get = new Get(Bytes.toBytes("rowkey_"+i)); gets.add(get); } Result[] results = table.get(gets); for (Result result : results) { NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap(); for(byte[] cf : map.keySet()){ NavigableMap<byte[], NavigableMap<Long, byte[]>> valueWithColumnQualify = map.get(cf); for(byte[] columnQualify:valueWithColumnQualify.keySet()){ NavigableMap<Long, byte[]> valueWithTimestamp = valueWithColumnQualify.get(columnQualify); for (Long ts : valueWithTimestamp.keySet()) { byte[] value = valueWithTimestamp.get(ts); String rowKey = Bytes.toString(result.getRow()); String columnFamily = Bytes.toString(cf); String columnqualify = Bytes.toString(columnQualify); String timestamp =new Date(ts)+""; String values = Bytes.toString(columnQualify); System.out.println(rowKey+"-"+columnFamily+"-"+columnqualify+"-"+timestamp+"-"+values); } } } } }
- 方法 3:嵌套遍历结果对象,利用CellUtil获取数据
public void getData() throws Exception{ TableName tbname = TableName.valueOf("bd14:fromJava"); Table table =connection.getTable(tbname); List<Get> gets = new ArrayList<>(); for(int i=0;i<5;i++){ Get get = new Get(Bytes.toBytes("rowkey_"+i)); gets.add(get); } Result[] results = table.get(gets); //遍历结果对象results for (Result result : results) { //嵌套遍历result获取cell for(Cell cell : result.listCells()){ //使用CellUtil工具类直接获取cell中的数据 String family = Bytes.toString(CellUtil.cloneFamily(cell)); String qualify = Bytes.toString(CellUtil.cloneQualifier(cell)); String rowkey = Bytes.toString(CellUtil.cloneRow(cell)); String value = Bytes.toString(CellUtil.cloneValue(cell)); System.err.println(family+"_"+qualify+"_"+rowkey+"_"+value); } } }
- 方法 4:根据rowkey和column获取相应的数据
public void getData() throws Exception{ TableName tbname = TableName.valueOf("bd14:fromJava"); Table table =connection.getTable(tbname); Get get = new Get(Bytes.toBytes("rowkey_"+i)); Result result = table.get(get); //遍历结果对象results for (Result result : results) { //嵌套遍历result获取cell for(Cell cell : result.listCells()){ //使用CellUtil工具类直接获取cell中的数据 String family = Bytes.toString(CellUtil.cloneFamily(cell)); String qualify = Bytes.toString(CellUtil.cloneQualifier(cell)); String rowkey = Bytes.toString(CellUtil.cloneRow(cell)); String value = Bytes.toString(CellUtil.cloneValue(cell)); System.err.println(family+"_"+qualify+"_"+rowkey+"_"+value); } } }
- 更新数据
public void updateData(String tableName,String rowKey,String family, String columkey,String updatedata) throws Exception{ //hbase中更新数据同样采用put方法,在相同的位置put数据,则在查询时只会返回时间戳较新的数据 //且在文件合并时会将时间戳较旧的数据舍弃 Put put = new Put(Bytes.toBytes(rowKey)); //将新数据添加到put中 put.addColumn(Bytes.toBytes(family), Bytes.toBytes(columkey),Bytes.toBytes(updatedata)); Table table = connection.getTable(TableName.valueOf(tableName)); //将put写入HBase table.put(put); }
- 删除数据
//删除某条记录 public void deleteData(String tableName,String rowKey,String family, String columkey) throws Exception{ Table table = connection.getTable(TableName.valueOf(tableName)); //创建delete对象 Delete deletData= new Delete(Bytes.toBytes(rowKey)); //将要删除的数据的准确坐标添加到对象中 deletData.addColumn(Bytes.toBytes(family), Bytes.toBytes(columkey)); //删除表中数据 table.delete(deletData); } //删除一行数据 public void deleteRow(String tableName,String rowKey) throws Exception{ Table table = connection.getTable(TableName.valueOf(tableName)); //通过行键删除一整行的数据 Delete deletRow= new Delete(Bytes.toBytes(rowKey)); table.delete(deletRow); }
阅读全文
0 0
- Java API连接HBase 进行增删查改操作
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- 用 Java 对 hbase 进行CRUD增删改查操作
- 用 Java 对 hbase 进行CRUD增删改查操作
- hbase 增删改查 api 简单操作
- JAVA连接到MySql,并进行增删改查操作
- Java连接本地MySQL数据库进行增删改查操作
- HBase java 增删改查操作
- java操作HBase增删改查基础
- Hbase 的java 增删改查操作
- HBase java 增删改查操作
- java连接数据库,进行增删改查
- java mongdodb API增删改查操作
- hbase 增删查改操作
- Java 连接 Mongodb 增删改查操作
- 对hbase进行增删改查的操作实例
- java安装好后java -version可以,javac不行,并且idea中找不到jdk
- Spring mybatis源码篇章-sql mapper配置文件绑定mapper class类
- MyBatis之java.lang.UnsupportedOperationException
- VUE-Router 同一页面第二次进入不刷新 问题以及几个解决方案。
- 创建数组
- Java API连接HBase 进行增删查改操作
- dev,test,production环境区分
- 翻转一个链表
- Wireshark抓包保存文件(图片,视频,音频等)----可以将传输的数据直接存成文件
- Python装饰器@
- Linux下git diff对比两个文件夹
- pytorch创建神经网络用于分类
- SharedPreferences的简单应用
- Linux下 连接mysql,redis