【HBase】【大数据技术基础】实验五 HBase基础编程实验
实验五 HBase Shell命令和Java API编程实践
实验目的
- 理解HBase在Hadoop体系结构中的角色;
- 熟练使用HBase操作常用的Shell命令;
- 熟悉HBase操作常用的Java API。
实验平台
- 操作系统:Linux
- Hadoop版本:2.6.0或以上版本
- HBase版本:1.1.2或以上版本
- JDK版本:1.6或以上版本
- Java IDE:Eclipse
实验内容和要求
开始实验前,记得先启动环境:
1. 设计Student学生表
根据给出的表格,用HBase Shell模式设计student学生表格。
-
a) 创建学生表:
create 'student', 'name', 'score'
-
b) 插入记录:
-
方式1:有专门的行键:
put 'student','97002','name','','lisi' put 'student','97002','score:English','55'
问题:如何根据姓名查询成绩?
- 答:可以实现,但很麻烦!
-
方式2:将姓名作为行键:
create 'student', 'score' put 'student','lisi','score:English','55'
查询:
get 'student','lisi','score:Computer'
-
-
c) 浏览表的相关信息:
scan 'student'
-
d) 查询zhangsan的Computer成绩:
get 'student','97001','score:Computer'
-
e) 修改lisi的Math成绩,改为95:
put 'student','97002','score:Math','95'
-
f) 查看修改结果:
get 'student','97002','score:Math'
2. 根据上面已经设计出的student,用Hbase API编程。
a) 添加数据:scofield English:45 Math:89 Computer:100
scofield | 45 | 89 | 100 |
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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.Put;
import org.apache.hadoop.hbase.client.Table;
public class HBaseInsert {
// 三个静态成员对象
public static Configuration configuration; // 管理HBase的配置信息
public static Connection connection; // 管理HBase的连接
public static Admin admin; // 管理HBase数据库的表信息
public static void main(String[] args) {
// 使用默认的HBase配置文件创建configuration
configuration = HBaseConfiguration.create();
// 连接hbase
configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
try {
// 创建连接
connection = ConnectionFactory.createConnection(configuration);
// 获取Admin对象
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
try {
// 插入的信息
insertRow("student", "scofield", "score", "English", "45");
insertRow("student", "scofield", "score", "Math", "89");
insertRow("student", "scofield", "score", "Computer", "100");
} catch (IOException e) {
e.printStackTrace();
}
// 关闭连接
close();
}
public static void insertRow(String tableName, String rowKey, String colFamily,
String col, String val) throws IOException {
// 获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建Put对象
Put put = new Put(rowKey.getBytes());
// 添加列数据
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
// 执行插入操作
table.put(put);
// 关闭表对象
table.close();
}
// 关闭连接
public static void close() {
try {
if (admin != null) {
admin.close();
}
if (connection != null) {
connection.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
b) 获取scofield的English成绩信息
import java.io.IOException;
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.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.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
public class HBaseQuery {
/**
* 三个静态成员对象
*/
public static Configuration configuration; // 管理HBase的配置信息
public static Connection connection; // 管理HBase的连接
public static Admin admin; // 管理HBase数据库的表信息
public static void main(String[] args) {
// 使用默认的HBase配置文件创建configuration
configuration = HBaseConfiguration.create();
// 连接hbase
configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
try {
// 连接hbase
connection = ConnectionFactory.createConnection(configuration);
// 获取Admin对象
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
try {
// 获取scofield的English成绩信息
getData("student", "scofield", "score", "English");
} catch (IOException e) {
e.printStackTrace();
}
// 关闭连接
close();
}
public static void getData(String tableName, String rowKey, String colFamily, String col) throws IOException {
// 获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
// 创建Get对象
Get get = new Get(rowKey.getBytes());
// 添加列
get.addColumn(colFamily.getBytes(), col.getBytes());
// 从指定的行的某些单元格中取出相应的值
Result result = table.get(get);
// 显示结果信息
showCell(result);
// 关闭表对象
table.close();
}
public static void showCell(Result result) {
// 显示结果信息函数
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
System.out.println("RowName: " + new String(CellUtil.cloneRow(cell)) + " ");
System.out.println("Timestamp: " + cell.getTimestamp() + " ");
System.out.println("Column Family: " + new String(CellUtil.cloneFamily(cell)) + " ");
System.out.println("Column Qualifier: " + new String(CellUtil.cloneQualifier(cell)) + " ");
System.out.println("Value: " + new String(CellUtil.cloneValue(cell)) + " ");
System.out.println("--------------------------------");
}
}
// 关闭连接
public static void close() {
try {
if (admin != null) {
admin.close();
}
if (connection != null) {
connection.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}