更新时间:2024-08-03 GMT+08:00
插入HBase数据
功能简介
HBase是一个面向列的数据库,一行数据,可能对应多个列族,而一个列族又可以对应多个列。通常,写入数据的时候,需要指定要写入的列(含列族名称和列名称)。HBase通过HTable的put方法来Put数据,可以是一行数据也可以是数据集。
代码样例
以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseExample”类的testPut方法中。其中,com.huawei.bigdata.hbase.examples包可在获取MRS应用开发样例工程中下载的MRS对应版本的样例工程中获取。
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("Zhang San")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("19")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shenzhen, Guangdong")); puts.add(put); put = new Put(Bytes.toBytes("012005000202")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Li Wanting")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("23")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shijiazhuang, Hebei")); puts.add(put); put = new Put(Bytes.toBytes("012005000203")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Wang Ming")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Ningbo, Zhejiang")); puts.add(put); put = new Put(Bytes.toBytes("012005000204")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Li Gang")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("18")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Xiangyang, Hubei")); puts.add(put); put = new Put(Bytes.toBytes("012005000205")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Zhao Enru")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("21")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shangrao, Jiangxi")); puts.add(put); put = new Put(Bytes.toBytes("012005000206")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Chen Long")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("32")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Zhuzhou, Hunan")); puts.add(put); put = new Put(Bytes.toBytes("012005000207")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Zhou Wei")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("29")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Nanyang, Henan")); puts.add(put); put = new Put(Bytes.toBytes("012005000208")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Yang Yiwen")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("30")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Kaixian, Chongqing")); puts.add(put); put = new Put(Bytes.toBytes("012005000209")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Xu Bing")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Weinan, Shaanxi")); puts.add(put); put = new Put(Bytes.toBytes("012005000210")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("Xiao Kai")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("25")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Dalian, Liaoning")); 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应用