#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();
	}
}
```
 posted on 2020-08-31 10:37  小希米七  阅读(327)  评论(0)    收藏  举报