這篇文章主要介紹了HBase如何進(jìn)行編程,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站從2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元容城做網(wǎng)站,已為上家服務(wù),為容城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575
1,在Eclipse中新建一個(gè)Java Project,命名為HBaseTest,然后右鍵Properties中選擇Java Build Path,選擇Add External Jars,將HBase/lib目錄下的jar包導(dǎo)入進(jìn)來(lái)。
2,在工程根目錄下創(chuàng)建Conf文件夾,將HBase/Conf下的hbase-site.xml文件復(fù)制到該文件夾中,通過(guò)右鍵選擇Properties->Java BuildPath->Libraries->Add Class Folder,然后選擇Conf文件夾即可。
1, HbaseConfiguration
關(guān)系:org.apache.hadoop.hbase.HBaseConfiguration
作用:通過(guò)此類(lèi)可以對(duì)HBase進(jìn)行配置
2, HBaseAdmin
關(guān)系:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供一個(gè)接口來(lái)管理HBase數(shù)據(jù)庫(kù)中的表信息。它提供創(chuàng)建表、刪除表等方法。
3, HTableDescriptor
關(guān)系:org.apache.hadoop.hbase.client.HTableDescriptor
作用:包含了表的名字及其對(duì)應(yīng)列族。 提供的方法有
void addFamily(HColumnDescriptor) 添加一個(gè)列族
HColumnDescriptor removeFamily(byte[] column) 移除一個(gè)列族
byte[] getName() 獲取表的名字
byte[] getValue(byte[] key) 獲取屬性的值
void setValue(String key,Stringvalue) 設(shè)置屬性的值
4, HColumnDescriptor
關(guān)系:org.apache.hadoop.hbase.client.HColumnDescriptor
作用:維護(hù)關(guān)于列的信息。提供的方法有
byte[] getName() 獲取列族的名字
byte[] getValue() 獲取對(duì)應(yīng)的屬性的值
void setValue(String key,String value)設(shè)置對(duì)應(yīng)屬性的值
5, HTable
關(guān)系:org.apache.hadoop.hbase.client.HTable
作用:用戶(hù)與HBase表進(jìn)行通信。此方法對(duì)于更新操作來(lái)說(shuō)是非線(xiàn)程安全的,如果啟動(dòng)多個(gè)線(xiàn)程嘗試與單個(gè)HTable實(shí)例進(jìn)行通信,那么寫(xiě)緩沖器可能會(huì)崩潰。
6, Put
關(guān)系:org.apache.hadoop.hbase.client.Put
作用:用于對(duì)單個(gè)行執(zhí)行添加操作
7, Get
關(guān)系:org.apache.hadoop.hbase.client.Get
作用:用于獲取單個(gè)行的相關(guān)信息
8, Result
關(guān)系:org.apache.hadoop.hbase.client.Result
作用:存儲(chǔ)Get或Scan操作后獲取的單行值。
9, ResultScanner
關(guān)系:Interface
作用:客戶(hù)端獲取值的接口。
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.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.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; /* * @author minglaihan */ public class HBaseTest { static Configuration cfg = HBaseConfiguration.create(); //通過(guò)HBaseAdmin HTableDescriptor來(lái)創(chuàng)建一個(gè)新表 public static void create(String tableName, String columnFamily) throws Exception{ HBaseAdmin admin = new HBaseAdmin(cfg); if(admin.tableExists(tableName)){ System.out.println("Table exist"); System.exit(0); } else { HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); tableDescriptor.addFamily(new HColumnDescriptor(columnFamily)); admin.createTable(tableDescriptor); System.out.println("Table create success"); } } //添加一條數(shù)據(jù),通過(guò)HTable Put為已存在的表添加數(shù)據(jù) public static void put(String tableName,String row,String columnFamily,String column,String data) throws IOException{ HTable table = new HTable(cfg, tableName); Put put = new Put(Bytes.toBytes(row)); put.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(data)); table.put(put); System.out.println("put success"); } //獲取tableName表里列為row的結(jié)果集 public static void get(String tableName,String row) throws IOException{ HTable table = new HTable(cfg, tableName); Get get = new Get(Bytes.toBytes(row)); Result result = table.get(get); System.out.println("get "+ result); } //通過(guò)HTable Scan來(lái)獲取tableName表的所有數(shù)據(jù)信息 public static void scan (String tableName) throws IOException{ HTable table = new HTable(cfg, tableName); Scan scan = new Scan(); ResultScanner resultScanner = table.getScanner(scan); for(Result s:resultScanner){ System.out.println("Scan "+ resultScanner); } } public static boolean delete(String tableName) throws Exception{ HBaseAdmin admin = new HBaseAdmin(cfg); if(admin.tableExists(tableName)){ try { admin.disableTable(tableName); admin.deleteTable(tableName); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return false; } } return true; } public static void main(String[] args) { String tableName = "hbase_test"; String columnFamily = "c1"; try { HBaseTest.create(tableName, columnFamily); HBaseTest.put(tableName, "row1", columnFamily, "column1", "data1"); HBaseTest.get(tableName, "row1"); HBaseTest.scan(tableName); if(HBaseTest.delete(tableName)==true){ System.out.println("delete table "+ tableName+"success"); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
將Delete的步驟注釋掉的運(yùn)行結(jié)果截圖:
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“HBase如何進(jìn)行編程”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!