1. hbase 版本: 1.2.0
2.Connection接口
2.1 在我们操作hbase数据库的时候,首先需要建立连接(Connection)--如下示例代码
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort","2181");
configuration.set("hbase.zookeeper.quorum","dmp-test01,dmp-test02,dmp-test03");
configuration.set("hbase.master","dmp-test01:60000");
configuration.setLong(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 60 * 1000L);
Connection connection ConnectionFactory.createConnection(configuration);
继续跟踪 ConnectionFactory.createConnection(),发现connection的实现类是:
static Connection createConnection(final Configuration conf, final boolean managed,
final ExecutorService pool, final User user)
throws IOException {
String className = conf.get(HConnection.HBASE_CLIENT_CONNECTION_IMPL,
ConnectionManager.HConnectionImplementation.class.getName());
Class<?> clazz = null;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
throw new IOException(e);
}
try {
// Default HCM#HCI is not accessible; make it so before invoking.
Constructor<?> constructor =
clazz.getDeclaredConstructor(Configuration.class,
boolean.class, ExecutorService.class, User.class);
constructor.setAccessible(true);
return (Connection) constructor.newInstance(conf, managed, pool, user);
} catch (Exception e) {
throw new IOException(e);
}
}
使用反射机制构建实现类,Connection默认的实现类是:ConnectionManager.HConnectionImplementation
3 Htable
使用Connection创建Htable实例示例:HTable hTable = (HTable)connection.getTable(TableName.valueOf("ldx_test"));即构建了Htable实例
3.1 table.put方法
Htable的put贴上代码:
//提交单个
@Override
public void put(final Put put) throws IOException {
getBufferedMutator().mutate(put);
if (autoFlush) {
flushCommits();
}
}
//批量提交
@Override
public void put(final List<Put> puts) throws IOException {
getBufferedMutator().mutate(puts);
if (autoFlush) {
flushCommits();
}
}
@VisibleForTesting
BufferedMutator getBufferedMutator() throws IOExcept