向HBase表中插入数据
功能简介
HBase是一个面向列的数据库,一行数据,可能对应多个列族,而一个列族又可以对应多个列。通常,写入数据的时候,需要指定要写入的列(含列族名称和列名称)。HBase通过HTable的put方法来Put数据,可以是一行数据也可以是数据集。
代码样例
以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseSample”类的testPut方法中。
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 = putData(familyName, qualifiers,
Arrays.asList("012005000201", "Zhang San", "Male", "19", "Shenzhen, Guangdong"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000202", "Li Wanting", "Female", "23", "Shijiazhuang, Hebei"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000203", "Wang Ming", "Male", "26", "Ningbo, Zhejiang"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000204", "Li Gang", "Male", "18", "Xiangyang, Hubei"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000205", "Zhao Enru", "Female", "21", "Shangrao, Jiangxi"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000206", "Chen Long", "Male", "32", "Zhuzhou, Hunan"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000207", "Zhou Wei", "Female", "29", "Nanyang, Henan"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000208", "Yang Yiwen", "Female", "30", "Kaixian, Chongqing"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000209", "Xu Bing", "Male", "26", "Weinan, Shaanxi"));
puts.add(put);
put = putData(familyName, qualifiers,
Arrays.asList("012005000210", "Xiao Kai", "Male", "25", "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实例,不应该被多个线程同时使用,否则可能会带来并发问题。