用java操作hbase,hbase1.2.4新版对api做了很多调整,当然原来的api也能用,只是会提示你is deprecated,对象上还会被划一道横线,看着不爽,旧api早晚会淘汰,所以有必要使用新api:
1.代码如下
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by hasee on 2017/3/3. */ public class HBaseDao { public static Configuration conf; public static Connection connection; static{ Configuration HBASE_CONFIG=new Configuration(); HBASE_CONFIG.set("hbase.zookeeper.quorum","192.168.73.1,192.168.73.2,192.168.73.3"); HBASE_CONFIG.set("hbase.zookeeper.property.clientPort","2181"); conf= HBaseConfiguration.create(HBASE_CONFIG); try { connection=ConnectionFactory.createConnection(conf); } catch (IOException e) { e.printStackTrace(); } } /** * 创建表 * @param tableName * @param familys * @throws IOException */ public static void createTable(String tableName,String[] familys) throws IOException { //HBaseAdmin admin=new HBaseAdmin(conf); // Connection connection= ConnectionFactory.createConnection(conf); Admin admin=connection.getAdmin(); if(admin.tableExists(TableName.valueOf(tableName))){ System.out.println("table already exists!"); }else { HTableDescriptor tableDescriptor=new HTableDescriptor(TableName.valueOf(tableName)); for(int i=0;i<familys.length;i++){ tableDescriptor.addFamily(new HColumnDescriptor(familys[i])); } admin.createTable(tableDescriptor); System.out.println("create table "+tableName+" ok."); } } /** * 删除表 * @param tableName * @throws IOException */ public static void deleteTable(String tableName) throws Exception { try { Admin admin=connection.getAdmin(); admin.disableTable(TableName.valueOf(tableName)); admin.deleteTable(TableName.valueOf(tableName)); System.out.println("delete table "+tableName+" ok."); } catch (MasterNotRunningException e) { e.printStackTrace(); }catch (ZooKeeperConnectionException e){ e.printStackTrace(); } } /** * 插入数据 * @param tableName * @param rowKey * @param family * @param qualifier * @param value * @throws Exception */ public static void addRecord(String tableName,String rowKey,String family,String qualifier,String value) throws Exception { try { Table table=connection.getTable(TableName.valueOf(tableName)); Put put=new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value)); table.put(put); System.out.println("insert record "+rowKey+" to table "+tableName+" ok."); } catch (IOException e) { e.printStackTrace(); } } /** * 获取数据 * @param tableName * @param rowKey * @throws Exception */ public static void getOneRecord(String tableName,String rowKey) throws IOException { Table table=connection.getTable(TableName.valueOf(tableName)); Get get=new Get(rowKey.getBytes()); Result rs=table.get(get); for(Cell cell:rs.rawCells()){ System.out.println(new String(cell.getRowArray())+" "); System.out.println(new String(cell.getFamilyArray())+":"); System.out.println(new String(cell.getQualifierArray())+" "); System.out.println(cell.getTimestamp()+" "); System.out.println(new String(cell.getValueArray())+" "); } } /** * 浏览每一行 * @param tableName */ public static void getAllRecord(String tableName) { try { Table table=connection.getTable(TableName.valueOf(tableName)); Scan scan=new Scan(); ResultScanner rs=table.getScanner(scan); for (Result r:rs) { for (Cell cell : r.rawCells()) { System.out.println(new String(cell.getRowArray()) + " "); System.out.println(new String(cell.getFamilyArray()) + ":"); System.out.println(new String(cell.getQualifierArray()) + " "); System.out.println(cell.getTimestamp() + " "); System.out.println(new String(cell.getValueArray()) + " "); } } } catch (IOException e) { e.printStackTrace(); } } public static void deleteRecord(String tableName,String rowKey) throws IOException { Table table=connection.getTable(TableName.valueOf(tableName)); List list=new ArrayList(); Delete delete=new Delete(rowKey.getBytes()); list.add(delete); table.delete(list); System.out.println("delete record "+rowKey+" ok."); } public static void main(String[] args) throws Exception { HBaseDao hBaseDao=new HBaseDao(); //hBaseDao.createTable("hello",new String[]{"ai","bi"}); //hBaseDao.addRecord("hello","row2","bi","521","yangqing"); //hBaseDao.getOneRecord("hello","row2"); //hBaseDao.getAllRecord("hello"); hBaseDao.deleteRecord("hello","row1"); } }
2.另外我是在idea中的maven项目中开发的,下面贴上java操作hbase的maven依赖:
<dependencies> <!--Hadoop main artifact--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-common</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.4</version> </dependency> <!--Unit test artifacts--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.8</version> </dependency> </dependencies>