尚硅谷大数据技术之HBase(新)第6章 HBase API操作

6.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>

 

6.2 HBaseAPI

6.2.1 获取Configuration对象

public static Configuration conf;

static{

//使用HBaseConfiguration的单例方法实例化

conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.9.102");

conf.set("hbase.zookeeper.property.clientPort", "2181");

}

6.2.2 判断表是否存在

public static boolean isTableExist(String tableName) throws MasterNotRunningException,

 ZooKeeperConnectionException, IOException{

//在HBase中管理、访问表需要先创建HBaseAdmin对象

//Connection connection = ConnectionFactory.createConnection(conf);

//HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

HBaseAdmin admin = new HBaseAdmin(conf);

return admin.tableExists(tableName);

}

6.2.3 创建表

public static void createTable(String tableName, String... columnFamily) throws

 MasterNotRunningException, ZooKeeperConnectionException, IOException{

HBaseAdmin admin = new HBaseAdmin(conf);

//判断表是否存在

if(isTableExist(tableName)){

System.out.println("表" + tableName + "已存在");

//System.exit(0);

}else{

//创建表属性对象,表名需要转字节

HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));

//创建多个列族

for(String cf : columnFamily){

descriptor.addFamily(new HColumnDescriptor(cf));

}

//根据对表的配置,创建表

admin.createTable(descriptor);

System.out.println("表" + tableName + "创建成功!");

}

}

6.2.4 删除表

public static void dropTable(String tableName) throws MasterNotRunningException,

 ZooKeeperConnectionException, IOException{

HBaseAdmin admin = new HBaseAdmin(conf);

if(isTableExist(tableName)){

admin.disableTable(tableName);

admin.deleteTable(tableName);

System.out.println("表" + tableName + "删除成功!");

}else{

System.out.println("表" + tableName + "不存在!");

}

}

6.2.5 向表中插入数据

public static void addRowData(String tableName, String rowKey, String columnFamily, String

 column, String value) throws IOException{

//创建HTable对象

HTable hTable = new HTable(conf, tableName);

//向表中插入数据

Put put = new Put(Bytes.toBytes(rowKey));

//向Put对象中组装数据

put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));

hTable.put(put);

hTable.close();

System.out.println("插入数据成功");

}

6.2.6 删除多行数据

public static void deleteMultiRow(String tableName, String... rows) throws IOException{

HTable hTable = new HTable(conf, tableName);

List<Delete> deleteList = new ArrayList<Delete>();

for(String row : rows){

Delete delete = new Delete(Bytes.toBytes(row));

deleteList.add(delete);

}

hTable.delete(deleteList);

hTable.close();

}