更新时间:2025-07-25 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数据读写样例工程