#Hbase的Java API操作之创建删除表
##【实验目的】
1)掌握Hbase Java API开发环境
2)学会调用Java接口创建Hbase表
3)学会调用Java接口删除Hbase表
##【实验原理】
建立Java工程,调用Java API创建Hbase表、删除Hbase表。
##【实验环境】
本次环境是:centos6.5+jdk1.7.0_79+hbase0.96+ eclipse
host01是计算机名称对应ip地址为 192.168.0.131,可以在/etc/hosts文件中查看映射关系
工具在/simple/soft目录下
##【实验步骤】
###一 、准备阶段
1.1 配置主机名和IP的映射关系。
如果你在Windows平台下使用Eclipse开发并执行代码调用Linux平台的Hbase,则需要配置主机名和IP的映射关系。Linux上部署Hbase的主机名为host01,IP为192.168.0.131。
需要在C:\Windows\System32\drivers\etc目录下的hosts文件中添加内容192.168.0.131 host01。如图1所示
![]()
1.2 准备用于开发Java程序的eclipse。如图2所示
![]()
1.3 准备项目中所需的Hbase包。如图3所示
![]()
包的位置:$HBASE_HOME/lib。如图4所示
![]()
###二、 程序编写
2.1 创建Java工程。
在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“CreateDelTable” 。如图5所示
![]()
2.2 创建Java类。
在项目src目录下,右键点击,选择“新建”创建一个类文件名称为“CreateTable”,并指定包名” com.simple.create” 。如图6所示
![]()
2.3 复制hbase相关jar包到lib文件夹。
在编写“CreateTable”类之前需要把hbase相关的jar包导入,首先在项目根目录下创建一个文件夹lib,把hbase相关jar包复制到该文件中 。如图7所示
![]()
2.4 将lib下所有的jar包导入到项目环境中。
首先全选lib文件夹下的jar包文件,右键点击,选择“build path”-->“add to build path”,添加后,发现在lib文件夹下的jar包图标变成了瓶子状。如图8所示
![]()
发现jar包被引用到了工程的Referenced Libraries中。如图9所示
![]()
2.5 创建程序的入口main方法。
在类“CreateTable”中编写程序的入口main方法。如图10所示
![]()
代码如下。
```java
package com.simple.create;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
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.HBaseAdmin;
public class CreateTable {
public static void main(String[] args) throws IOException {
//一、配置文件设置
//创建用于客户端的配置类实例
Configuration config = HBaseConfiguration.create();
//设置连接zookeeper的地址
//hbase客户端连接的是zookeeper
config.set("hbase.zookeeper.quorum", "192.168.0.131:2181");
//二、表描述相关信息
//创建表描述器并命名表名为account1
HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf("account1"));
//创建列族描述器并命名一个列族名为baseInfo
HColumnDescriptor columnDesc1 = new HColumnDescriptor("baseinfo");
//设置列族的最大版本数
columnDesc1.setMaxVersions(5);
//创建列族描述器并命名一个列族名为baseInfo
HColumnDescriptor columnDesc2 = new HColumnDescriptor("contacts");
//设置列族的最大版本数
columnDesc2.setMaxVersions(3);
//添加一个列族给表
tableDesc.addFamily(columnDesc1);
//添加一个列族给表
tableDesc.addFamily(columnDesc2);
//三、实例化HBaseAdmin、创建表
//根据配置文件创建HBaseAdmin对象
HBaseAdmin hbaseAdmin = new HBaseAdmin(config);
//创建表
hbaseAdmin.createTable(tableDesc);
//四、释放资源
hbaseAdmin.close();
}
}
```
###三、 程序测试
3.1 通过`start-all.sh`启动Hadoop服务,并通过`cd /simple/hbase-0.96-2-hadoop2/bin`密令进入Hbase的bin目录下
`./start-hbase.sh`启动Hbase服务。通过`jps`查看是否启动成功。
3.2 执行代码。
选中测试类CreateTable,右键点击选择”Run as”-->”Java Application”,程序将执行。查看控制台打印的日志,可以判断是否正确执行。如图11所示
![]()
注:如果控制台打印如下日志java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.无需理会。
该异常是window平台没有查找到winutils.exe所打印的提示。如图12所示
![]()
3.3 进入hbase shell查看结果。
程序执行完毕之后,进入hbase shell,分别执行命令list、describe 'account1',可以查看执行的结果。如图13所示
![]()
### 四、 删除表
4.1 删除表的操作步骤同上。以下是删除表代码。
```java
package com.simple.create;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
public class DelTable {
public static void main(String[] args) throws IOException {
//一、配置文件设置
//创建用于客户端的配置类实例
Configuration config = HBaseConfiguration.create();
//设置连接zookeeper的地址
//hbase客户端连接的是zookeeper
config.set("hbase.zookeeper.quorum", "192.168.0.131:2181");
//二、实例化HBaseAdmin、创建表
//根据配置文件创建HBaseAdmin对象
HBaseAdmin hbaseAdmin = new HBaseAdmin(config);
//三、删除表
//设置表account1不可用(删除表之前需要先设置表不可用)
hbaseAdmin.disableTable("account1");
//删除表account1
hbaseAdmin.deleteTable("account1");
//四、释放资源
hbaseAdmin.close();
}
}
```
4.2 在Hbase shell下通过`list`密令查看是否删除表。如图14所示
![]()
#Hbase的Java API操作之插入数据
##【实验目的】
1)掌握Hbase Java API开发环境
2)学会调用Java接口向表中插入数据
##【实验原理】
建立Java工程,调用Java API向表中插入单条数据或者多条数据。
##【实验环境】
本次环境是:centos6.5+jdk1.7.0_79+hbase0.96+eclipse
host01是计算机名称对应ip地址为 192.168.0.131,可以在/etc/hosts文件中查看映射关系
工具在/simple/soft目录下
##【实验步骤】
###一、准备阶段
1.1 配置主机名和IP的映射关系。(同一)
如果你在Windows平台下使用Eclipse开发并执行代码调用Linux平台的Hbase,则需要配置主机名和IP的映射关系。Linux上部署Hbase的主机名为host01,IP为192.168.0.131。
需要在C:\Windows\System32\drivers\etc目录下的hosts文件中添加内容192.168.0.131 host01
1.2 准备用于开发Java程序的eclipse。如图2所示
1.3 准备项目中所需的Hbase包。如图3所示
包的位置:$HBASE_HOME/lib,如图4所示
###二、程序编写
2.1 创建Java工程。
在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“PutData” 。 如图5所示
2.2 创建Java类。
在项目src目录下,右键点击,选择“新建”创建一个类文件名称为“PutTest”,并指定包名” com.simple.put” 。如图6所示
![]()
2.3 复制hbase相关jar包到lib文件夹。
在编写“PutTest”类之前需要把hbase相关的jar包导入,首先在项目根目录下创建一个文件夹lib,把hbase相关jar包复制到该文件中 。如图7所示
![]()
2.4 将lib下所有的jar包导入到项目环境中。
首先全选lib文件夹下的jar包文件,右键点击,选择“build path”-->“add to build path”。添加后,
发现jar包被引用到了工程的Referenced Libraries中。如图8所示
![]()
2.5 创建程序的入口main方法。
在类“PutTest”中编写程序的入口main方法。如图9所示
![]()
编写代码如下。
```java
package com.simple.put;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class PutTest {
public static void main(String[] args) throws IOException {
// 一、配置文件设置
// 创建用于客户端的配置类实例
Configuration config = HBaseConfiguration.create();
// 设置连接zookeeper的地址
// hbase客户端连接的是zookeeper
config.set("hbase.zookeeper.quorum", "192.168.0.131:2181");
// 二、 获得要操作的表的对象。
// 第一个参数"config"为配置文件;第二个参数"account1"为数据库中的表名。
// (注:"account1"为上节中所创建的表)
HTable table = new HTable(config, "account1");
// 三、设置Put对象
// 设置行健值为"rk001"
Put put = new Put(Bytes.toBytes("rk001"));
// 设置列族、列、cell值
// 其中"baseinfo"位列族;"name"为列;"ZhangFei"为cell值
put.add(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"), Bytes.toBytes("ZhangFei"));
// 四、插入一行数据
table.put(put);
// 五、释放资源
table.close();
}
}
```
###三、程序测试
3.1 通过`start-all.sh`启动Hadoop服务,并通过`cd /simple/hbase-0.96-2-hadoop2/bin`密令进入Hbase的bin目录下
`./start-hbase.sh`启动Hbase服务。通过`jps`查看是否启动成功。
3.2 通过`./hbase shell`密令进入hbase shell。通过`create 'account1','baseinfo','contacts'`密令创建account1表。通过`list`查看是否成功。
3.3 执行代码。
选中测试类PutTest,右键点击选择”Run as”-->”Java Application”,程序将执行。查看控制台打印的日志,可以判断是否正确执行。如图10所示
![]()
注:如果控制台打印如下日志java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.无需理会。该异常是window平台没有查找到winutils.exe所打印的提示。如图11所示
![]()
3.4 进入hbase shell查看结果。
程序执行完毕之后,进入hbase shell,执行命令scan 'account1',可以查看到插入的数据。如图12所示
![]()
###四、代码:插入多行数据
插入多行数据的操作步骤同上。以下是插入多行数据的代码。
```java
package com.simple.put;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class PutListTest {
public static void main(String[] args) throws IOException {
// 一、配置文件设置
// 创建用于客户端的配置类实例
Configuration config = HBaseConfiguration.create();
// 设置连接zookeeper的地址
// hbase客户端连接的是zookeeper
config.set("hbase.zookeeper.quorum", "192.168.0.131:2181");
// 二、 获得要操作的表的对象。
// 第一个参数"config"为配置文件;第二个参数"account1"为数据库中的表名。
// (注:"account1"为上节中所创建的表)
HTable table = new HTable(config, "account1");
// 三、设置Put对象
// 设置行健值
Put put2 = new Put(Bytes.toBytes("rk002"));
// 设置列族、列、cell值
put2.add(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"), Bytes.toBytes("ZhangFei2"));
// 设置行健值
Put put3 = new Put(Bytes.toBytes("rk003"));
// 设置列族、列、cell值
put3.add(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"), Bytes.toBytes("ZhangFei3"));
// 四、构造List<Put>
List<Put> listPut = new ArrayList<Put>();
listPut.add(put2);
listPut.add(put3);
// 五、插入多行数据
table.put(listPut);
// 五、释放资源
table.close();
}
}
```
执行代码后进入hbase shell查看结果。如图13所示
![]()
###五、代码:创建测试表
如果没有练习上一节创建表的内容,可以执行下面的代码来创建用于测试的表。
```java
package com.simple.create;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
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.HBaseAdmin;
public class CreateTable {
public static void main(String[] args) throws IOException {
//一、配置文件设置
//创建用于客户端的配置类实例
Configuration config = HBaseConfiguration.create();
//设置连接zookeeper的地址
//hbase客户端连接的是zookeeper
config.set("hbase.zookeeper.quorum", "192.168.0.131:2181");
//二、表描述相关信息
//创建表描述器并命名表名为account
HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf("account1"));
//创建列族描述器并命名一个列族名为baseInfo
HColumnDescriptor columnDesc1 = new HColumnDescriptor("baseinfo");
//设置列族的最大版本数
columnDesc1.setMaxVersions(5);
//创建列族描述器并命名一个列族名为baseInfo
HColumnDescriptor columnDesc2 = new HColumnDescriptor("contacts");
//设置列族的最大版本数
columnDesc2.setMaxVersions(3);
//添加一个列族给表
tableDesc.addFamily(columnDesc1);
//添加一个列族给表
tableDesc.addFamily(columnDesc2);
//三、实例化HBaseAdmin、创建表
//根据配置文件创建HBaseAdmin对象
HBaseAdmin hbaseAdmin = new HBaseAdmin(config);
//创建表
hbaseAdmin.createTable(tableDesc);
//四、释放资源
hbaseAdmin.close();
}