import java.io.IOException; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.util.Map; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.util.*; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.MasterNotRunningException; //import org.apache.hadoop.hbase.ZooKeeperConnectionException; public class HBaseHandler { private static HBaseConfiguration conf = null; /** * 初始化配置 */ static { //conf = HBaseConfiguration.create(); conf = new HBaseConfiguration(); conf.addResource("hbase-site.xml"); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub System.out.println("Helloworld"); String[] cfs; cfs = new String[1]; cfs[0] = "Hello"; createTable("Test",cfs); } /** * 创建表操作 * @throws IOException */ public static void createTable(String tablename, String[] cfs) throws IOException { HBaseAdmin admin = new HBaseAdmin(conf); if (admin.tableExists(tablename)) { System.out.println("表已经存在!"); } else { HTableDescriptor tableDesc = new HTableDescriptor(tablename); for (int i = 0; i < cfs.length; i ) { tableDesc.addFamily(new HColumnDescriptor(cfs[i])); } admin.createTable(tableDesc); System.out.println("表创建成功!"); } } /** * 删除表操作 * @param tablename * @throws IOException */ public static void deleteTable(String tablename) throws IOException { try { HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tablename); admin.deleteTable(tablename); System.out.println("表删除成功!"); } catch (MasterNotRunningException e) { e.printStackTrace(); } } /** * 插入一行记录 * @param tablename * @param cfs */ public static void writeRow(String tablename, String[] cfs) { try { HTable table = new HTable(conf, tablename); Put put = new Put(Bytes.toBytes("rows1")); for (int j = 0; j < cfs.length; j ) { put.add(Bytes.toBytes(cfs[j]), Bytes.toBytes(String.valueOf(1)), Bytes.toBytes("value_1")); table.put(put); } } catch (IOException e) { e.printStackTrace(); } } /** * 删除一行记录 * @param tablename * @param rowkey * @throws IOException */ public static void deleteRow(String tablename, String rowkey) throws IOException { HTable table = new HTable(conf, tablename); List list = new ArrayList(); Delete d1 = new Delete(rowkey.getBytes()); list.add(d1); table.delete(d1); System.out.println("删除行成功!"); } /** * 查找一行记录 * @param tablename * @param rowkey */ public static void selectRow(String tablename, String rowKey) throws IOException { HTable table = new HTable(conf, tablename); Get g = new Get(rowKey.getBytes()); Result rs = table.get(g); for (KeyValue kv : rs.raw()) { System.out.print(new String(kv.getRow()) " "); System.out.print(new String(kv.getFamily()) ":"); System.out.print(new String(kv.getQualifier()) " "); System.out.print(kv.getTimestamp() " "); System.out.println(new String(kv.getValue())); } } /** * 查询表中所有行 * @param tablename */ public static void scaner(String tablename) { try { HTable table = new HTable(conf, tablename); Scan s = new Scan(); ResultScanner rs = table.getScanner(s); for (Result r : rs) { KeyValue[] kv = r.raw(); for (int i = 0; i < kv.length; i ) { System.out.print(new String(kv[i].getRow()) " "); System.out.print(new String(kv[i].getFamily()) ":"); System.out.print(new String(kv[i].getQualifier()) " "); System.out.print(kv[i].getTimestamp() " "); System.out.println(new String(kv[i].getValue())); } } } catch (IOException e) { e.printStackTrace(); } } }
说明: HBaseConfiguration: 用于告诉client如何连接,连接到哪个HBase的服务器上。 HTable:代表一个HBase表格。 BatchUpdate:用于表格中一行的更新。包括添加某个列,修改某列的值,删除某列等。 commit:table的一个方法。代表某个BatchUpdate操作可以生效了。类似于数据库中的commit操作。
Cell:table中对应某个(行key, 列值,时间戳)下的单元格值。 获取Cell的方法。For example: table.get("myRow", "myColumnFamily:columnQualifier1");
scanner:用于遍历表格。 rowResult:遍历过程当中保存某行信息。