软件工程学习日志2025.9.18

今日重点设计了HBase后端数据插入模块,基于Java API实现了高性能的写入方案。以下为关键代码实现及技术要点:
HBase数据插入工具类
支持单条插入和批量写入操作
public class HBaseInserter {
private static final Logger logger = LoggerFactory.getLogger(HBaseInserter.class);

/**
 * 单条数据插入方法
 * @param tableName 表名
 * @param rowKey 行键
 * @param columnFamily 列族
 * @param qualifier 列限定符
 * @param value 数据值
 */
public void insertData(String tableName, String rowKey, 
                      String columnFamily, String qualifier, String value) 
                      throws IOException {
    
    try (Connection connection = ConnectionFactory.createConnection();
         Table table = connection.getTable(TableName.valueOf(tableName))) {
        
        Put put = new Put(Bytes.toBytes(rowKey));
        put.addColumn(Bytes.toBytes(columnFamily),
                     Bytes.toBytes(qualifier),
                     Bytes.toBytes(value));
        
        table.put(put);
        logger.info("数据插入成功 - RowKey: {}", rowKey);
        
    } catch (IOException e) {
        logger.error("HBase插入失败: {}", e.getMessage());
        throw new IOException("数据写入HBase失败", e);
    }
}

/**
 * 批量插入数据
 * @param tableName 表名
 * @param dataList 数据列表
 */
public void batchInsert(String tableName, List<HBaseData> dataList) 
                       throws IOException {
    
    try (Connection connection = ConnectionFactory.createConnection();
         Table table = connection.getTable(TableName.valueOf(tableName))) {
        
        List<Put> puts = new ArrayList<>();
        for (HBaseData data : dataList) {
            Put put = new Put(Bytes.toBytes(data.getRowKey()));
            put.addColumn(Bytes.toBytes(data.getColumnFamily()),
                         Bytes.toBytes(data.getQualifier()),
                         Bytes.toBytes(data.getValue()));
            puts.add(put);
        }
        
        table.put(puts);
        logger.info("批量插入完成,共{}条数据", dataList.size());
        
    } catch (IOException e) {
        logger.error("批量插入失败: {}", e.getMessage());
        throw new IOException("批量写入HBase失败", e);
    }
}

}

/**

  • 数据实体类
    */
    @Data
    @AllArgsConstructor
    class HBaseData {
    private String rowKey;
    private String columnFamily;
    private String qualifier;
    private String value;
    }
posted @ 2025-09-18 23:25  仙人兵马俑  阅读(5)  评论(0)    收藏  举报