鲁春利的工作笔记,好记性不如烂笔头
我们提供的服务有:成都做网站、网站设计、微信公众号开发、网站优化、网站认证、乌海海南ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的乌海海南网站制作公司
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.Evolving
public 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.Evolving
public 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对象,
* 形式为