软件工程学习日志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;
}