更新时间:2025-11-04 GMT+08:00
插入HBase数据
功能简介
HBase是一个面向列的数据库,一行数据,可能对应多个列族,而一个列族又可以对应多个列。
通常,写入数据的时候,需要指定要写入的列(含列族名称和列名称)。
HBase通过HTable的put方法来Put数据,可以是一行数据也可以是数据集。
代码样例
public void testPut() {
LOG.info("Entering testPut.");
// Specify the column family name.
byte[] familyName = Bytes.toBytes("info");
// Specify the column name.
byte[][] qualifiers = { Bytes.toBytes("name"), Bytes.toBytes("gender"),
Bytes.toBytes("age"), Bytes.toBytes("address") };
Table table = null;
try {
// Instantiate an HTable object.
table = conn.getTable(tableName);
List<Put> puts = new ArrayList<Put>();
// Instantiate a Put object.
Put put = new Put(Bytes.toBytes("012005000201"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("A"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("19"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPA, IPB"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000202"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("B"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("23"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPC, IPD"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000203"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("C"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPE, IPF"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000204"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("D"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("18"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPG, IPH"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000205"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("E"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("21"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPI, IPJ"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000206"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("F"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("32"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPK, IPL"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000207"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("G"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("29"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPM, IPN"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000208"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("H"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("30"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPO, IPP"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000209"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("I"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPQ, IPR"));
puts.add(put);
put = new Put(Bytes.toBytes("012005000210"));
put.addColumn(familyName, qualifiers[0], Bytes.toBytes("J"));
put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male"));
put.addColumn(familyName, qualifiers[2], Bytes.toBytes("25"));
put.addColumn(familyName, qualifiers[3], Bytes.toBytes("IPS, IPT"));
puts.add(put);
// Submit a put request.
table.put(puts);
LOG.info("Put successfully.");
} catch (IOException e) {
LOG.error("Put failed " ,e);
} finally {
if (table != null) {
try {
// Close the HTable object.
table.close();
} catch (IOException e) {
LOG.error("Close table failed " ,e);
}
}
}
LOG.info("Exiting testPut.");
}
注意事项
不允许多个线程在同一时间共用同一个HTable实例。HTable是一个非线程安全类,因此,同一个HTable实例,不应该被多个线程同时使用,否则可能会带来并发问题。
父主题: HBase数据读写样例工程