#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所示
1.2 准备用于开发Java程序的eclipse。如图2所示
1.3 准备项目中所需的Hbase包。如图3所示

包的位置:$HBASE_HOME/lib,如图4所示
###二、程序编写
2.1 创建Java工程。
在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“GetData” 。 如图5所示
2.2 创建Java类。
在项目src目录下,右键点击,选择“新建”创建一个类文件名称为“GetTest”,并指定包名” com.simple.get” 。如图6所示
2.3 复制hbase相关jar包到lib文件夹。
在编写“GetTest”类之前需要把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方法。
在类“GetTest”中编写程序的入口main方法。如图9所示
编写代码如下。(注:在实验6中创建了该表,在实验7中插入了数据,这里不再做创建表和插入数据的操作。
如果没有测试表和数据,请回到前边的实验执行相关代码产生数据。) ```java package com.simple.get; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; public class GetTest { 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"); // 三、设置Get对象 // 设置要查找的行健值为"rk001" Get get = new Get(Bytes.toBytes("rk001")); // 四、根据Get对象获取查询结果Result对象 Result result = table.get(get); // 五、设置要查询的列族名、列名 // 第一个参数"baseinfo"为列族名;第二个参数"name"为列名。 byte[] rk001_vals = result.getValue(Bytes.toBytes("baseinfo"), Bytes.toBytes("name")); // 六、将结果转换为字符串并打印到控制台 System.out.println("行健为rk001、列族为baseinfo、列为name的值==>"+Bytes.toString(rk001_vals)); // 七、释放资源 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 执行代码。 选中测试类GetTest,右键点击选择”Run as”-->”Java Application”,程序将执行。查看控制台打印的日志,可以判断是否正确执行。如图10所示
注:如果控制台打印如下日志java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
无需理会。该异常是window平台没有查找到winutils.exe所打印的提示。如图11所示
###四、查询所有列的值
下面代码的操作步骤同上。这里不再重复。
4.1 插入测试数据代码。
向表account1的列族baseinfo下的列age中插入数据50,该值的行健为rk001.
(注:原先的表account1的列族baseinfo中只有一列name,下面的代码将插入新的列age)
```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"位列族;"age"为列;"50"为cell值
		put.add(Bytes.toBytes("baseinfo"), Bytes.toBytes("age"), Bytes.toBytes("55"));

		// 四、插入一行数据
		table.put(put);

		// 五、释放资源
		table.close();
	}
}
```
执行代码后进入hbase shell查看结果。如图12所示
4.2 查询所有列的值。
	代码如下。
```java
package com.simple.get;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

public class GetAllColumnsTest {

	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");

		// 三、设置Get对象
		// 设置要查找的行健值为"rk001"
		Get get = new Get(Bytes.toBytes("rk001"));

		// 四、根据Get对象获取查询结果Result对象
		Result result = table.get(get);
		for(KeyValue kv : result.list()){
			String family = new String(kv.getFamily());
			System.out.println(family);
			String qualifier = new String(kv.getQualifier());
			System.out.println(qualifier);
			System.out.println(new String(kv.getValue()));
		}

		// 五、释放资源
		table.close();
	}

}
```
4.3 测试结果。如图13所示

 

 

#Hbase的Java API操作之扫描读
##【实验目的】
1)掌握Hbase Java API开发环境
2)学会调用Java接口读取所有数据
3)学会调用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所示。
1.2 准备用于开发Java程序的eclipse。如图2所示。
1.3 准备项目中所需的Hbase包。如图3所示。
包的位置:$HBASE_HOME/lib,如图4所示。

###二、程序编写
2.1 创建Java工程。
在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“ScanData” 。 如图5所示。
2.2 创建Java类。
在项目src目录下,右键点击,选择“新建”创建一个类文件名称为“ScanTest”,并指定包名” com.simple.scan” 。如图6所示。
2.3 复制hbase相关jar包到lib文件夹。
在编写“ScanTest”类之前需要把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方法。
在类“ScanTest”中编写程序的入口main方法。如图9所示。

编写代码如下。(注:在实验6中创建了该表,在实验7、8中插入了数据,这里不再做创建表和插入数据的操作。如果没有测试表和数据,请回到前边的实验执行相关代码产生数据。)
```java
package com.simple.scan;

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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class ScanTest {

	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");

		// 三、创建Scan对象
		Scan scan = new Scan();

		// 四、根据Scan对象获取查询结果ResultScanner对象resultScanner
		ResultScanner resultScanner = table.getScanner(scan);
		// 遍历打印列族为baseinfo、列为name的值
		for (Result result : resultScanner) {
			// 将结果转换为字符串并打印到控制台
			System.out.println("查询account1中的所有数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"))));
		}

		// 五、释放资源
		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 在hbase shell下通过`put 'account1','rk001','baseinfo:name,'zhangsan'`向数据库中插入第一条数据。
`put 'account1','rk002','baseinfo:name,'zhangsan1'`向数据库中插入第二条数据。`put 'account1','rk003','baseinfo:name,'zhangsan2'`向数据库中插入第三条数据。 通过`scan 'account1'`密令查看插入数据的信息。 3.4 执行代码。 选中测试类ScanTest,右键点击选择”Run as”-->”Java Application”,程序将执行。查看控制台打印的日志,可以判断是否正确执行。如图10所示。
  注:如果控制台打印如下日志java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.无需理会。
该异常是window平台没有查找到winutils.exe所打印的提示。如图11所示。
###四、查询指定范围内的数据
下面代码的操作步骤同上。这里不再重复。
4.1 查询指定范围内的数据。
代码如下。
```java
package com.simple.scan;

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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class ScanSettingTest {

	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");

		// 三、创建Scan对象
		// 第一个参数"rk001"为行健的开始位置;第二个参数"rk003"为行健的结束位置
		Scan scan = new Scan(Bytes.toBytes("rk001"), Bytes.toBytes("rk003"));

		// 四、根据Scan对象获取查询结果ResultScanner对象resultScanner
		ResultScanner resultScanner = table.getScanner(scan);
		// 遍历打印列族为baseinfo、列为name的值
		for (Result result : resultScanner) {
			// 将结果转换为字符串并打印到控制台
			System.out.println("查询account1中指定范围内的数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"))));
		}

		// 五、释放资源
		table.close();
	}

}
```
4.3 测试结果。
如图12所示。

 

 posted on 2020-09-01 19:46  小希米七  阅读(161)  评论(0)    收藏  举报