HBaseAPI

1. 环境准备

新建项目后在pom.xml中添加依赖:

<dependency>

    <groupId>org.apache.hbase</groupId>

    <artifactId>hbase-server</artifactId>

    <version>1.3.1</version>

</dependency>

<dependency>

    <groupId>org.apache.hbase</groupId>

    <artifactId>hbase-client</artifactId>

    <version>1.3.1</version>

</dependency>

<dependency>

        <groupId>jdk.tools</groupId>

        <artifactId>jdk.tools</artifactId>

        <version>1.8</version>

        <scope>system</scope>

        <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>

</dependency>

2. 获取Configuration对象和HBaseaAdmin

private static ThreadLocal<Admin> adminTLocal = new ThreadLocal<Admin>();
private static ThreadLocal<Connection> connectTLocal = new ThreadLocal<Connection>();

    /**
	 * 获取HbaseConnect
	 * 解耦Connect
	 */
	public static Connection getConnect() {
		Configuration conf = HBaseConfiguration.create();
		
		try {
			Connection connect = ConnectionFactory.createConnection(conf);
			//将connect放入connectTLocal
			connectTLocal.set(connect);
			System.out.println("链接"+connect);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return connectTLocal.get();
		
	}


    /**
	 * 获取HBaseaAdmin
	 */
	public static Admin getAdmin() {				
		Admin admin = null;
		getConnect();
		try {
			admin = connectTLocal.get().getAdmin();
			System.out.println("Admin"+admin);
			//将admin放入AdminTlocal
			adminTLocal.set(admin);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return adminTLocal.get();
	}

3. 判断表是否存在

/**
	 * 判断表是否存在
	 * @param tableName
	 * @return
	 * @throws Exception
	 */
	public static boolean isTableExits(String tableName) throws Exception {
		
		boolean result = adminTLocal.get().tableExists(TableName.valueOf(tableName));
		return result;
	}

4. 创建表

	/**
	 * 创建表
	 * @param tableName 表名
	 * @param columnFamily 列族名
	 * @param columnFamilys 列族名(多个)
	 * @throws Exception
	 */
	public static void createTable(String tableName , String columnFamily ,String... columnFamilys) throws Exception {
		
			HTableDescriptor hTableDes = new HTableDescriptor(TableName.valueOf(tableName));
			HColumnDescriptor hColumnDes = new HColumnDescriptor(columnFamily);
			hTableDes.addFamily(hColumnDes);
			
			for (String singleColumnFamily : columnFamilys) {
				HColumnDescriptor singleHColumnDes = new HColumnDescriptor(singleColumnFamily);
				hTableDes.addFamily(singleHColumnDes);
				
			}
			
			adminTLocal.get().createTable(hTableDes);
			System.out.println("表"+tableName+"创建成功");
		
	}

5. 添加/修改一条数据

/**
	 * 添加/修改一条数据
	 * @param tableName 表名
	 * @param rowkey 行数
	 * @param columnFamily 列族
	 * @param column 列族名
	 * @param value 值
	 * @throws IOException
	 */
	public static void putDate(String tableName , String rowkey , String columnFamily , String column , String value) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		
		Put put = new Put(Bytes.toBytes(rowkey));
		
		put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
		
		table.put(put);
		
	}

6. 删除一条数据的一个版本

/**
	 * 删除一条数据的一个版本
	 * @param tableName 表名
	 * @param rowkey 行数
	 * @param columnFamily 列族
	 * @param column 列族名
	 * @throws IOException
	 */
	public static void deleteData(String tableName , String rowkey , String columnFamily , String column) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		
		Delete delete = new Delete(Bytes.toBytes(rowkey));
		
		delete.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));
		
		table.delete(delete);
		
	}

7. 删除一条数据的列族

    /**
	 * 删除一条数据的列族
	 * @param tableName
	 * @param rowkey
	 * @param columnFamily
	 * @param column
	 * @throws IOException
	 */
	public static void deleteDatas(String tableName , String rowkey , String columnFamily , String column) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		
		Delete delete = new Delete(Bytes.toBytes(rowkey));
		
		table.delete(delete);
		
		delete.addColumns(Bytes.toBytes(columnFamily), Bytes.toBytes(column));
		
	}
	

8. 删除一个rowkey

    /**
	 * 删除一个rowkey
	 * @param tableName
	 * @param rowkey
	 * @throws IOException
	 */
	public static void deleteDatas(String tableName , String rowkey ) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		
		Delete delete = new Delete(Bytes.toBytes(rowkey));
		
		table.delete(delete);
		
	}

9. 删除表

    /**
	 * 删除表
	 * @param tableName 表名
	 * @throws IOException
	 */
	public static void deleteTable(String tableName) throws IOException {
		
		disableTable(tableName);
		Admin admin = adminTLocal.get();	
		admin.disableTable(TableName.valueOf(tableName));
		admin.deleteTable(TableName.valueOf(tableName));	
	
	}

10. 停止表

    /**
	 * 停止表
	 * @param tableName
	 * @throws IOException
	 */
	public static void disableTable(String tableName) throws IOException {
		
		Admin admin = adminTLocal.get();	
		
		admin.disableTable(TableName.valueOf(tableName));
		
	}

11. 清空表

    /**
	 * 清空表
	 * @param tableName
	 * @param preserved
	 * @throws IOException
	 */
	public static void turnCat(String tableName , boolean preserved ) throws IOException {
		
		Admin admin = adminTLocal.get();	
		admin.disableTable(TableName.valueOf(tableName));
		admin.truncateTable(TableName.valueOf(tableName), preserved);
		
	}

12.  扫描全表

    /**
	 * 扫描全表
	 * @param tableName
	 * @throws IOException
	 */
	public static void scanTable(String tableName) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		Scan scan = new Scan();
		ResultScanner scanner = table.getScanner(scan);
		for (Result result : scanner) {
			
			Cell[] cells = result.rawCells();
			
			for (Cell cell : cells) {
				
				String rowkey = Bytes.toString(CellUtil.cloneRow(cell)); 
				String family = Bytes.toString(CellUtil.cloneFamily(cell));
				String column = Bytes.toString(CellUtil.cloneQualifier(cell));
				String value = Bytes.toString(CellUtil.cloneValue(cell)); 
				
				
				System.out.print("rowkey:"+rowkey);
				System.out.print(",family:"+family);
				System.out.print(",column:"+column);
				System.out.print(",value:"+value);
				System.out.println();
				
			}
		}
		
	}

13. 查询一条表数据

    /**
	 * 查询一条表数据
	 * @param tableName
	 * @param rowkey
	 * @throws IOException
	 */
	public static void getRowData(String tableName , String rowkey) throws IOException {
		
		Table table = getConnect().getTable(TableName.valueOf(tableName));
		
		Get get = new Get(Bytes.toBytes(rowkey));
		
		Result result = table.get(get);
		
		Cell[] cells = result.rawCells();
		
		for (Cell cell : cells) {
			String family = Bytes.toString(CellUtil.cloneFamily(cell));
			String column = Bytes.toString(CellUtil.cloneQualifier(cell));
			String value = Bytes.toString(CellUtil.cloneValue(cell)); 
			
			
			System.out.print("rowkey:"+rowkey);
			System.out.print(",family:"+family);
			System.out.print(",column:"+column);
			System.out.print(",value:"+value);
			System.out.println();
			
		}
	}
	

14. 创建命名空间

    /**
	 * 创建命名空间
	 * @param namespace
	 * @return
	 */
	public static boolean createNamespace(String namespace)  {
		
		//判断命名空间是否存在
		if(!(hasNamespace(namespace))) {
			
			NamespaceDescriptor namespaceDes = NamespaceDescriptor.create(namespace).build();
			
			try {
				adminTLocal.get().createNamespace(namespaceDes);
				return true;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
		}
		System.out.println("命名空间在家里"+namespace+"以存在");
		return false;
	}

15. 删除命名空间

    /**
	 * 删除命名空间
	 * @param namespace
	 * @throws IOException
	 */
	public static void deleteNamespace(String namespace) throws IOException {
		
		getAdmin().deleteNamespace(namespace);
		System.out.println("删除成功");
		
	}
	

16. 判断命名空间是否存在

    /**
	 * 判断命名空间是否存在
	 * @param namespace 命名空间名称
	 * @return
	 */
	public static boolean hasNamespace(String namespace) {
		try {
			adminTLocal.get().getNamespaceDescriptor(namespace);
			System.out.println("命名空间在"+namespace+"存在");
			return true;
		} catch (NamespaceNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("命名空间"+namespace+"不存在");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
		
	}

17. 关闭资源

    /**
	 * 关闭资源
	 * 注意尽量不要吧adminTlocal里的admin在定义变量赋值
	 */
	public static void close() {
		
		if(getAdmin()!=null){
			
			try {
				adminTLocal.get().close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			adminTLocal.remove();
			connectTLocal.remove();
			
		}
		
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值