四):揭祕HDFSshell
五):揭祕MapReduceapache
七):HBase編程windows
-----------------------------------------------------------------安全
1.HBase使用Java語言編寫的,天然支持Java編程併發
2.支持CRUD操做:create read update deleteoop
3.JavaAPI包含了全部HBase的shell,甚至更多
4.JavaAPI是訪問HBase的最快方式
一、建立一個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");
一般不推薦這麼作!
提供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.xml和hdfs-site.xml文件複製到項目下的classpath下
修改windows真機的hosts文件,添加三臺機器的映射
<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>
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("成功 刪除表..."); } }