目录
[1 实验名称](#1 实验名称)
[2 实验目的](#2 实验目的)
[3 实验内容](#3 实验内容)
[4 实验原理](#4 实验原理)
[5 实验过程或源代码](#5 实验过程或源代码)
[5.1 Hbase数据库的安装](#5.1 Hbase数据库的安装)
[5.2 创建表](#5.2 创建表)
[5.3 添加数据、删除数据、删除表](#5.3 添加数据、删除数据、删除表)
[5.4 使用Java操作HBase](#5.4 使用Java操作HBase)
[6 实验结果](#6 实验结果)
[6.1 Hbase数据库的安装](#6.1 Hbase数据库的安装)
[6.2 创建表](#6.2 创建表)
[6.3 添加数据、删除数据、删除表](#6.3 添加数据、删除数据、删除表)
[6.4 使用Java操作Hbase](#6.4 使用Java操作Hbase)
1 实验名称
HBase的安装与基本操作
2 实验目的
- 了解HBase 的概述及历史,理解HBase 的数据模型,理解HBase 的系统架构,学会HBase 的环境部署
2、了解HBase 的数据模型和基本操作。
3 实验内容
(1)Hbase数据库的安装
(2)创建表
(3)添加数据、删除数据、删除表
(4)使用Java操作HBase
4 实验原理
Hbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价的PC Server上搭建大规模结构化存储集群。HBase以表的形式存储数据,数据模型如下图HBase数据模型所示。表中的数据划分为多个Region,并由Master分配给对应的RegionServer进行管理。
Hbase是一个分布式的、面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。另一个不同的是Hbase基于列的而不是基于行的模式。Hbase使用和 BigTable非常相同的数据模型。用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列,一个或多个列组成一个ColumnFamily,一个Fmaily下的列位于一个HFile中,易于缓存数据。表是疏松的存储的,因此用户可以给行定义各种不同的列。在Hbase中数据按主键排序,同时表按主键划分为多个Region。每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。您可以在创建表时定义Region的RowKey区间,或者在配置文件中定义Region的大小。
5 实验过程或源代码
5.1 Hbase数据库的安装
1.将HBase解压到/app目录下:
mkdir /app
cd /opt
tar -zxvf hbase-2.1.1-bin.tar.gz -C /app
2.配置JDK的路径,将JDK的路径配置到conf/下的hbase-env.sh中。输入echo $JAVA_HOME来复制JAVA_HOME的路径,编辑HBaseconf目录下的hbase-env.sh文件,将其中的JAVA_HOME指向到Java的安装目录,最后保存设置。
- 编辑hbase-site.xml文件,在<configuration>标签中添加如下内容:
html
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///root/data/hbase/data</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/data/hbase/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
4.将Hbase的bin目录配置到/etc/profile中:vim /etc/profile,在etc/profile的文件末尾添加如下内容:
html
# SET HBASE_enviroment
HBASE_HOME=/app/hbase-2.1.1
export PATH=$PATH:$HBASE_HOME/bin
5.使刚刚的配置生效:source /etc/profile,输入命令start-dfs.sh来启动Hadoop,输入jps查看是否启动成功,接着我们输入start-hbase.sh来启动HBase,同样输入jps查看是否启动成功。
5.2 创建表
1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口;新建一个名为test的表:create 'test','data',继续在HBase中创建两张表,表名分别为:dept,emp,列都为:data,命令行:create 'dept','data' create 'emp','data'。
2.创建完毕,保存评测。
5.3 添加数据、删除数据、删除表
1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口。
2.在HBase中创建表mytable,列为data,并在列族data中添加三行数据:
行号分别为:row1,row2,row3;
列名分别为:data:1,data:2,data:3;
值分别为:zhangsan,zhangsanfeng,zhangwuji。
5.4 使用Java操作HBase
1.使用Java代码在HBase中创建表。命令行start-dfs.sh start-hbase.sh。代码实现如下:
java
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("dept");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes ("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表
tableName = TableName.valueOf("emp");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表
2.使用Java代码向HBase集群中创建表并添加数据。代码实现如下:
java
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("tb_step2");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表
Table table = connection.getTable(tableName);//获取Table对象
try {
byte[] row = Bytes.toBytes("row1"); //定义行
Put put = new Put(row); //创建Put对象
byte[] columnFamily = Bytes.toBytes("data"); //列簇
byte[] qualifier = Bytes.toBytes(String.valueOf(1)); //列
byte[] value = Bytes.toBytes("张三丰"); //值
put.addColumn(columnFamily, qualifier, value);
table.put(put); //向表中添加数据
row = Bytes.toBytes("row2"); //定义行
put = new Put(row); //创建Put对象
columnFamily = Bytes.toBytes("data"); //列簇
qualifier = Bytes.toBytes(String.valueOf(2)); //列
value = Bytes.toBytes("张无忌"); //值
put.addColumn(columnFamily, qualifier, value);
table.put(put); //向表中添加数据
} finally {
//使用完了要释放资源
table.close();
}
3.获取HBase中已存在表的数据并输出。代码实现如下:
java
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("t_step3");//定义表名
Table table = connection.getTable(tableName);//获取Table对象
//获取数据
Get get = new Get(Bytes.toBytes("row1")); //定义get对象
Result result = table.get(get); //通过table对象获取数据
// System.out.println("Result: " + result);
//很多时候我们只需要获取"值" 这里表示获取 data:1 列族的值
byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组
//将字节转成字符串
String valueStr = new String(valueBytes,"utf-8");
System.out.println("value:" + valueStr);
tableName = TableName.valueOf("table_step3");//定义表名
table = connection.getTable(tableName);//获取Table对象
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
try {
for (Result scannerResult: scanner) {
// System.out.println("Scan: " + scannerResult);
byte[] row = scannerResult.getRow();
System.out.println("rowName:" + new String(row,"utf-8"));
}
} finally {
scanner.close();
}
4.删除表。代码实现如下:
java
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("t_step4");
admin.disableTable(tableName); //禁用表
admin.deleteTable(tableName); //删除表
6 实验结果
6.1 Hbase数据库的安装
1.复制JAVA_HOME的路径
2.编辑HBaseconf目录下的hbase-env.sh文件
3.etc/profile的文件末尾添加内容
4.启动成功
6.2 创建表
1.Hbase shell命令行窗口
2.成功新建一个名为test的表
3.余下两张表创建成功
6.3 添加数据、删除数据、删除表
1.创建表mytable
6.4 使用Java操作Hbase
1.使用Java代码在HBase中创建表。
2.使用Java代码向HBase集群中创建表并添加数据。
3.获取HBase中已存在表的数据
4.删除表。