千家信息网

HBase-1.0.1学习笔记(五)HBase Java客户

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,鲁春利的工作笔记,好记性不如烂笔头Java客户端:org.apache.hadoop.hbase.client.HTable类:该类的读写是非线程安全的,不再作为client API提供给开发用户使用
千家信息网最后更新 2026年11月03日HBase-1.0.1学习笔记(五)HBase Java客户

鲁春利的工作笔记,好记性不如烂笔头



Java客户端:

org.apache.hadoop.hbase.client.HTable类:该类的读写是非线程安全的,不再作为client API提供给开发用户使用,建议通过Table类替代。

  /**   * Creates an object to access a HBase table.   * @param conf Configuration object to use.   * @param tableName Name of the table.   * @throws IOException if a remote or network exception occurs   * @deprecated Constructing HTable objects manually has been deprecated.    * {@link Connection} to instantiate a {@link Table} instead.   */  @Deprecated  public HTable(Configuration conf, final String tableName)  throws IOException {    this(conf, TableName.valueOf(tableName));  }

org.apache.hadoop.hbase.client.Table类:


org.apache.hadoop.hbase.client.HConnectionManager类:


org.apache.hadoop.hbase.client.HBaseAdmin类:

@InterfaceAudience.Private@InterfaceStability.Evolvingpublic class HBaseAdmin implements Admin {  private static final Log LOG = LogFactory.getLog(HBaseAdmin.class);  // 略  @Deprecated  public HBaseAdmin(Configuration c)  throws MasterNotRunningException, ZooKeeperConnectionException, IOException {    // Will not leak connections, as the new implementation of the constructor    // does not throw exceptions anymore.    this(ConnectionManager.getConnectionInternal(new Configuration(c)));    this.cleanupConnectionOnClose = true;  }  // 略}# 说明:HBaseAdmin不在作为客户端API使用,标记为Private表示为HBase-internal class。#  使用Connection#getAdmin()来获取Admin实例。

org.apache.hadoop.hbase.client.ConnectionFactory类:

@InterfaceAudience.Public@InterfaceStability.Evolvingpublic class ConnectionFactoryextends Object// Example: Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("table1")); try {   // Use the table as needed, for a single operation and a single thread } finally {   table.close();   connection.close(); }

客户端使用示例:

package com.invic.hbase;import java.io.IOException;import java.util.Iterator;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;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.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.Get;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.client.Table;import org.apache.hadoop.hbase.filter.Filter;import org.apache.hadoop.hbase.filter.PageFilter;import org.apache.hadoop.hbase.util.Bytes;/** *  * @author lucl * HBase的配置实例 * */public class HBaseManagerMain {        private static final Log LOG = LogFactory.getLog(HBaseManagerMain.class);        // 在Eclipse中运行时报错如下        //         Caused by: java.lang.ClassNotFoundException: org.apache.htrace.Trace        //         Caused by: java.lang.NoClassDefFoundError: io/netty/channel/ChannelHandler        // 需要把单独的htrace-core-3.1.0-incubating.jar和netty-all-4.0.5.final.jar导入项目中                  private static final String TABLE_NAME = "m_domain";        private static final String COLUMN_FAMILY_NAME = "cf";                  /**         * @param args         */        public static void main(String[] args) {                Configuration conf = HBaseConfiguration.create();                conf.set("hbase.master", "nnode:60000");                conf.set("hbase.zookeeper.property.clientport", "2181");                conf.set("hbase.zookeeper.quorum", "nnode,dnode1,dnode2");                                HBaseManagerMain manageMain = new HBaseManagerMain();                                try {                        /**                         * HTable类读写时是非线程安全的,已经标记为Deprecated                         * 建议通过org.apache.hadoop.hbase.client.Connection来获取实例                         */                        Connection connection = ConnectionFactory.createConnection(conf);                        Admin admin = connection.getAdmin();                        /**                         *  列出所有的表                         */                        manageMain.listTables(admin);                                                /**                         * 判断表m_domain是否存在                         */                        boolean exists = manageMain.isExists(admin);                                                /**                         * 存在就删除                         */                        if (exists) {                                manageMain.deleteTable(admin);                        }                                                 /**                         * 创建表                         */                        manageMain.createTable(admin);                                                /**                         *  再次列出所有的表                         */                        manageMain.listTables(admin);                                                /**                         * 添加数据                         */                        manageMain.putDatas(connection);                                                /**                         * 检索数据-表扫描                         */                        manageMain.scanTable(connection);                                                /**                         * 检索数据-单行读                         */                        manageMain.getData(connection);                                                /**                         * 检索数据-根据条件                         */                        manageMain.queryByFilter(connection);                                                /**                         * 删除数据                         */                        manageMain.deleteDatas(connection);                } catch (IOException e) {                        e.printStackTrace();                }                        }        /**         * 列出表         * @param admin         * @throws IOException          */        private void listTables (Admin admin) throws IOException {                TableName [] names = admin.listTableNames();                for (TableName tableName : names) {                        LOG.info("Table Name is : " + tableName.getNameAsString());                }        }                /**         * 判断表是否存在         * @param admin         * @return         * @throws IOException         */        private boolean isExists (Admin admin) throws IOException {                /**                 * org.apache.hadoop.hbase.TableName为为代表了表名字的Immutable POJO class对象,                 * 形式为:
。 * static TableName valueOf(byte[] fullName) * static TableName valueOf(byte[] namespace, byte[] qualifier) * static TableName valueOf(ByteBuffer namespace, ByteBuffer qualifier) * static TableName valueOf(String name) * static TableName valueOf(String namespaceAsString, String qualifierAsString) * HBase系统默认定义了两个缺省的namespace * hbase:系统内建表,包括namespace和meta表 * default:用户建表时未指定namespace的表都创建在此 * 在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。 * */ TableName tableName = TableName.valueOf(TABLE_NAME); boolean exists = admin.tableExists(tableName); if (exists) { LOG.info("Table " + tableName.getNameAsString() + " already exists."); } else { LOG.info("Table " + tableName.getNameAsString() + " not exists."); } return exists; } /** * 创建表 * @param admin * @throws IOException */ private void createTable (Admin admin) throws IOException { TableName tableName = TableName.valueOf(TABLE_NAME); LOG.info("To create table named " + TABLE_NAME); HTableDescriptor tableDesc = new HTableDescriptor(tableName); HColumnDescriptor columnDesc = new HColumnDescriptor(COLUMN_FAMILY_NAME); tableDesc.addFamily(columnDesc); admin.createTable(tableDesc); } /** * 删除表 * @param admin * @throws IOException */ private void deleteTable (Admin admin) throws IOException { TableName tableName = TableName.valueOf(TABLE_NAME); LOG.info("disable and then delete table named " + TABLE_NAME); admin.disableTable(tableName); admin.deleteTable(tableName); } /** * 添加数据 * @param connection * @throws IOException */ private void putDatas (Connection connection) throws IOException { String [] rows = {"baidu.com_19991011_20151011", "alibaba.com_19990415_20220523"}; String [] columns = {"owner", "ipstr", "access_server", "reg_date", "exp_date"}; String [][] values = { {"Beijing Baidu Technology Co.", "220.181.57.217", "北京", "1999年10月11日", "2015年10月11日"}, {"Hangzhou Alibaba Advertising Co.", "205.204.101.42", "杭州", "1999年04月15日", "2022年05月23日"} }; TableName tableName = TableName.valueOf(TABLE_NAME); byte [] family = Bytes.toBytes(COLUMN_FAMILY_NAME); Table table = connection.getTable(tableName); for (int i = 0; i < rows.length; i++) { System.out.println("========================" + rows[i]); byte [] rowkey = Bytes.toBytes(rows[i]); Put put = new Put(rowkey); for (int j = 0; j < columns.length; j++) { byte [] qualifier = Bytes.toBytes(columns[j]); byte [] value = Bytes.toBytes(values[i][j]); put.addColumn(family, qualifier, value); } table.put(put); } table.close(); } /** * 检索数据-单行获取 * @param connection * @throws IOException */ private void getData(Connection connection) throws IOException { LOG.info("Get data from table " + TABLE_NAME + " by family."); TableName tableName = TableName.valueOf(TABLE_NAME); byte [] family = Bytes.toBytes(COLUMN_FAMILY_NAME); byte [] row = Bytes.toBytes("baidu.com_19991011_20151011"); Table table = connection.getTable(tableName); Get get = new Get(row); get.addFamily(family); // 也可以通过addFamily或addColumn来限定查询的数据 Result result = table.get(get); List cells = result.listCells(); for (Cell cell : cells) { String qualifier = new String(CellUtil.cloneQualifier(cell)); String value = new String(CellUtil.cloneValue(cell), "UTF-8"); // @Deprecated // LOG.info(cell.getQualifier() + "\t" + cell.getValue()); LOG.info(qualifier + "\t" + value); } } /** * 检索数据-表扫描 * @param connection * @throws IOException */ private void scanTable(Connection connection) throws IOException { LOG.info("Scan table " + TABLE_NAME + " to browse all datas."); TableName tableName = TableName.valueOf(TABLE_NAME); byte [] family = Bytes.toBytes(COLUMN_FAMILY_NAME); Scan scan = new Scan(); scan.addFamily(family); Table table = connection.getTable(tableName); ResultScanner resultScanner = table.getScanner(scan); for (Iterator it = resultScanner.iterator(); it.hasNext(); ) { Result result = it.next(); List cells = result.listCells(); for (Cell cell : cells) { String qualifier = new String(CellUtil.cloneQualifier(cell)); String value = new String(CellUtil.cloneValue(cell), "UTF-8"); // @Deprecated // LOG.info(cell.getQualifier() + "\t" + cell.getValue()); LOG.info(qualifier + "\t" + value); } } } /** * 安装条件检索数据 * @param connection */ private void queryByFilter(Connection connection) { // 简单分页过滤器示例程序 Filter filter = new PageFilter(15); // 每页15条数据 int totalRows = 0; byte [] lastRow = null; Scan scan = new Scan(); scan.setFilter(filter); // 略 } /** * 删除数据 * @param connection * @throws IOException */ private void deleteDatas(Connection connection) throws IOException { LOG.info("delete data from table " + TABLE_NAME + " ."); TableName tableName = TableName.valueOf(TABLE_NAME); byte [] family = Bytes.toBytes(COLUMN_FAMILY_NAME); byte [] row = Bytes.toBytes("baidu.com_19991011_20151011"); Delete delete = new Delete(row); // @deprecated Since hbase-1.0.0. Use {@link #addColumn(byte[], byte[])} // delete.deleteColumn(family, qualifier); // 删除某个列的某个版本 delete.addColumn(family, Bytes.toBytes("owner")); // @deprecated Since hbase-1.0.0. Use {@link #addColumns(byte[], byte[])} // delete.deleteColumns(family, qualifier) // 删除某个列的所有版本 // @deprecated Since 1.0.0. Use {@link #(byte[])} // delete.addFamily(family); // 删除某个列族 Table table = connection.getTable(tableName); table.delete(delete); }}



数据 检索 客户 实例 客户端 安全 建议 是非 条件 标记 版本 用户 示例 系统 线程 UTF-8 笔记 业务 两个 代表 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云信互联网科技有限公司 互联网与科技金融数据 中资互联网科技 深圳互联网络科技有限公司 互联网金融 科技创新 上海卓越科技 互联网 中国互联网金融科技基金 互联网和黑科技的看法 米聚互联网科技南京有限公司排面 亳州好赞互联网科技有限公司 银川新华互联网科技学校联系电话 洛阳共同富裕互联网科技有限公司 互联网营销推广黑科技 互联网科技快讯热点 半导体是互联网高科技吗 2021世界互联网领先科技成果发布 西安左小互联网科技有限公司 米泉互联网科技专业怎么样 互联网金融金融科技 长沙易易互联网科技有限公司 博彦科技互联网金融 新华互联网科技学校 深圳恒合互联网络科技有限公司 互联网与科技发展 互联网科技战争 沃里互联网科技 烟台灵鸽互联网科技有限公司 小米互联网科技园入驻 35岁以上互联网科技行业 互联网高科技行业有哪些企业
0