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

}

}

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。