HBase 复习 ---- chapter03
1. shell命令操作HBase2. JavaAPI操作HBase
1. shell命令操作HBase
启动服务
./cmd-all-launch.sh 相对路径
/niit/home/cmd-all-launch.sh 绝对路径
3137 QuorumPeerMain
2562 SecondaryNameNode
3842 Jps
2181 NameNode
3749 HRegionServer
3625 HMaster
2348 DataNode
2764 ResourceManager
2878 NodeManager
启动 hbase 客户端指令
./cmd-hbase-shell.sh 相对路径
/usr/local/hbase-2.2.4/bin/hbase shell 绝对路径
退出 hbase 客户端指令
exit or ctrl+c
获取帮助文档
help
help "get"
查看 hbase 服务器状态
status
查看 hbase 服务器版本
version
---------------名称空间的操作-------------------------
查看所有的命名空间(MySQL 的数据库)
list_namespace
default -- 用户默认使用的命名空间
hbase -- hbase中存放的是HBase内置的表
展现 default 名称空间下的表
list
展现指定名称空间下的表
list_namespace_tables "hbase"
创建命名空间
create_namespace "niit"
创建特殊属性的名称空间
create_namespace "qdu",{"create_time"=>"2022-10-1"}
"create_time"=>"2022-10-1":创建时间
查看指定 namespace 的属性
hbase(main):004:0> describe_namespace "qdu"
DESCRIPTION
{NAME => 'qdu', create_time => '2022-10-1'}
Quota is disabled
修改 namespace 的属性
hbase(main):008:0> alter_namespace "qdu",{"METHOD"=>"set","authod"=>"andy","create_time"=>"2022-10 -28"}
Took 0.3171 seconds
hbase(main):009:0> describe_namespace "qdu"
DESCRIPTION
{NAME => 'qdu', authod => 'andy', create_time => '2022-10-28'}
Quota is disabled
Took 0.0258 seconds
注意:METHOD必须大写,值只能为set.
删除 namespace 的属性
hbase(main):012:0> alter_namespace "qdu",{"METHOD"=>"unset",NAME=>"create_time"}
Took 0.2521 seconds
hbase(main):013:0> describe_namespace "qdu"
DESCRIPTION
{NAME => 'qdu', authod => 'andy'}
Quota is disabled
Took 0.0189 seconds
注意:“METHOD”=>"unset"是指删除,不生效的意思。 NAME=>“create_time”:指定不生效的属性
删除命名空间
hbase(main):014:0> drop_namespace "niit"
Took 0.2917 seconds
hbase(main):015:0> list_namespace
NAMESPACE
default
hbase
qdu
3 row(s)
Took 0.0222 seconds
2. JavaAPI操作HBase
要创建一个配置文件,封装 hadoop + hbase 的配置 要连接一个 server,那么你这个 client 的配置是什么? hbase 的配置是什么? hbase-site.xml+hbase-default.xml 只有这两个文件吗? hbase 需要依赖 hadoop 运行,hbase 是运行在 HDFS 之上的 hadoop 的配置文件,一个八个
core-default.xml, core-site.xml,
hdfs-default.xml,hdfs-site.xml
mapred-default.xml, mapred-site.xml,
yarn-default.xml, yarn-site.xml
但是在进行配置封装的时候,没有封装hdfs-default.xml,hdfs-site.xml. org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
Configuration: core-default.xml, core-site.xml, mapred-default.xml, mapred-site.xml, yarn-default.xml, yarn-site.xml, hbase-default.xml, hbase-site.xml
如果通过JAVAAPI对配置属性进行设置? //设置第三方zookeeper组件的仲裁.(zookeeper的servers) conf.set(“hbase.zookeeper.quorum”, “192.168.56.104”);
获取连接(hbase client 去连接 hbase server) 我们 hbaseShell 指令? = hbase shell
Connection connection = ConnectionFactory.createConnection(conf);
获取操作表结构的对象
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
public class HBaseAdmin implements Admin {}
DDL 操作 创建表名对象 TableName
TableName userTable = TableName.valueOf("UserTable");
//create 'UserTable',"userinfo","userhome"
创建一个表由两个要素需要在创建表的时候进行定义。表名 + 列族 表除了名字还有属性? 属性如何设置?
TableDescriptorBuilder.setRegionReplication(3);
一:创建表 == create == admin.createTable(TableDescriptor tableDescriptor); TableDescriptor tableDescriptor:表描述器 如何获取表描述器?(我们以前讲过 java 的链式写法)
//在创建表描述器builder中,我们已经设置表名.
TableDescriptorBuilder htd = TableDescriptorBuilder.newBuilder(tableName);
htd.setRegionReplication(3);
ColumnFamilyDescriptorBuilder:这是一个列族描述器Builder
ColumnFamilyDescriptor of = ColumnFamilyDescriptorBuilder.of(columnFamily);
要将列族描述器放置到表描述器中.
htd.setColumnFamily(of);
TableDescriptor tableDescriptor = TableDescriptorBuilder.build();
二:更新表 == alter == admin.disableTable(tableName); admin.modifyTable(htd); admin.enableTable(tableName); 三:删除表 == drop == admin.disableTable(tableName); admin.deleteTable(tableName); 四:查询表 == list == admin.tableExists( TableName tableName)
获取操作表数据操作的对象 Hbase0.96之前获取方式
HTable table = new HTable(config, Bytes.toBytes(tablename));
Hbase0.96之后获取方式
Table usertable = connection.getTable(TableName.valueOf("UserTable"));
DML 操作 一:添加(修改)数据 == put == usertable.put(put);
put "student","1001","info:name","andy"
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
usertable.put(put); //执行put操作
二:删除数据 == deleteall + delete
Delete delete = new Delete(Bytes.toBytes(row)); == deleteall
delete .deleteColumns(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); == delete
三:查询数据 = scan == table.getScanner(scan);
Scan scan = new Scan();
ResultScanner resultScanner = table.getScanner(scan);
for(Result result : resultScanner){
// 一行数据包含很多个cell.
Cell[] cells = result.rawCells();
// 一个cell对象代表一个单元格
// 一个cell 行键 列族 列限定符 值 版本 类型
for(Cell cell : cells){
//得到 rowkey
System.out.println(" 行 键 :" +
Bytes.toString(CellUtil.cloneRow(cell)));
//得到列族
System.out.println(" 列 族 " +
Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(" 列 :" +
Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(" 值 :" +
Bytes.toString(CellUtil.cloneValue(cell)));
}
}
四:查询数据 = get == table.get(get);
Get get = new Get(Bytes.toBytes(rowKey)); //查询一行数据
get.addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier)); //查询一个cell的数据
Result result = table.get(get);
for(Result result : resultScanner){
Cell[] cells = result.rawCells();
for(Cell cell : cells){
System.out.println(" 行 键 :" +Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println(" 列 族 " +Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(" 列 :" +Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(" 值 :" +Bytes.toString(CellUtil.cloneValue(cell)));
}
}
精彩文章
发表评论