- java坏境
centos安装java - hadoop环境
hadoop安装 - hbase配置
vi /etc/profile.d/hadoop-eco.sh
写入:
Hbase_HOME=/opt/hbase
PATH=$Hbase_HOME/bin:$PATH
生效:
source /etc/profile.d/hadoop-eco.sh
- 下载hbase到linux
- hbase模式
- 单机模式
创建data目录,这里放在/opt/hbase/data
mkdir data
进入hbase配置目录
cd hbase/conf
修改两个配置文件hbase-env.sh和hbase-site.xml
hbase-env.shexport JAVA_HOME=/opt/jdk export Hbase_MANAGES_ZK=true
hbase-site.xmlhbase.rootdir file://opt/hbase/data hbase.cluster.distributed false - 分布式模式
- 进入conf目录
cd /opt/hbase/conf - 编辑regionservers
vi regionservers - 添加从机的ip slaver1 slaver2
- 更改hbase-site.xml文件,把hbase.cluster.distributed设置为true
- 把hbase文件克隆到从机
- 把/etc/profile.d/hadoop-eco.sh克隆到从机,并执行
source /etc/profile.d/hadoop-eco.sh
- 进入conf目录
- 单机模式
开启服务 start-hbase.sh 查看版本: hbase version jps: 能看到HMaster web端访问:16010Hbase shell
对hbase的表的理解,在mysql的基础上,在列的基础上多了列簇,列簇是列的集合;存储数据的数据结构是map,key是时间戳,val才是真正的值
命名空间:命名空间相当于myslq的库- 创建自定义命名空间
create_namespace 'my_ns' - 显示所有命名空间
list_namespace - 更改命名空间属性
alter_namespace 'my_ns',{METHOD=>'set','PROPERTY_NAME'=>'PROPERTY_VALUE'} - 查看命名空间属性
describe_namespace 'my_ns' - 删除命名空间
drop_namespace 'my_ns'
- 创建表
create '表名称', '列簇1', '列簇2', ….'列簇n' - 指定命名空间
create 'my_ns:my_table', 'my_col1' - 查看表属性
describe 'my_ns:my_table' - 启用/禁用表
enable/disable 'my_ns:my_table' - 检查表是否启用
is_enabled 'my_ns:my_table' - 改变表属性,改变my_table表列簇my_col1的版本号
alter 'my_ns:my_table', {NAME=>'my_col1', VERSION=>5} - 添加列簇,该列簇维护3个版本
alter 'my_ns:my_table', {NAME=>'my_col3', VERSIONS=>3 - 删除列簇
alter 'my_ns:my_table', {NAME=>'my_col3', METHOD=>'delete'} - 删除表数据,删除前先禁用表
truncate 'my_ns:my_table' - 删除表,删除前先禁用表
drop 'my_ns:my_table' - 查看指定命名空间下的表
list_namespace_tables 'default'
- 写数据
put '库名:表名称', 'rowkey值', '列簇:列名','值' - 读数据
get '库名:表名称', 'rowkey值' - 删除整行
deleteall '表名称', 'rowkey值' - 删除指定行的指定列簇的值
delete '表名称', 'rowkey值', '列簇' - 查看所有记录
scan '表名称' - 查看某列簇所有记录
scan '表名称', '列簇' - 统计记录数
count '表名称' - 制作快照,先停用表
snapshot 'my_ns:my_table', 'myTableSnapShot' - 从快照克隆数据
clone_snapshot 'myTableSnapShot', 'my_ns:my_new_table' - 删除快照
delete_snapshot 'myTableSnapShot'
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HbaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class HbaseConn {
public static void main(String[] args) throws IOException {
// 创建配置文件
Configuration conf = HbaseConfiguration.create();
// 从zookeeper的管理中调用hbase
conf.set("hbase.zookeeper.quorum", "192.168.137.122");
// 创建连接
Connection conn = ConnectionFactory.createConnection(conf);
// 获取Admin对象:可以对表进行操作
Admin admin = conn.getAdmin();
// 判断表是否存在,如果不存在则会创建,如果存在则删除
// 表名: my_ns:my_054yxd
TableName tableName = TableName.valueOf("my_ns:stu");
if (admin.tableExists(tableName)){
System.out.println("存在表");
// 1.判断表是否启用
boolean state = admin.isTableEnabled(tableName);
System.out.println(tableName + (state?"启用":"禁用"));
// 2.如果启用就禁用
if (state){
admin.disableTable(tableName);
}
// 3.禁用之后删除
admin.deleteTable(tableName);
System.out.println("删除成功");
}else {
System.out.println("不存在");
// todo 不存在则创建表
// 创建表
TableDescriptorBuilder builder =
TableDescriptorBuilder.newBuilder(tableName);
// 创建列簇
ColumnFamilyDescriptor cfd =
ColumnFamilyDescriptorBuilder
.newBuilder("info".getBytes()).build();
// 设置列簇
builder.setColumnFamily(cfd);
// 构建表结构
TableDescriptor table = builder.build();
// 创建
admin.createTable(table);
// 4.判断是否创建成功
System.out.println(
admin.tableExists(tableName) ? "创建成功" : "创建失败");
}
}
}



