某佰的教程太老了,不少都是過期的API,一些方法在eclipse中顯示都帶有橫劃線的,看的很髒亂,並且還有印刷錯誤,故花了幾天時間四處蒐羅資料把Hbase1.x的API整理了一下 ,本文的java程序所有基於HBase client 1.x以上版本 寫了一套example分門別類的列出來給你們分享(帶有詳細中文註釋) java
package com.chenjun.hbtest.example.alter; 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.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API添加一列族 * 下面給出的是一個完整的程序,用於添加一列族到現有的表。 * @author CJ */ public class AddColoumn { public static void main(String[] args) throws MasterNotRunningException, IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 初始化列描述對象 HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails"); // 添加一個列族 admin.addColumn(TableName.valueOf("employee"), columnDescriptor); System.out.println("coloumn added"); } }
package com.chenjun.hbtest.example.alter; import java.io.IOException; import java.nio.charset.Charset; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * @author CJ * * 使用Java API刪除列族 * 可使用HBAseAdmin類的deleteColumn()方法刪除列族。按照下面給出的步驟添加一個列族到表中。 */ public class DeleteColoumn { public static void main(String[] args) throws MasterNotRunningException, IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 使用deleteColumn()方法delete列族。傳遞表名和列族名做爲這個方法的參數。 admin.deleteColumn(TableName.valueOf("TableName"), "contactDetails".getBytes(Charset.forName("UTF-8"))); System.out.println("列族已刪除"); } }
package com.chenjun.hbtest.example.alter; 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.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API建立一個表 * 可使用HBaseAdmin類的createTable()方法建立表在HBase中。 * 這個類屬於org.apache.hadoop.hbase.client 包。下面給出的步驟是來使用Java API建立表在HBase中。 * * @author CJ */ public class CreateTable { public static void main(String[] args) throws IOException, ServiceException { //new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); //初始化表描述 HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("emp")); //給表描述對象增長列族 tableDescriptor.addFamily(new HColumnDescriptor("personal")); tableDescriptor.addFamily(new HColumnDescriptor("professional")); //讓admin根據tableDescriptor執行建表操做 admin.createTable(tableDescriptor); System.out.println("hbase表建立成功! 表名爲emp,列族有personal , professional"); } }
package com.chenjun.hbtest.example.alter; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API刪除表 在刪除一個表以前必須先將其禁用。 * * @author CJ */ public class DeleteTable { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 禁用 admin.disableTable(TableName.valueOf("emp")); // 刪除 admin.deleteTable(TableName.valueOf("emp12")); System.out.println("Table deleted"); } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.util.Bytes; import com.google.protobuf.ServiceException; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; /** * 使用Java API掃描 * 使用Java API掃描整個表的數據的完整程序以下: * * @author CJ */ public class FullScanTable { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 用表名實例化HTable對象 String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } Scan scan = new Scan(); // 掃描須要的列族和列 scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name")); scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("city")); // 獲取掃描結果 ResultScanner scanner = hTable.getScanner(scan); // 遍歷scan結果 for (Result result = scanner.next(); result != null; result = scanner.next()) { System.out.println("Found row : " + result); } scanner.close(); } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; 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; import com.google.protobuf.ServiceException; /** * 用JAVA API經過行鍵範圍掃描HBase的操做 * @author CJ */ public class RangeScanTable { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 用表名實例化HTable對象 String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } //行鍵的開始值 String beginRowKey = "1"; //行鍵的結束值 String endRowKey = "2"; Scan scan = new Scan(Bytes.toBytes(beginRowKey), Bytes.toBytes(endRowKey)); ResultScanner result = hTable.getScanner(scan); for (Result item : result) { String rowKey = Bytes.toString(item.getRow()); //參數:列族,列名 List<Cell> cells = item.getColumnCells(Bytes.toBytes("self"), Bytes.toBytes("name")); //最新的值排在前面,因此取cells的第一個元素 System.out.println("rowKey:"+rowKey+" "+"cell:"+cells.get(0)); } } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; 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.util.Bytes; import com.google.protobuf.ServiceException; /** * 使用Java API插入數據 * 可使用Put 類的add()方法將數據插入到HBase。 * 可使用HTable類的put()方法保存數據。這些類屬於org.apache.hadoop.hbase.client包 * * @author CJ */ public class InsertData { public static void main(String[] args) throws IOException, ServiceException { //new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } // 用rowKey實例化Put類 Put p = new Put(Bytes.toBytes("row1")); //參數:列族,列名,列值 p.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"), Bytes.toBytes("raju")); p.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("city"), Bytes.toBytes("hyderabad")); p.addColumn(Bytes.toBytes("professional"), Bytes.toBytes("designation"), Bytes.toBytes("manager")); p.addColumn(Bytes.toBytes("professional"), Bytes.toBytes("salary"), Bytes.toBytes("50000")); hTable.put(p); System.out.println("data inserted"); hTable.close(); } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; 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.Result; import org.apache.hadoop.hbase.util.Bytes; import com.google.protobuf.ServiceException; /** * 使用Java API讀取數據 從一個HBase表中讀取數據,要使用HTable類的get()方法。這種方法須要Get類的一個實例 * * @author CJ */ public class ReadData { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 用表名實例化HTable對象 String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } // 用RowKey實例化Get對象 Get g = new Get(Bytes.toBytes("row1")); // 讀取數據 Result result = hTable.get(g); // 根據列族和列取出數據 byte[] value = result.getValue(Bytes.toBytes("personal"), Bytes.toBytes("name")); byte[] value1 = result.getValue(Bytes.toBytes("personal"), Bytes.toBytes("city")); //byte[]轉String String name = Bytes.toString(value); String city = Bytes.toString(value1); //打印輸出結果 System.out.println("name: " + name + " city: " + city); } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; 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.util.Bytes; import com.google.protobuf.ServiceException; /** * 使用Java API更新數據 使用put()方法將特定單元格更新數據 * * @author CJ */ public class UpdateData { public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, ServiceException, IOException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } // 用rowKey實例化Put對象 Put p = new Put(Bytes.toBytes("row1")); p.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("city"), Bytes.toBytes("Delih")); hTable.put(p); System.out.println("data Updated"); //關閉表 hTable.close(); } }
package com.chenjun.hbtest.example.crud; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.util.Bytes; import com.google.protobuf.ServiceException; /** * 使用Java API刪除數據 能夠從使用HTable類的delete()方法刪除HBase表數據 * * @author CJ */ public class DeleteData { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 用表名實例化HTable對象 String tableName = "emp"; TableName tn = TableName.valueOf(tableName); HTable hTable = null; if (admin.tableExists(tn)) { hTable = (HTable) conn.getTable(tn); } else { System.err.println("此表不存在"); System.exit(-1); } // 用rowKey實例化Delete對象 Delete delete = new Delete(Bytes.toBytes("row1")); //制定要刪除的列族和列 delete.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name")); delete.addFamily(Bytes.toBytes("professional")); // 執行刪除 hTable.delete(delete); // closing the HTable object hTable.close(); System.out.println("data deleted....."); } }
package com.chenjun.hbtest.example.other; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 禁用表使用Java API 要驗證一個表是否被禁用,使用isTableDisabled()方法 和disableTable()方法禁用一個表。 * 這些方法屬於HBaseAdmin類。 * * @author CJ */ public class DisableTable { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 檢查表是否禁用。 Boolean bool = admin.isTableDisabled(TableName.valueOf("emp")); System.out.println(bool); // 使用HBaseAdmin對象禁用表。 if (!bool) { admin.disableTable(TableName.valueOf("emp")); System.out.println("表[emp]已經被禁用"); } } }
package com.chenjun.hbtest.example.other; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API啓用表 * 要驗證一個表是否被啓用,使用isTableEnabled()方法;而且使用enableTable()方法使一個表啓用。 * 這些方法屬於HBaseAdmin類。按照下面給出啓用表的步驟。 * * @author CJ */ public class EnableTable { public static void main(String[] args) throws MasterNotRunningException, IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 檢查表是否啓用。 Boolean bool = admin.isTableEnabled(TableName.valueOf("emp")); System.out.println(bool); // Disabling the table using HBaseAdmin object if (!bool) { admin.enableTable(TableName.valueOf("emp")); System.out.println("Table[emp]已經啓用"); } } }
package com.chenjun.hbtest.example.other; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API列出表 * 按照下面給出的步驟來使用Java API從HBase得到表的列表。 * * @author CJ */ public class ListTables { public static void main(String[] args) throws IOException, ServiceException { //new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); //根據admin獲取表描述 HTableDescriptor[] tableDescriptor = admin.listTables(); //打印全部的表名 for (int i = 0; i < tableDescriptor.length; i++) { System.out.println(tableDescriptor[i].getNameAsString()); } } }
package com.chenjun.hbtest.example.other; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API驗證表的存在 * 可使用HBaseAdmin類的tableExists()方法驗證表在HBase中是否存在。按照下面給出的步驟驗證HBase表存在。 * * @author CJ */ public class TableExists { public static void main(String[] args) throws IOException, ServiceException{ // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 驗證表是否存在 boolean bool = admin.tableExists(TableName.valueOf("emp")); System.out.println(bool); } }
package com.chenjun.hbtest.example.other; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; import com.google.protobuf.ServiceException; /** * 使用Java API中止HBase * 可使用HBaseAdmin類的shutdown()方法關閉HBase。按照下面給出關閉HBase的步驟 * * @author CJ */ public class ShutDownHbase { public static void main(String[] args) throws IOException, ServiceException { // new一個配置對象 Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HBaseAdmin.checkHBaseAvailable(conf); Admin admin = conn.getAdmin(); // 中止Hbase System.out.println("Shutting down hbase"); admin.shutdown(); } }