分享知識-快樂本身:HBase編程

HBase編程:

一):大數據(hadoop)初始化環境搭建html

二):大數據(hadoop)環境搭建java

三):運行wordcount案例sql

四):揭祕HDFSshell

五):揭祕MapReduceapache

六):揭祕HBase編程

七):HBase編程windows

-----------------------------------------------------------------安全

HBase JavaAPI概述:

  1.HBase使用Java語言編寫的,天然支持Java編程併發

  2.支持CRUD操做:create read update deleteoop

  3.JavaAPI包含了全部HBase的shell,甚至更多

  4.JavaAPI是訪問HBase的最快方式

JavaAPI程序設計:

一、建立一個Configuration

Configuration conf = HbaseConfiguration.create();

Configuration對象包含了鏈接到HBase服務的信息:zookeeper的位置,鏈接時間等

HbaseConfiguration.create()內部邏輯:

  從CLASSPATH下加載hbase-default.xml和hbase-site.xml文件需將hbase-site.xml放入到CLASSPATH下 hbase-site.xml將覆蓋hbase-default.xml的同名屬性

自定義配置文件,使用Configuration加載

  Configuration newConf = Configuration.create(existingConf);

  用戶自定義的配置文件將在已有配置文件以後加載將覆蓋hbase-default.xml和 hbase-site.xml中的配置

自定義參數值:

Configuration conf=HbaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "admin-01,admin-02"); 

一般不推薦這麼作!

二、建立HTable句柄

  提供Configuration對象和待訪問Table名稱 HTable table = new HTable(conf, tableName);

一個table對應一個HTbale句柄:

  提供了CRUD操做

  設計簡單、使用方便 

  提供行級事務

  不支持多行事務或者表級別的事務 

  嚴格的行一致性 

  併發讀、順序寫

建立HTable句柄代價很大  掃描.META.表等; 

  建立一次,之後儘量複用;

  若是須要建立多個Htable句柄,使用 HTablePool;

  HTable並不是線程安全的  一個線程建立一個便可 

  Htable支持CRUD批處理 

  非線程安全,僅是爲了提升性能

三、執行相應的CRUD操做

  執行put、get、delete、scan等操做

  table.getTableName();

四、關閉HTable句柄

  將內存數據刷新到磁盤上  釋放各類資源

  table.close();

前期工做:

將虛擬主機當中的hbase-site.xmlhdfs-site.xml文件複製到項目下的classpath

修改windows真機的hosts文件,添加三臺機器的映射

導入POM文件:

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>1.3.1</version>
        </dependency>

HBase_API 操做:

package com.gdbd; import java.io.IOException; import java.util.Scanner; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; 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.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; /** * Hello world! * */
public class App { public static void main(String[] args) throws IOException { do { System.out.println("\n\n*********************HBase_API***神碼操做平臺*********************"); System.out.println("一、建立表"); System.out.println("二、向表中添加數據"); System.out.println("三、查詢表中全部數據"); System.out.println("四、查詢表中指定RowKey的全部數據"); System.out.println("五、刪除指定列族的指定列"); System.out.println("六、刪除指定列族"); System.out.println("七、刪除表中指定RowKey的全部數據刪除表中指定RowKey的全部數據"); System.out.println("八、刪除表"); Scanner input = new Scanner(System.in); System.out.println("請輸入......"); int num = input.nextInt(); switch (num) { case 1: demo01(); break; case 2: demo02(); break; case 3: cat(); break; case 4: catRows(); break; case 5: delFamilyColumn(); break; case 6: delFamily(); break; case 7: delRow(); break; case 8: delTable(); break; } } while (true); } /*** * 建立表 * * @throws MasterNotRunningException * @throws ZooKeeperConnectionException * @throws IOException */
    private static void demo01() throws MasterNotRunningException, ZooKeeperConnectionException, IOException { System.out.println("正在 建立表...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); /** * 建立HBaseAdmin對象 此對象 提供了 建表,建立列族,檢查表是否存在,修改表和列族結構,刪除表等功能 HBaseAdmin實例的生命週期不宜太長 */ HBaseAdmin admin = new HBaseAdmin(configuration); if (admin.tableExists("hbase_demo")) { System.out.println("表已經存在!!!"); } else { // 證實表不存在
            HTableDescriptor table = new HTableDescriptor("hbase_demo"); // 建立表的描述對象 // new HColumnDescriptor對象:設置列族的特性
            table.addFamily(new HColumnDescriptor("grade")); table.addFamily(new HColumnDescriptor("course")); // 定義好了表名和列族 能夠建立表
 admin.createTable(table); System.out.println("表建立成功!!!"); } } /*** * 向表中添加數據 * * @throws IOException */
    private static void demo02() throws IOException { System.out.println("正在  向表中添加數據...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立put對象
        Put put = new Put("xiaohei".getBytes()); // xiaohei是 row key
        put.addColumn("course".getBytes(), "java".getBytes(), "90".getBytes()); // course是列族
        put.addColumn("course".getBytes(), "sql".getBytes(), "99".getBytes()); // java 和sql 都是列
        put.addColumn("grade".getBytes(), "one".getBytes(), "1".getBytes()); // 向表中增長數據
 table.put(put); // 關閉table
 table.close(); System.out.println("插入成功......"); } /*** * 查詢表數據 * * @throws IOException */
    private static void cat() throws IOException { System.out.println("正在  查詢表數據...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立ResultScanner對象
        ResultScanner rs = table.getScanner(new Scan()); for (Result r : rs) { System.out.println("***************************Result Start***************************"); for (Cell cell : r.rawCells()) { System.out.println("=======================start============================"); System.out.println("RowKey(行鍵)===>" + Bytes.toString(r.getRow())); System.out.println("family(列族)===>" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("column(列)===>" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("value(值)===>" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("=========================END=========================="); } System.out.println("****************************Result END****************************"); } // 關閉table
 table.close(); System.out.println("表數據查詢成功..."); } /*** * 查詢表中指定RowKey的全部數據 * * @throws IOException */
    private static void catRows() throws IOException { System.out.println("正在  查詢表中指定RowKey的全部數據...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立get對象 獲取全部rowkey是xiaohei的全部數據
        Get get = new Get(Bytes.toBytes("xiaohei")); Result result = table.get(get); for (Cell cell : result.rawCells()) { System.out.println("=======================start============================"); System.out.println("RowKey(行鍵)===>" + Bytes.toString(result.getRow())); System.out.println("family(列族)===>" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("column(列)===>" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("value(值)===>" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("=========================END==========================\n"); } // 關閉table
 table.close(); System.out.println("成功 查詢表中指定RowKey的全部數據"); } /*** * 刪除表中指定RowKey的全部數據 * * @throws IOException */
    private static void delRow() throws IOException { System.out.println("正在刪除表中指定RowKey的全部數據...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立delete對象
        Delete delete = new Delete(Bytes.toBytes("xiaohei")); table.delete(delete); // 關閉table
 table.close(); System.out.println("成功刪除表中指定RowKey的全部數據..."); } /*** * 刪除指定列族的指定列 * * @throws IOException */
    private static void delFamilyColumn() throws IOException { System.out.println("正在 刪除指定列族的指定列...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立delete對象
        Delete delete = new Delete(Bytes.toBytes("xiaobaibai"));// 指定的
        delete.addColumn(Bytes.toBytes("course"), Bytes.toBytes("java")); table.delete(delete); // 關閉table
 table.close(); System.out.println("成功 刪除指定列族的指定列..."); } /*** * 刪除指定列族的 * * @throws IOException */
    private static void delFamily() throws IOException { System.out.println("正在 刪除指定列族...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HTable對象
        HTable table = new HTable(configuration, "hbase_demo"); // 建立delete對象
        Delete delete = new Delete(Bytes.toBytes("xiaobaibai"));// 指定的
        delete.addFamily("course".getBytes()); table.delete(delete); // 關閉table
 table.close(); System.out.println("成功 刪除指定列族..."); } /*** * 刪除表 * * @throws MasterNotRunningException * @throws ZooKeeperConnectionException * @throws IOException */
    private static void delTable() throws MasterNotRunningException, ZooKeeperConnectionException, IOException { System.out.println("正在 刪除表...\n"); // 建立一個Configuration對象
        Configuration configuration = HBaseConfiguration.create(); // 建立HAdmin對象
        HBaseAdmin admin = new HBaseAdmin(configuration); admin.disableTable("hbase_demo");// 禁用表
        admin.deleteTable("hbase_demo");// 刪除表 // 關閉admin對象
 admin.close(); System.out.println("成功 刪除表..."); } }
相關文章
相關標籤/搜索