软件工程学习日志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 dataList)
throws IOException {

try (Connection connection = ConnectionFactory.createConnection();
Table table = connection.getTable(TableName.valueOf(tableName))) {

List 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  仙人兵马俑  阅读(22)  评论(0)    收藏  举报