当前位置:   article > 正文

HBase Java API开发:表的扫描与扫描的缓存和批量处理_hbase开发:表的扫描与扫描的缓存和批量处理

hbase开发:表的扫描与扫描的缓存和批量处理

第1关:批量处理

编程要求

在右侧编辑器begin-end处编写代码补全batchOp(String tablename) 函数,参数:tablename为待操作表的表名,要求实现如下操作:

  • 删除表中行键为row1row2的行;

  • 获取表中行键为row3row10的行;

  • 四个操作需要依照以上先后顺序,即先删除在获取row3,row10

不需要你直接输出,只需要将批量操作的执行结果作为返回值返回即可。

  1. package step1;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.hbase.Cell;
  6. import org.apache.hadoop.hbase.CellUtil;
  7. import org.apache.hadoop.hbase.HBaseConfiguration;
  8. import org.apache.hadoop.hbase.TableName;
  9. import org.apache.hadoop.hbase.client.*;
  10. import org.apache.hadoop.hbase.client.coprocessor.Batch;
  11. import org.apache.hadoop.hbase.util.Bytes;
  12. public class Task {
  13. public Object[] batchOp(String tablename) throws Exception {
  14. /********* Begin *********/
  15. Configuration conf = HBaseConfiguration.create();
  16. Connection conn = ConnectionFactory.createConnection(conf);
  17. Table table = conn.getTable(TableName.valueOf(tablename));
  18. List<Row> rows = new ArrayList<>();
  19. //删除操作
  20. Delete delete = new Delete(Bytes.toBytes("row1"));
  21. Delete delete2 = new Delete(Bytes.toBytes("row2"));
  22. rows.add(delete);
  23. rows.add(delete2);
  24. //获取操作
  25. Get get = new Get(Bytes.toBytes("row3"));
  26. Get get2 = new Get(Bytes.toBytes("row10"));
  27. rows.add(get);
  28. rows.add(get2);
  29. //定义结果数组长度
  30. Object[] results = new Object[rows.size()];
  31. table.batch(rows, results);//这是一个同步的操作,批量操作的结果将会在操作之后放在results中
  32. //delete和put操作的结果为NONE 即没有结果
  33. return results;
  34. /********* End *********/
  35. }
  36. }

第2关:扫描表中所有的数据

知识点

1.扫描一张表的步骤:

step1:创建Scan扫描对象;

Scan scan = new Scan();

step2:获取Resultscanner对象

ResultScanner scanner = table.getScanner(scan);

step3:利用ResultScanner对象遍历数据

  1. for(Result result : scanner){
  2. for (Cell kv : result.rawCells()) {
  3. String family = Bytes.toString(CellUtil.cloneFamily(kv));
  4. String qualifire = Bytes.toString(CellUtil.cloneQualifier(kv));
  5. String value = Bytes.toString(CellUtil.cloneValue(kv));
  6. values.add(value);
  7. System.out.println(family + ":" + qualifire + "\t" + value);
  8. }
  9. }

编程要求

编写代码补全右侧scanTable(String tableName)函数,输出表名为tableName所有行中所有列的值。

  1. package step2;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.hbase.Cell;
  4. import org.apache.hadoop.hbase.CellUtil;
  5. import org.apache.hadoop.hbase.HBaseConfiguration;
  6. import org.apache.hadoop.hbase.TableName;
  7. import org.apache.hadoop.hbase.client.*;
  8. public class Task {
  9. public void scanTable(String tablename) throws Exception {
  10. /********* Begin *********/
  11. Configuration conf=HBaseConfiguration.create();
  12. Connection conn=ConnectionFactory.createConnection(conf);
  13. Table table = conn.getTable(TableName.valueOf(tablename));
  14. Scan scan=new Scan();
  15. ResultScanner scanner=table.getScanner(scan);
  16. for(Result result : scanner){
  17. for (Cell cell : result.rawCells()) {
  18. System.out.println(new String(CellUtil.cloneValue(cell),"utf-8"));
  19. }
  20. }
  21. scanner.close();
  22. /********* End *********/
  23. }
  24. }

第3关:在扫描中使用缓存和批量参数

编程要求

请补全scanTable(String tablename)函数实现扫描表的功能,参数tablename为表名,完成如下操作:

  • 设置扫描缓存为200

  • 设置扫描值行健在1row199之间;

  • 将扫描到数据的值输出。

  1. package step3;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.hbase.Cell;
  4. import org.apache.hadoop.hbase.CellUtil;
  5. import org.apache.hadoop.hbase.HBaseConfiguration;
  6. import org.apache.hadoop.hbase.TableName;
  7. import org.apache.hadoop.hbase.client.*;
  8. import org.apache.hadoop.hbase.util.Bytes;
  9. public class Task {
  10. public void scanTable(String tablename) throws Exception {
  11. /********* Begin *********/
  12. Configuration conf=HBaseConfiguration.create();
  13. Connection conn=ConnectionFactory.createConnection(conf);
  14. Table table = conn.getTable(TableName.valueOf(tablename));
  15. Scan scan=new Scan();
  16. scan.setCaching(200); //设置缓存
  17. scan.setStartRow(Bytes.toBytes("1"));
  18. scan.setStopRow(Bytes.toBytes("row199"));
  19. ResultScanner scanner=table.getScanner(scan);
  20. for(Result result:scanner){
  21. for(Cell cell:result.listCells()){
  22. System.out.println(new String(CellUtil.cloneValue(cell),"utf-8"));
  23. }
  24. }
  25. scanner.close();
  26. /********* End *********/
  27. }
  28. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/647159
推荐阅读
相关标签
  

闽ICP备14008679号