通过Java Api与HBase交互(转)
生活随笔
收集整理的這篇文章主要介紹了
通过Java Api与HBase交互(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HBase提供了Java Api的訪問接口,掌握這個就跟Java應用使用RDBMS時需要JDBC一樣重要,本文將繼續前兩篇文章中blog表的示例,介紹常用的Api。
import java.io.IOException;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.HTablePool; import org.apache.hadoop.hbase.client.Put; 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.util.Bytes;public class Hbase {// 聲明靜態配置static Configuration conf = null;static {conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "localhost");}/** 創建表* * @tableName 表名* * @family 列族列表*/public static void creatTable(String tableName, String[] family)throws Exception {HBaseAdmin admin = new HBaseAdmin(conf);HTableDescriptor desc = new HTableDescriptor(tableName);for (int i = 0; i < family.length; i++) {desc.addFamily(new HColumnDescriptor(family[i]));}if (admin.tableExists(tableName)) {System.out.println("table Exists!");System.exit(0);} else {admin.createTable(desc);System.out.println("create table Success!");}}/** 為表添加數據(適合知道有多少列族的固定表)* * @rowKey rowKey* * @tableName 表名* * @column1 第一個列族列表* * @value1 第一個列的值的列表* * @column2 第二個列族列表* * @value2 第二個列的值的列表*/public static void addData(String rowKey, String tableName,String[] column1, String[] value1, String[] column2, String[] value2)throws IOException {Put put = new Put(Bytes.toBytes(rowKey));// 設置rowkeyHTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel負責跟記錄相關的操作如增刪改查等//// 獲取表HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 獲取所有的列族 .getColumnFamilies();for (int i = 0; i < columnFamilies.length; i++) {String familyName = columnFamilies[i].getNameAsString(); // 獲取列族名if (familyName.equals("article")) { // article列族put數據for (int j = 0; j < column1.length; j++) {put.add(Bytes.toBytes(familyName),Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));}}if (familyName.equals("author")) { // author列族put數據for (int j = 0; j < column2.length; j++) {put.add(Bytes.toBytes(familyName),Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));}}}table.put(put);System.out.println("add data Success!");}/** 根據rwokey查詢* * @rowKey rowKey* * @tableName 表名*/public static Result getResult(String tableName, String rowKey)throws IOException {Get get = new Get(Bytes.toBytes(rowKey));HTable table = new HTable(conf, Bytes.toBytes(tableName));// 獲取表Result result = table.get(get);for (KeyValue kv : result.list()) {System.out.println("family:" + Bytes.toString(kv.getFamily()));System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));System.out.println("value:" + Bytes.toString(kv.getValue()));System.out.println("Timestamp:" + kv.getTimestamp());System.out.println("-------------------------------------------");}return result;}/** 遍歷查詢hbase表* * @tableName 表名*/public static void getResultScann(String tableName) throws IOException {Scan scan = new Scan();ResultScanner rs = null;HTable table = new HTable(conf, Bytes.toBytes(tableName));try {rs = table.getScanner(scan);for (Result r : rs) {for (KeyValue kv : r.list()) {System.out.println("row:" + Bytes.toString(kv.getRow()));System.out.println("family:"+ Bytes.toString(kv.getFamily()));System.out.println("qualifier:"+ Bytes.toString(kv.getQualifier()));System.out.println("value:" + Bytes.toString(kv.getValue()));System.out.println("timestamp:" + kv.getTimestamp());System.out.println("-------------------------------------------");}}} finally {rs.close();}}/** 遍歷查詢hbase表* * @tableName 表名*/public static void getResultScann(String tableName, String start_rowkey,String stop_rowkey) throws IOException {Scan scan = new Scan();scan.setStartRow(Bytes.toBytes(start_rowkey));scan.setStopRow(Bytes.toBytes(stop_rowkey));ResultScanner rs = null;HTable table = new HTable(conf, Bytes.toBytes(tableName));try {rs = table.getScanner(scan);for (Result r : rs) {for (KeyValue kv : r.list()) {System.out.println("row:" + Bytes.toString(kv.getRow()));System.out.println("family:"+ Bytes.toString(kv.getFamily()));System.out.println("qualifier:"+ Bytes.toString(kv.getQualifier()));System.out.println("value:" + Bytes.toString(kv.getValue()));System.out.println("timestamp:" + kv.getTimestamp());System.out.println("-------------------------------------------");}}} finally {rs.close();}}/** 查詢表中的某一列* * @tableName 表名* * @rowKey rowKey*/public static void getResultByColumn(String tableName, String rowKey,String familyName, String columnName) throws IOException {HTable table = new HTable(conf, Bytes.toBytes(tableName));Get get = new Get(Bytes.toBytes(rowKey));get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 獲取指定列族和列修飾符對應的列Result result = table.get(get);for (KeyValue kv : result.list()) {System.out.println("family:" + Bytes.toString(kv.getFamily()));System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));System.out.println("value:" + Bytes.toString(kv.getValue()));System.out.println("Timestamp:" + kv.getTimestamp());System.out.println("-------------------------------------------");}}/** 更新表中的某一列* * @tableName 表名* * @rowKey rowKey* * @familyName 列族名* * @columnName 列名* * @value 更新后的值*/public static void updateTable(String tableName, String rowKey,String familyName, String columnName, String value)throws IOException {HTable table = new HTable(conf, Bytes.toBytes(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName),Bytes.toBytes(value));table.put(put);System.out.println("update table Success!");}/** 查詢某列數據的多個版本* * @tableName 表名* * @rowKey rowKey* * @familyName 列族名* * @columnName 列名*/public static void getResultByVersion(String tableName, String rowKey,String familyName, String columnName) throws IOException {HTable table = new HTable(conf, Bytes.toBytes(tableName));Get get = new Get(Bytes.toBytes(rowKey));get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));get.setMaxVersions(5);Result result = table.get(get);for (KeyValue kv : result.list()) {System.out.println("family:" + Bytes.toString(kv.getFamily()));System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));System.out.println("value:" + Bytes.toString(kv.getValue()));System.out.println("Timestamp:" + kv.getTimestamp());System.out.println("-------------------------------------------");}/** List<?> results = table.get(get).list(); Iterator<?> it =* results.iterator(); while (it.hasNext()) {* System.out.println(it.next().toString()); }*/}/** 刪除指定的列* * @tableName 表名* * @rowKey rowKey* * @familyName 列族名* * @columnName 列名*/public static void deleteColumn(String tableName, String rowKey,String falilyName, String columnName) throws IOException {HTable table = new HTable(conf, Bytes.toBytes(tableName));Delete deleteColumn = new Delete(Bytes.toBytes(rowKey));deleteColumn.deleteColumns(Bytes.toBytes(falilyName),Bytes.toBytes(columnName));table.delete(deleteColumn);System.out.println(falilyName + ":" + columnName + "is deleted!");}/** 刪除指定的列* * @tableName 表名* * @rowKey rowKey*/public static void deleteAllColumn(String tableName, String rowKey)throws IOException {HTable table = new HTable(conf, Bytes.toBytes(tableName));Delete deleteAll = new Delete(Bytes.toBytes(rowKey));table.delete(deleteAll);System.out.println("all columns are deleted!");}/** 刪除表* * @tableName 表名*/public static void deleteTable(String tableName) throws IOException {HBaseAdmin admin = new HBaseAdmin(conf);admin.disableTable(tableName);admin.deleteTable(tableName);System.out.println(tableName + "is deleted!");}public static void main(String[] args) throws Exception {// 創建表String tableName = "blog2";String[] family = { "article", "author" };// creatTable(tableName, family);// 為表添加數據 String[] column1 = { "title", "content", "tag" };String[] value1 = {"Head First HBase","HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.","Hadoop,HBase,NoSQL" };String[] column2 = { "name", "nickname" };String[] value2 = { "nicholas", "lee" };addData("rowkey1", "blog2", column1, value1, column2, value2);addData("rowkey2", "blog2", column1, value1, column2, value2);addData("rowkey3", "blog2", column1, value1, column2, value2);// 遍歷查詢getResultScann("blog2", "rowkey4", "rowkey5");// 根據row key范圍遍歷查詢getResultScann("blog2", "rowkey4", "rowkey5");// 查詢getResult("blog2", "rowkey1");// 查詢某一列的值getResultByColumn("blog2", "rowkey1", "author", "name");// 更新列updateTable("blog2", "rowkey1", "author", "name", "bin");// 查詢某一列的值getResultByColumn("blog2", "rowkey1", "author", "name");// 查詢某列的多版本getResultByVersion("blog2", "rowkey1", "author", "name");// 刪除一列deleteColumn("blog2", "rowkey1", "author", "nickname");// 刪除所有列deleteAllColumn("blog2", "rowkey1");// 刪除表deleteTable("blog2");} }轉自?http://www.cnblogs.com/NicholasLee/archive/2012/09/14/2684815.html
轉載于:https://www.cnblogs.com/ggjucheng/p/3381328.html
總結
以上是生活随笔為你收集整理的通过Java Api与HBase交互(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众phaston是啥车
- 下一篇: 前端是做什么的(是用来做什么的)