医院行业网站,建设资格执业注册中心网站,网站策划的具体内容是什么,宝塔为什么要安装WordpressHBase提供了一个非常方便的命令行交互工具HBase Shell。通过HBase Shell#xff0c;HBase可以与MySQL命令行一样创建表、索引#xff0c;也可以增加、删除和修改数据#xff0c;同时集群的管理、状态查看等也可以通过HBase Shell实现。
一、数据定义语言
数据定义语言HBase可以与MySQL命令行一样创建表、索引也可以增加、删除和修改数据同时集群的管理、状态查看等也可以通过HBase Shell实现。
一、数据定义语言
数据定义语言Data Definition LanguageDDL包括数据库表的创建、修改等语句。
1创建表
创建表的语句如下
create s_behavior, {NAME pc} , {NAME ph}
该语句创建了一个s_behavior表用来存储用户的行为数据这个表有两个列族列族pc用来存储用户PC端的用户行为数据列族ph用来存储用户手机端的用户行为数据。2查看所有表
查看所有表的语句如下
list
该语句会列出HBase数据库中所有已经创建的表。3查看已创建的表
查看已创建的表的语句如下
describe s_behavior虽然在创建表的时候没有指定任何属性但是HBase默认会给表设置一些属性 1BLOOMFILTER布隆过滤器。做Scan操作时用来排除待扫描的存储文件第9章会有详细描述。 2IN_MEMORY数据是否常驻块缓存。一般只有HBase系统的元数据表才会设置为true。 3VERSIONS对这个表HBase应该保留多少个数据版本。HBase对表的数据行可以保留多个数据版本以时间戳来区分。 4KEEP_DELETED_CELLS保留删除的数据。意味着可以通过Get或者Scan请求获取已经被删除的数据如果数据删除后经过了一次大合并那么这些删除的数据也会被清理只要这行数据的时间戳在查询的时间范围即可。注意如果需要开启集群间复制则这个属性必须为true否则可能导致数据复制失败。 5DATA_BLOCK_ENCODING数据块编码。用类似于压缩算法的编码形式来节省存储空间主要是针对行键用时间换空间默认情况下不启用数据块编码第9章会有详细描述。 6COMPRESSION压缩方式。HBase提供了多种压缩方式如Snappy、LZO、gzip等用来在数据存储到磁盘之前对数据进行压缩以减少存储空间。第9章也会详细介绍并对比各种压缩方式。 7TTL存活时间Time To Live数据的有效时长。超过有效时长的数据在大合并的时候会被删除。 8BLOCKSIZEHBase读取数据的最小单元。设置过大会导致读取很多不需要的数据过小则会产生更多的索引文件默认大小为64 KB。 9REPLICATION_SCOPE集群间数据复制的开关。当集群间数据复制配置好后REPLICATION_SCOPE1表示开启复制。默认值为0表示不开启复制。
4修改表
修改表的模式schema之前需要先将表下线然后执行修改的命令再上线。下面的代码将s_behavior表修改为开启集群间复制
disable s_behavior
alter s_behavior,
{NAMEcf, REPLICATION_SCOPE1, KEEP_DELETED_CELLS TRUE}enable s_behavior二、数据操纵语言
数据操纵语言Data Manipulation LanguageDML包括插入、获取、扫描数据的put命令、get命令、scan命令以及删除数据的delete命令、deleteall命令和truncate命令。
1put命令
put命令用来插入一行数据到HBase表。
格式
put table,rowkey,列族:列限定符,值
示例
hbase(main):004:0 put s_behavior,12345_1516592489001_1,pc:v,1001
0 row(s) in 0.2020 secondshbase(main):005:0 put s_behavior,12345_1516592489001_1,ph:o,1001
0 row(s) in 0.0050 second
第一条命令插入一条用户PC端行为数据
第二条命令插入一条用户手机端行为数据。
注意两条命令行键相同只是指定了不同的列族因此实际上两条数据在HBase中逻辑上是同一条数据。之后用该行键可以唯一地定位到这两个列族的数据。2get命令
get命令用来根据行键获取HBase表的一条记录。
格式
get table,rowkey
示例
使用get命令通过行键获取表s_behavior的一行数据包括这行数据的所有列族
hbase(main):006:0 get s_behavior,12345_1516592489001_1
COLUMN CELL
pc:v timestamp2022-01-24T19:33:18.352, value1001
ph:o timestamp2022-01-24T19:33:35.071, value1001
2 row(s) in 0.0330 seconds通过给get命令指定时间戳来获取一行数据某个时刻的镜像
hbase(main):007:0 get s_behavior,12345_1516592489001_1 , {TIMESTAMP 1643023998352}
COLUMN CELL
pc:v timestamp2022-01-24T19:33:18.352, value1001
1 row(s) in 0.0120 secondsget命令也支持获取数据的多个版本但是需要在创建表的语句中指定VERSIONS属性。先修改表支持多个版本然后用get命令获取多个版本的数据
hbase(main):008:0 alter s_behavior,NAMEpc,VERSIONS 3
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9370 secondshbase(main):009:0 put s_behavior,12345_1516592489001_1,
pc:v,1002
0 row(s) in 0.0100 secondshbase:010:0 get s_behavior,12345_1516592489001_1,{COLUMN pc:v,VERSIONS2}
COLUMN CELL
pc:v timestamp2022-01-24T19:49:20.398, value1002
pc:v timestamp2022-01-24T19:33:18.352, value1001
1 row(s)Took 0.0266 seconds3scan命令
scan命令用来扫描表的数据。scan命令是HBase数据查询命令中最复杂的命令需要特别注意查询的数据量以免由于扫描数据过大导致HBase集群出现响应延迟。
格式
scan table
示例
使用scan命令来查询表s_behavior中的所有记录
hbase(main):012:0* scan s_behavior
ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:49:20.398, value1002 12345_1516592489001_1 columnph:o, timestamp2022-01-24T19:33:35.071, value1001
1 row(s) in 0.0120 seconds1获取时间区间内数据
示例
使用时间区间获取“1643021990187时间戳1643023998353”的数据
hbase(main):013:0 scan s_behavior, {TIMERANGE [1643021990187,1643023998353]}
ROW COLUMNCELL
12345_1516592489001_1 columnph:o, timestamp2022-01-24T19:33:18.352, value1001
1 row(s) in 0.0190 seconds2获取多个版本数据
示例
使用VERSIONS参数获取表的两个版本数据
hbase(main):003:0* scan s_behavior, {VERSIONS2}
ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:49:20.398, value1002
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:33:18.352, value1001
12345_1516592489001_1 columnph:o, timestamp2022-01-24T19:33:35.071, value1001
1 row(s) in 0.1200 seconds3获取用户前几行数据
示例
获取ID为12345的用户的前5行数据
hbase(main):013:0* scan s_behavior, {FILTER PrefixFilter(12345_) ,COLUM
NS [pc],LIMIT5}ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp1521442781396, value1002
12345_1516592489001_2 columnpc:v, timestamp1521442781447, value1003
12345_1516592489001_3 columnpc:v, timestamp1521442781471, value1004
12345_1516592489001_4 columnpc:v, timestamp1521442781492, value1005
12345_1516592489001_5 columnpc:v, timestamp1521442781513, value1006
5 row(s) in 0.0240 seconds因为表s_behavior的行键都是以用户ID开头所以可以使用一个前缀过滤器。注意需要在用户ID12345后面带上下划线否则会匹配到行键为123450_xxx等类似的数据。
4获取某个用户某个时间区间内产生的PC端行为数据
scan命令可以指定扫描开始和结束行键。
示例
获取ID为12345的用户的某个时间区间内产生的PC端行为数据使用STARTROW、STOPROW参数指定扫描一个前闭后开的区间即“STARTROW行键STOPROW”
hbase(main):014:0 scan s_behavior, {STARTROW
12345_1516592489001 ,STOPROW12345_15165924890
02 ,COLUMNS [pc]}ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:33:35.071, value1002
12345_1516592489001_2 columnpc:v, timestamp2022-01-24T19:34:01.012, value1003
12345_1516592489001_3 columnpc:v, timestamp2022-01-24T19:34:01.012, value1004
12345_1516592489001_4 columnpc:v, timestamp2022-01-24T19:34:02.062, value1005
12345_1516592489001_5 columnpc:v, timestamp2022-01-24T19:34:02.076, value1006
12345_1516592489001_6 columnpc:v, timestamp2022-01-24T19:34:03.089, value1007
12345_1516592489001_7 columnpc:v, timestamp2022-01-24T19:34:04.011, value1008
12345_1516592489001_8 columnpc:v, timestamp2022-01-24T19:34:05.171, value1009
8 row(s) in 0.0320 seconds5获取用户对某种商品的行为数据
示例
第一条命令查询表s_behavior中列值等于1001的数据第二条命令查询表s_behavior中列值包含1002的数据
hbase(main):015:0 scan s_behavior, FILTERValueFilter(,binary:1001)
ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:33:18.352, value1001
12345_1516592489001_1 columnph:o, timestamp2022-01-24T19:33:35.071, value1001
1 row(s) in 0.0430 secondshbase(main):016:0 scans_behavior,FILTERValueFilter(,substring:1002)
ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:33:18.352, value1002
1 row(s) in 0.0200 seconds6获取某个用户行为数据的行键
示例
获取ID为12345的用户的行为数据行键
hbase(main):012:0 scan s_behavior, {FILTER PrefixFilter(12345) AND
KeyOnlyFilter() , LIMIT3}ROW COLUMNCELL
12345_1516592489001_1 columnpc:v, timestamp2022-01-24T19:49:20.398, value
12345_1516592489001_1 columnph:o, timestamp2022-01-24T19:33:35.071, value
12345_1516592489001_2 columnpc:v, timestamp2022-01-24T19:35:32.011, value
12345_1516592489001_3 columnpc:v, timestamp2022-01-24T19:35:33.169, value
3 row(s) in 0.0470 seconds4delete命令、deleteall命令和truncate命令
HBase提供了delete、deleteall和truncate命令分别用来删除列、行和表的数据。
1delete命令删除某列数据。
格式
delete table, rowkey, 列族:列限定符, [time stamp]
示例
使用下面的命令可以删除行键为12345_1516592489001_1的数据行中列族为ph、列限定符为o的数据
hbase(main):014:0 delete s_behavior, 12345_1516592489001_1 ,ph:o
0 row(s) in 0.0470 seconds2deleteall命令删除整行数据。
格式
deleteall table, rowkey
示例
使用下面的命令可以删除了行键为12345_1516592489001_1的数据行
hbase(main):015:0 deleteall s_behavior, 12345_1516592489001_1
0 row(s) in 0.0090 seconds3truncate命令删除整表数据。
格式
truncate table示例
使用下面的命令可以删除用户行为表s_behavior中的所有数据
hbase(main):016:0 truncate s_behavior
Truncating s_behavior table (it may take a while):
- Disabling table...
- Truncating table...
0 row(s) in 3.4640 seconds三、其他常用的Shell命令
1复制状态查看
当HBase开启了集群间复制时使用status命令可以查看复制的状态包括复制延迟、待复制日志文件队列大小等。
示例
hbase(main):017:0 status replication
version 2.4.93 live servers
master1: SOURCE: PeerID1, AgeOfLastShippedOp4773835960, SizeOfLogQueue2677, TimeStampsOfLastShippedOpThu Jan 01 08:00:00 CST 1970, Replication Lag1521448279318 SINK :AgeOfLastAppliedOp0, TimeStampsOfLastAppliedOpMon Dec 25 17:23:16 CST 2017
slave1: SOURCE: PeerID1, AgeOfLastShippedOp5986238820, SizeOfLogQueue1665, TimeStampsOfLastShippedOpThu Jan 01 08:00:00 CST 1970, Replication Lag1521448277282 SINK :AgeOfLastAppliedOp0, TimeStampsOfLastAppliedOpMon Dec 25 11:10:14 CST 2017
master2: SOURCE:PeerID1, AgeOfLastShippedOp24121908, SizeOfLogQueue7, TimeStampsOfLastShippedOpMon Mar 19 09:46:36 CST 2018, Replication Lag24281038 SINK : AgeOfLastAppliedOp0, TimeStampsOfLastAppliedOpTue Mar 13 17:02:06 CST 20182分区拆分
实时在线集群一般会禁用自动拆分以免影响性能因此当存储文件大小达到某个值后需要手动或者使用自动化程序将分区做拆分。例如下面的代码将用户行为表s_behavior拆分为两个分区由于行键以用户ID开始而用户ID的第一个字符取值范围为09中值为5因此可以使用5作为拆分后两个分区的分割字符
hbase(main):018:0 split s_behavior,5
0 row(s) in 0.1060 seconds3分区大合并
实时在线集群会禁止大合并应等到请求的非高峰期来定时做大合并。
示例
手动触发大合并来压缩表s_behavior的分区分区名称可以在HBase Web UI找到
hbase(main):040:0 major_compacts_behavior,,1511878479015.e933a5867bd5253211a4ef90e549192f.
0 row(s) in 0.0200 seconds4负载均衡开关
要对集群进行滚动升级或者想要关闭自动负载均衡而采用手动负载均衡模式可以使用下面的命令来开启或者关闭自动负载均衡
hbase(main):019:0 balance_switch true
true
0 row(s) in 0.0220 secondshbase(main):020:0 balance_switch false
true
0 row(s) in 0.0090 seconds5分区手动迁移
如果有几个比较大的或者负载高的分区被分配到同一个分区服务器那么这台分区服务器可能会成为整个HBase集群的瓶颈这时候可以手动将这些分区迁移到负载低的分区服务器。
分区迁移命令格式
move EncodedRegionName,’destServerName’
示例
EncodedRegionName的值是RegionName值的后缀部分destServerName是在HBase Web UI上的分区服务器的全名。
hbase(main):002:0 move e933a5867bd5253211a4ef90e549192f, master2,16020,1513049558323
0 row(s) in 0.0790 seconds6HBase运行Ruby脚本
在$HBASE_HOME/bin目录中有几个扩展名为rb的文件可以直接使用HBase来运行这些Ruby脚本。
格式
./hbase org.jruby.Main PATH_TO_SCRIPT
示例
[hadoopmaster1 bin]$ ./hbase org.jruby.Main get-active-master.rb
SLF4J: Class path contains multiple
SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.10.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hbase-2.4.9/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
master1文章来源《HBase入门与实践第2版》 作者彭旭 文章内容仅供学习交流如有侵犯联系删除哦