• hbase java API


    主方法

     1 import org.apache.commons.lang.StringUtils;
     2 import org.apache.hadoop.conf.Configuration;
     3 import org.apache.hadoop.hbase.Cell;
     4 import org.apache.hadoop.hbase.HBaseConfiguration;
     5 import org.apache.hadoop.hbase.TableName;
     6 import org.apache.hadoop.hbase.client.*;
     7 import org.apache.hadoop.hbase.util.Bytes;
     8 import org.slf4j.Logger;
     9 import org.slf4j.LoggerFactory;
    10 
    11 import java.io.BufferedReader;
    12 import java.io.FileNotFoundException;
    13 import java.io.FileReader;
    14 import java.io.IOException;
    15 import java.util.*;
    16 
    17 public class HbaseTest {
    18 
    19     private static Logger log = LoggerFactory.getLogger(HbaseTest.class);
    20 
    21     static Configuration conf = null;
    22     static Connection conn = null;
    23     static {
    24         conf = HBaseConfiguration.create();
    25         conf.set("hbase.zookeeper.quorum", "linux01");
    26         conf.set("hbase.zookeeper.property.clientPort", "2181");
    27         try {
    28             conn = ConnectionFactory.createConnection(conf);
    29         } catch (IOException e) {
    30             e.printStackTrace();
    31         }
    32     }
    33 
    34     public static void main(String[] args) {
    35         String tblName = "flights";
    36         String[] columnFamilys = {"info"};
    37         // 1 创建表
    38         // createTable(tblName, columnFamilys);
    39 
    40         // 2 插入数据
    41         /*List<Map<String, Object>> data = getData();//准备多行数据
    42         for (Map<String, Object> map : data) {
    43             insertRow(TableName.valueOf(tblName), map);
    44         }*/
    45         //3 修改数据
    46         /*Map<String, Object> dataOfUpdate = new HashMap<String, Object>();
    47         dataOfUpdate.put("rowKey", "fffc1ebc-236f-4807-a527-a3696f0bb9a9");
    48         dataOfUpdate.put("colFamily", "info");
    49         dataOfUpdate.put("Dest", "Pudong Shanghai");
    50         updateRow(TableName.valueOf(tblName), dataOfUpdate);*/
    51         //4 删除数据
    52         //removeRow(TableName.valueOf(tblName), "fffc1ebc-236f-4807-a527-a3696f0bb9a9");
    53         //deleteColFamily(TableName.valueOf(tblName), "ffc80296-f051-4a8c-9972-845887ee1474",  "info");
    54         //deleteCol(TableName.valueOf(tblName), "ff7f07c8-0787-4670-9654-c47d376a6c10", "info", "Dest");
    55         //5 查看数据
    56         //scanTable(TableName.valueOf("user"), new String[]{"info1", "info2"});
    57         getRowData(TableName.valueOf("user"), "1234");
    58     }
    View Code

    准备数据

     1     public static List<Map<String, Object>> getData() {
     2         ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
     3         String[] colNames = new String[]{"AvgTicketPrice", "Cancelled", "Carrier", "Dest", "DestAirportID", "Origin", "OriginAirportID"};
     4         try {
     5             BufferedReader br = new BufferedReader(new FileReader("I:\projectImplement\dataWareHouse\test-es\data\630data.csv"));
     6             String line = null;
     7             while ((line = br.readLine()) != null) {
     8                 String[] vals = line.split(",");
     9                 HashMap<String, Object> map = new HashMap<String, Object>();
    10                 for (int i = 0; i < colNames.length; i++) {
    11                     map.put(colNames[i], vals[i]);
    12                 }
    13                 map.put("rowKey", UUID.randomUUID().toString());
    14                 map.put("colFamily", "info");
    15                 list.add(map);
    16             }
    17         } catch (FileNotFoundException e) {
    18             e.printStackTrace();
    19         } catch (IOException e) {
    20             e.printStackTrace();
    21         }
    22         return list;
    23     }
    View Code

    创建表

     1     public static void createTable(String tName, String[] columnFamilys) {
     2         if (StringUtils.isBlank(tName) || columnFamilys == null || columnFamilys.length < 0) {
     3             log.error("hbase 表名,列族为空");
     4             return;
     5         }
     6 
     7         TableName hTable = TableName.valueOf(tName);
     8         try {
     9             Admin admin = conn.getAdmin();
    10             if (admin.tableExists(hTable)) {
    11                 log.info(tName + "表已经存在");
    12                 return;
    13             }
    14 
    15             //创建表
    16             TableDescriptorBuilder tblDescBuilder = TableDescriptorBuilder.newBuilder(hTable);//表构造器
    17             for (String colFamily : columnFamilys) {
    18                 ColumnFamilyDescriptorBuilder colFamilyDescBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(colFamily));//列族构造器
    19                 ColumnFamilyDescriptor colFamilyDesc = colFamilyDescBuilder.build();
    20                 tblDescBuilder.setColumnFamily(colFamilyDesc);//表构造器添加
    21             }
    22             TableDescriptor tblDesc = tblDescBuilder.build();
    23             admin.createTable(tblDesc);
    24         } catch (IOException e) {
    25             e.printStackTrace();
    26             log.error(tName + "创建失败");
    27         }
    28     }
    View Code

    插入数据

     1     public static void insertRow(TableName tblName, Map<String, Object> map) {
     2         if (tblName == null || map == null || map.size() <= 2) {
     3             log.info("表名或参数为空");
     4             return;
     5         }
     6 
     7         Table table = null;
     8         try {
     9             table = conn.getTable(tblName);
    10             //封装put, 并添加数据
    11             Put put = new Put(Bytes.toBytes(map.get("rowKey").toString()));
    12             byte[] cf = Bytes.toBytes(map.get("colFamily").toString());
    13             for (Map.Entry<String, Object> en : map.entrySet()) {
    14                 if ("rowKey".equals(en.getKey()) || "colFamily".equals(en.getKey())) {
    15                     continue;
    16                 }
    17                 put.addColumn(cf, Bytes.toBytes(en.getKey()), Bytes.toBytes(en.getValue().toString()));
    18             }
    19             table.put(put);//添加数据
    20         } catch (IOException e) {
    21             e.printStackTrace();
    22             log.error(tblName + "插入数据失败, map=" + map);
    23         } finally {
    24             if (table != null) {
    25                 try {
    26                     table.close();
    27                 } catch (IOException e) {
    28                     e.printStackTrace();
    29                 } finally {
    30                     table = null;
    31                 }
    32             }
    33         }
    34     }
    View Code

    删除数据

     1     public static void removeRow(TableName tblName, String rowKey) {
     2         if (tblName == null || rowKey == null) {
     3             log.info("表名或rowkey为空");
     4             return;
     5         }
     6 
     7         Table hTable = null;
     8         Delete delete = new Delete(Bytes.toBytes(rowKey));
     9         try {
    10             hTable = conn.getTable(tblName);
    11             hTable.delete(delete);
    12         } catch (IOException e) {
    13             e.printStackTrace();
    14             log.error("删除失败, rowkey=" + rowKey);
    15         } finally {
    16             if (hTable != null) {
    17                 try {
    18                     hTable.close();
    19                 } catch (IOException e) {
    20                     e.printStackTrace();
    21                 } finally {
    22                     hTable = null;
    23                 }
    24             }
    25         }
    26     }
    View Code

    修改数据

     1     public static void updateRow(TableName tblName, Map<String, Object> map) {
     2         if (tblName == null || map == null || map.size() <= 2) {
     3             log.info("表名或参数为空");
     4             return;
     5         }
     6 
     7         Table hTable = null;
     8         try {
     9             hTable = conn.getTable(tblName);
    10             //封装put 新增数据
    11             Put put = new Put(Bytes.toBytes(map.get("rowKey").toString()));
    12             byte[] cf = Bytes.toBytes(map.get("colFamily").toString());
    13             for (Map.Entry<String, Object> en : map.entrySet()) {
    14                 if ("rowKey".equals(en.getKey()) || "colFamily".equals(en.getKey())) {
    15                     log.info("rowkey 或 colFamily 为空");
    16                     continue;
    17                 }
    18                 put.addColumn(cf, Bytes.toBytes(en.getKey()), Bytes.toBytes(en.getValue().toString()));
    19             }
    20             hTable.put(put); //新增数据
    21         } catch (IOException e) {
    22             e.printStackTrace();
    23             log.error("修改失败");
    24         } finally {
    25             if (hTable != null) {
    26                 try {
    27                     hTable.close();
    28                 } catch (IOException e) {
    29                     e.printStackTrace();
    30                 } finally {
    31                     hTable = null;
    32                 }
    33             }
    34         }
    35     }
    View Code

    查询数据

     1     public static void getRowData(TableName tblName, String rowKey) {
     2         if (tblName == null || rowKey == null) {
     3             log.info("表名 或 rowkey为空");
     4             return;
     5         }
     6         Table hTable = null;
     7         ResultScanner rs = null;
     8         try {
     9             hTable = conn.getTable(tblName);
    10             Get get = new Get(Bytes.toBytes(rowKey));
    11             Result result = hTable.get(get);
    12             for (Cell c : result.rawCells()) {
    13                 String val = Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());
    14                 String cf = Bytes.toString(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength());
    15                 String col = Bytes.toString(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength());
    16                 System.out.printf("tbl=%s, rowkey=%s, cf=%s, col=%s, val=%s
    ", tblName.getNameAsString(), cf, col, rowKey, val);
    17             }
    18 
    19         } catch (IOException e) {
    20             e.printStackTrace();
    21             log.info("扫描失败");
    22         } finally {
    23             if (rs != null) {
    24                 rs.close();
    25             }
    26             if (hTable != null) {
    27                 try {
    28                     hTable.close();
    29                 } catch (IOException e) {
    30                     e.printStackTrace();
    31                 }
    32             }
    33         }
    34     }
    35 
    36     public static void scanTable(TableName tblName, String[] colFamilys) {
    37         if (tblName == null) {
    38             log.info("表名为空");
    39             return;
    40         }
    41         Table hTable = null;
    42         ResultScanner rs = null;
    43         try {
    44             hTable = conn.getTable(tblName);
    45             Scan scan = new Scan();
    46             for (String cf : colFamilys) {
    47                 scan.addFamily(Bytes.toBytes(cf));
    48             }
    49 
    50             rs = hTable.getScanner(scan);
    51             // 结果处理, 一个result表示一个rowkey的数据
    52             for (Result result : rs) {
    53                 String rowkey = Bytes.toString(result.getRow());
    54                 for (Cell c : result.rawCells()) {
    55                     String val = Bytes.toString(c.getValueArray(), c.getValueOffset(), c.getValueLength());
    56                     String cf = Bytes.toString(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength());
    57                     String col = Bytes.toString(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength());
    58                     System.out.printf("tbl=%s, rowkey=%s, cf=%s, col=%s, val=%s
    ", tblName.getNameAsString(), cf, col, rowkey, val);
    59                 }
    60             }
    61         } catch (IOException e) {
    62             e.printStackTrace();
    63             log.info("扫描失败");
    64         } finally {
    65             if (rs != null) {
    66                 rs.close();
    67             }
    68             if (hTable != null) {
    69                 try {
    70                     hTable.close();
    71                 } catch (IOException e) {
    72                     e.printStackTrace();
    73                 }
    74             }
    75         }
    76     }
    View Code
  • 相关阅读:
    C#基础视频教程5.3 如何编写简单的超级热键
    spring boot中注入jpa时报could not autowire.No beans of 'PersonRepository' type found
    SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别
    idea如何搭建springboot框架
    Fiddler建好代理后,能连到手机,但手机不能上网了是什么原因
    如何用Fiddler对Android应用进行抓包
    【fiddler】抓取https数据失败,全部显示“Tunnel to......443”
    将excel的数据导入到数据库后都乱码了是怎么回事
    java保存繁体字到数据库时就报错Incorrect string value: 'xF0xA6x8Dx8BxE5xA4...' for column 'name' at row 1
    将爬取的网页数据保存到数据库时报错不能提交JPA,Caused by: java.sql.SQLException: Incorrect string value: 'xF0x9Fx98xB6 xE2...' for column 'content' at row 1
  • 原文地址:https://www.cnblogs.com/xiefeichn/p/13173794.html
Copyright © 2020-2023  润新知