生活随笔
收集整理的這篇文章主要介紹了
HBase总结(十二)Java API 与HBase交互实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HBase提供了Java Api的訪問接口,掌握這個就跟Java應用使用RDBMS時需要JDBC一樣重要
[html]?view plaincopy
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));//?設置rowkey?? ????????HTable?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");?? ?? ????}?? }??
總結
以上是生活随笔為你收集整理的HBase总结(十二)Java API 与HBase交互实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。