目录 1
1. 前言 3
2. 缩略语 3
3. 安装规划 3
3.1. 用户规划 3
3.2. 目录规划 4
4. 相关端口 4
5. 下载安装包 4
6. 修改配置文件 5
6.1. 修改策略 5
6.2. 修改conf/regionservers 5
6.3. 修改conf/hbase-env.sh 5
6.4. 修改conf/log4j.properties 6
6.5. 修改conf/hbase-site.xml 6
6.5.1. hbase.master.info.port 8
6.5.2. hbase.master.info.bindAddress 8
6.5.3. hbase.hregion.majorcompaction 8
6.5.4. zookeeper.session.timeout 9
6.5.5. 其它参数 9
7. 启动HBase 11
7.1. 启动Master 11
7.2. 启动RegionServer 11
7.3. 启动ThriftServer 11
7.4. 启动HBase rest server 13
7.4.1. Cluster-Wide 13
7.4.2. Namespace 14
7.4.3. Table 14
7.4.4. Get 15
7.4.5. Scan 15
7.4.6. Put 16
8. 基本HBase命令 17
9. 常用HBase命令 19
10. 备HMaster 20
11. 访问控制配置 20
11.1. 修改配置 20
11.2. 权限管理 20
11.2.1. 授权权限 20
11.2.2. 收回权限 20
11.2.3. 更改权限 21
11.2.4. 查看权限 21
12. HBase Web 21
12.1. Master Web 21
12.2. Region Web 21
13. 运维操作 22
13.1. 优雅重启RegionServer 22
13.2. region均衡 22
13.3. 分拆Region 22
13.4. 合并Region 23
13.5. 查看指定Region的数据 24
13.6. 如何迁移Region? 24
13.7. 如何查看Region大小? 24
13.8. WAL工具 25
13.9. Compact和Split 26
13.10. 是否可直接kill掉RegionServer进程? 26
13.11. 下线RegionServer 27
13.12. RowKey和RegionServer不一致问题 27
13.13. 快照迁移数据 27
13.13.1. 创建快照 27
13.13.2. 迁移快照文件 27
13.13.3. 恢复快照 28
13.13.4. 删除快照 28
13.13.5. 查看快照列表 29
附1:元数据 29
附2:基本概念 30
1)HBase和HDFS 30
2)Region&MemStore&StoreFile 31
3)StoreFile文件 31
4)Region name 31
附3:crontab监控脚本 32
附4:批量操作工具 32
附5:JVM基础知识 33
1)JPS命令 33
2)JVM内存 33
3)JVM GC(Garbage Collection,垃圾回收) 34
4)并行和并发 34
5)JVM的CMS垃圾回收 34
6)JVM内存参数 35
本文将HBase-2.2.1安装在Hadoop-3.1.2上,关于Hadoop-3.1.2的安装,请参见《基于zookeeper-3.5.5安装hadoop-3.1.2》一文。安装环境为64位CentOS-Linux 7.2版本。
本文将在HBase官方提供的quickstart.html文件的指导下进行,在docs/getting_started目录下可找到quickstart.html,或直接浏览在线的:http://hbase.apache.org/book/quickstart.html。
安装使用外置的ZooKeeper,有关ZooKeeper的安装,请参见《基于zookeeper-3.5.5安装hadoop-3.1.2》一文。
关于分布式安装,请浏览:http://hbase.apache.org/book/standalone_dist.html#distributed,关于HBase使用外置的ZooKeeper配置,请浏览:http://hbase.apache.org/book/zookeeper.html。所有在线的文档,均会出现在二进制安装包解压后的docs目录下。
缩写 |
全写 |
说明 |
JVM |
Java Virtual Matchine |
Java虚拟机 |
jps |
JVM Process Status |
Java虚拟机进程状态工具 |
HDFS |
Hadoop Distributed File System |
Hadoop分布式文件系统 |
HBase |
Hadoop Database |
Hadoop数据库 |
WAL |
Write-Ahead Log |
预写日志,类似于MySQL的binlog |
RS |
Region Server |
|
zk |
Zookeeper |
|
mr |
Mapreduce |
|
rs |
RegionServer |
|
DistCp |
Distributed Copy |
分布式复制 |
RFA |
RollingFileAppender |
Log4j的一种日志器类型,文件大小到达指定大小时产生一个新的文件 |
DRFA |
DailyRollingFileAppender |
Log4j的一种日志器类型,每天产生一个日志文件 |
|
安装用户名 |
运行用户名 |
安装和运行用户组名 |
HBase |
hbase |
hbase |
supergroup |
Hadoop |
hadoop |
hadoop |
|
Zookeeper |
zk |
zk |
Hadoop的默认用户组名为supergroup,为避免一些权限问题,所以最好HBase也置于相同用户组,以减少后续的麻烦。当然也可以在安装Hadoop时,改变配置项dfs.permissions.supergroup值来设置用户组,但不管如何,最好是同一用户组。
一般建立HBase和Hadoop共享同一个Zookeeper集群,所以独立安装部署Zookeeper集群。
为何Zookeeper的安装运行用户名为zk,而不是zookeeper?这是因为当用户名超过8个字符时,ps等一些命令的结果将不显示用户名,替代的是用户ID。
|
安装目录 |
HBase |
/data/hbase |
Hadoop |
/data/hadoop |
Zookeeper |
/data/zookeeper |
2888 |
ZooKeeper,如果是Leader,用来监听Follower的连接 |
3888 |
ZooKeeper,用于Leader选举 |
2181 |
ZooKeeper,用来监听客户端的连接 |
16010 |
hbase.master.info.port,HMaster的http端口 |
16000 |
hbase.master.port,HMaster的RPC端口 |
16030 |
hbase.regionserver.info.port,HRegionServer的http端口 |
16020 |
hbase.regionserver.port,HRegionServer的RPC端口 |
8080 |
hbase.rest.port,HBase REST server的端口 |
9095 |
hbase.thrift.info.port,HBase Thrift Server的http端口号 |
官网:http://hbase.apache.org/,在这里即可找到下载HBase的链接。
下载国内映像站点:http://mirror.bit.edu.cn/apache/hbase/,HBase-2.2.1版本的下载网址:http://mirror.bit.edu.cn/apache/hbase/2.2.1/。选择下载hbase-2.2.1-bin.tar.gz。
在一台机器上修改好,再批量复制到集群中的其它节点。使用批量命令工具mooon_ssh和批量上传文件工具mooon_upload即可达到目的。
可选的,如果Master到RegionServers间没有设置免密码登录,或者不会使用到start-hbase.sh和stop-hbase.sh,则可保留RegionServers文件为空。
regionservers类似于Hadoop的slaves文件,不需要在RegionServer机器上执行些修改。
将所有HRegionServers的IP或主机名一行一行的例举在在regionservers文件中,注意必须一行一个,不能一行多个。本文配置如下:
hadoop@test_64:~/hbase/conf> cat regionservers 192.168.31.30 192.168.31.31 192.168.31.32 |
需要在所有机器上做同样的操作,可以借助scp命令,先配置好一台,然后复制过去,主要修改内容如下。
# The java implementation to use. Java 1.6 required. export JAVA_HOME=/data/jdk |
上述/data/jdk是JDK的安装目录。
export HADOOP_HOME=/data/hadoop |
# Extra Java CLASSPATH elements. Optional. export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop |
这个设置是不是有点让人迷惑?CLASSPATH怎么指向了hadoop的conf目录?这个设置是让hbase能找到hadoop,名字确实没取好。
除此之外,还可以考虑在hbase的conf目录下建立hadoop的hdfs-site.xml软链接。
# Tell HBase whether it should manage it's own instance of Zookeeper or not. export HBASE_MANAGES_ZK=false |
如果HBASE_MANAGES_ZK值为true,则表示使用HBase自带的ZooKeeper,建议单独部署ZooKeeper,这样便于ZooKeeper同时为其它系统提供服务。
JVM项 |
值 |
说明 |
HBASE_THRIFT_OPTS |
export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS -Xmx2048m -Xms2048m" |
HBase Thrift JVM设置,-Xmx指定最大堆占用的内存,-Xms指定起始时分析的堆内存,如果物理内存为32G,可以考虑设置为2048m。 |
SERVER_GC_OPTS |
开始GC日志 |
可用来分析线程的停顿时长等,有三处SERVER_GC_OPTS,只需要取消任意一注释即可。 |
如果希望命令行执行“hbase shell”时不打屏INFO和WARN级别日志,可修改hbase-env.sh中的“HBASE_ROOT_LOGGER”。
# HBASE_ROOT_LOGGER=INFO,DRFA HBASE_ROOT_LOGGER=OFF,DRFA |
hbase.log.dir=/data/hbase/log |
log4j.logger.org.apache.hadoop.hbase.master.cleaner.CleanerChore=DEBUG |
hbase-site.xml是HBase的配置文件。默认的hbase-site.xml是空的,如下所示:
<configuration> |
没关系,就用它。不要用docs目录下的hbase-default.xml,这个会让你看得难受。
编辑hbase-site.xml,添加如下内容(摘自standalone_dist.html,搜索“Fully-distributed”):
false: standalone and pseudo-distributed setups with managed Zookeeper true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com". By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on.
|
“hbase.zookeeper.quorum”可以填写IP列表。hdfs://172.25.40.171:9001对应hdfs-site.xml中的“dfs.namenode.rpc-address”。“hbase.zookeeper.quorum”配置为ZooKeeper集群各节点主机名或IP。
如果HDFS是cluster模式,那么建议hbase.rootdir请改成集群方式,如:
|
即值为hdfs-site.xml中的dfs.nameservices值,再加上hbase目录。上述示例中的test,实际为hdfs-site.xml中的dfs.nameservices的值,core-site.xml中的fs.defaultFS也用到了。
更多的信息,可以浏览:http://hbase.apache.org/book/config.files.html。
用于指定HMaster的http端口。
用于指定HMaster的http的IP地址,如果不设定该值,可能使用IPv6地址。
MajorCompaction间隔时间,单位为毫秒,如果为0表示手工执行MajorCompaction。HBase为防止小文件过多,在必要时通过Compaction合并小文件,由两类Compaction组成:一是MinorCompaction,二是MajorCompaction。
MajorCompaction对所有StoreFile进行合并操作,而MinorCompaction只对部分StoreFile进行合并。
默认值为604800000毫秒,表示每7天执行一次MajorCompaction操作。MajorCompaction时性能影响十分严重,一般关闭自动MajorCompaction,而采取空闲时手工完成。
在HBase shell中手工MajorCompation:
major_compact 'tablename' |
或命令行中执行:
echo "tablename"|hbase shell |
major_compact使用方法:
Examples: Compact all regions in a table: // 合并整个表 hbase> major_compact 't1' hbase> major_compact 'ns1:t1' Compact an entire region: // 合并一个Region hbase> major_compact 'r1' Compact a single column family within a region: // 合并一个Region的一个列族 hbase> major_compact 'r1', 'c1' Compact a single column family within a table: // 合并一个表的一个列族 hbase> major_compact 't1', 'c1' |
默认为90秒(90000ms),RegionServer和ZooKeeper间的超时时长。当达到超时时间后,RegionServer会被ZooKeeper从RegionServer集群列表中清除,同时HBase Master会收到清除通知,然后HBase Master会对这台RegionServer的Region做Balance,让其它RegionServer接管,该参数决定了RegionServer在多长时间内可完成Failover。
参数名 |
默认值 |
说明 |
hbase.regionserver.thrift.port |
9090 |
ThriftServer的服务端口号 |
hbase.regionserver.thrift.http |
false |
是否为HTTP模式。注意要么是HTTP模式,要么是非HTTP模式,不能同时是HTTP模式,又是其它模式。 |
hbase.thrift.ssl.enabled |
false |
ThriftServer是否启用SSL |
hbase.master.hfilecleaner.ttl |
300000 |
单位为毫秒,默认5分钟,为org.apache.hadoop.hbase.master.cleaner.CleanerChore所使用,仅源代码文件StorefileRefresherChore.java和TimeToLiveHFileCleaner.java直接使用了hbase.master.hfilecleaner.ttl。如果使用ExportSnapshot集群间迁移数据,则该值要比最大表的迁移时间长,否则迁移过程中已迁移的表文件可能被删除,如果看到错误“Can't find hfile”,一般是这个原因,新版本将修复该BUG,此BUG由HBASE-21511引入。 |
hbase.cleaner.scan.dir.concurrent.size |
|
Cleaner线程数系数 |
hbase.hregion.majorcompaction |
604800000 |
单位为毫秒,默认为7天,Major Compact的周期,值为0时表示关闭自动Major Compact |
hbase.hregion.majorcompaction.jetter |
0.2 |
防止RegionServer在同一时间进行Major Compact |
hbase.hstore.compactionThreshold |
3 |
Minor Compact的最少文件数 |
hbase.hstore.compaction.max |
10 |
表示一次Minor Compact中最多选取10个StoreFile |
hbase.hregion.max.filesize |
10737418240 |
默认为10G,StoreFile达到此大小时分裂 |
hbase.hregion.memstore.flush.size |
134217728 |
单位为字节,默认为整128M,当一个MemStore达到该大小时,即Flush到HDFS生成HFile文件。 |
hbase.hregion.memstore.block.multiplier |
4 |
hbase-common /org/apache/hadoop/hbase/HConstants.java 系数值,当一个Region的大小达到(hbase.hregion.memstore.block.multiplier*hbase.hregion.memstore.flush.size)时,会阻塞该Region的写操作,并强制Flush。在Flush成功后才会恢复写操作,这个时候可看到错误“RegionTooBusyException: Over memstore limit”。 |
hbase.regionserver.global.memstore.upperLimit(老) hbase.regionserver.global.memstore.size(新) |
0.4 |
hbase-server /org/apache/hadoop/hbase/io/util/MemorySizeUtil.java 浮点值,RegionServer全局memstore的大小。 当RegionServer的memstore超过这个比率,该RegionServer的所有update都会被阻塞,所以应当避免RegionServer出现memstore总大小超过upperLimit。 |
hbase.regionserver.global.memstore.lowerLimit(老) hbase.regionserver.global.memstore.size.lower.limit(新) |
0.95 |
hbase-server /org/apache/hadoop/hbase/io/util/MemorySizeUtil.java 浮点值,当RegionServer的memstore超过这个比率时,即使没有Region达到Flush,MemstoreFlusher也会挑选一个Region去Flush。 |
hbase.hstore.compaction.kv.max |
10 |
Compact时每次从HFile中读取的KV数 |
hbase.hstore.blockingStoreFiles |
10 |
当StoreFile文件数超过该值时,则在Flush前先进行Split或Compact,并阻塞Flush操作。直到完成或达到hbase.hstore.blockingWaitTime指定的时间后才可以Flush。当RegionServer日志大量出现“has too many store files; delaying flush up to”时表示需要调整该值,一般可以调大些,比如调成100。 |
hbase.hstore.blockingWaitTime |
90000 |
单位为毫秒,默认为90秒 |
hbase.hregion.memstore.mslab.enabled |
true |
MemStore-Local Allocation Buffer,是否开启mslab,作用是减少因内存碎片导致的Full GC |
hbase.regionserver.regionSplitLimit |
1000 |
单台RegionServer管理的最多Region个数 |
hbase.regionserver.logroll.period |
3600000 |
单位为毫秒,默认为1小时,WAL文件滚动时间间隔 |
hbase.server.thread.wakefrequency |
10000 |
定时检查是否需要Compact,检查周期为:(hbase.server.thread.wakefrequency*hbase.server.compactchecker.interval.multiplier) |
hbase.server.compactchecker.interval.multiplier |
1000 |
定时检查是否需要Compact,检查周期为:(hbase.server.thread.wakefrequency*hbase.server.compactchecker.interval.multiplier) |
hbase.thrift.info.port |
9095 |
信息WEB端口,如果值小于0,则不会开启WEB |
hbase.thrift.info.bindAddress |
0.0.0.0 |
信息WEB地址,默认为“0.0.0.0” |
hbase.regionserver.hlog.blocksize |
|
WALUtil.java 当WAL的大小达到 (hbase.regionserver.hlog.blocksize *hbase.regionserver.maxlogs)时,触发Flush |
hbase.regionserver.maxlogs |
|
AbstractFSWAL.java |
hbase.regionserver.logroll.multiplier |
|
AbstractFSWAL.java 系数值,注意区分 hbase.hregion.memstore.block.multiplier |
停止Master,只需要将下列的start改成stop即可。
hbase-daemon.sh start master |
停止RegionServer,只需要将下列的start改成stop即可。
hbase-daemon.sh start regionserver |
HBase有两个版本的ThriftServer,对应两套不同的不兼容的接口实现:thrift和thrift2,其中thrift2是后加入的。从HBase2.X开始,两个版本除接口不同,其它是共享的。
启动ThriftServer使用如下语句,而停止ThriftServer只需将start改成stop即可。
hbase-daemon.sh start thrift2 --framed -nonblocking |
正式环境一般不要使用Java版本的“-nonblocking”模式,因为它是单线程的。而应当使用“-hsha”或“-threadedselector”,推荐使用并发最强的“-threadedselector”模式。
有关“hbase thrift2”的参数,可执行“hbase thrift2 --help”查看到,“hbase thrift”也类似。
hbase-daemon.sh start thrift2 --framed -hsha --workers 30或 hbase-daemon.sh start thrift2 --framed -hsha -w 30或 hbase thrift2 --framed -hsha -w 30 |
注意,参数是“-hsha”,而不是“--hsha”,其中“-f”和“--framed”等价,“-w”和“--workers”等价。
hbase-daemon.sh start thrift2 --framed -threadedselector -s 10 -m 10 -w 50或 hbase thrift2 --framed -threadedselector -s 10 -m 10 -w 50 |
其中,-s”和“--selectors”等价,“-m”和“--minWorkers”等价。
此错误表示有请求访问了不存在的HBase表。
ERROR [thrift-worker-18] client.AsyncRequestFutureImpl: Cannot get replica 0 location for |
队列大小偏小,启动ThriftServer时指定队列大小:“-q 10000”或“--queue -10000”。
WARN [Thread-16] server.TThreadedSelectorServer: ExecutorService rejected execution! java.util.concurrent.RejectedExecutionException: Task org.apache.thrift.server.Invocation@1642f20a rejected from org.apache.hadoop.hbase.thrift.THBaseThreadPoolExecutor@7cc22596[Running, pool size = 20, active threads = 20, queued tasks = 1000, completed tasks = 32792177] |
错误相关配置项:hbase.hregion.memstore.block.multiplier和hbase.hregion.memstore.flush.size,前者默认值为4,后者默认值为128MB。出错此错误时,可考虑将hbase.hregion.memstore.block.multiplier调大为8。
INFO [thrift-worker-2] client.RpcRetryingCallerImpl: RegionTooBusyException: Over memstore limit=512.0M, regionName=f146450279edde75342d003affa36be6, server=hadoop003,16020,1572244447374 at org.apache.hadoop.hbase.regionserver.HRegion.checkResources(HRegion.java:4421) at org.apache.hadoop.hbase.regionserver.HRegion.put(HRegion.java:3096) at org.apache.hadoop.hbase.regionserver.RSRpcServices.mutate(RSRpcServices.java:2877) |
错误相关配置项:hbase.hregion.memstore.block.multiplier和hbase.hregion.memstore.flush.size,前者默认值为4,后者默认值为128MB。
INFO [thrift-worker-24] client.RpcRetryingCallerImpl: Exception: Over memstore limit=512.0M, regionName=f80b7247cce17f3faac8731212ce43ba, server=hadoop003,16020,1572244447374 at org.apache.hadoop.hbase.regionserver.HRegion.checkResources(HRegion.java:4421) at org.apache.hadoop.hbase.regionserver.HRegion.put(HRegion.java:3096) at org.apache.hadoop.hbase.regionserver.RSRpcServices.mutate(RSRpcServices.java:2877) 。。。 , details=row '13871489517670268' on table 'test' at region=test,13628864449,1572513486889.f80b7247cce17f3faac8731212ce43ba., hostname=hadoop003,16020,1572244447374, seqNum=10634659, see https://s.apache.org/timeout |
默认端口号为8080,可使用命令行参数“-p”或“--port”指定为其它值。
bin/hbase-daemon.sh start rest -p 8080 |
简单访问示例(假设在10.143.136.232上启动了HBase rest server):
http://10.143.136.232:8080/version/cluster
http://10.143.136.232:8080/status/cluster
http://10.143.136.232:8080/
http://10.143.136.232:8080/test/regions
http://10.143.136.232:8080/test/100000797550117
http://10.143.136.232:8080/test/100000797550117/cf1:field0
更多请浏览:
http://hbase.apache.org/book.html#_rest
Endpoint |
HTTP Verb |
说明 |
示例 |
/version/cluster |
GET |
查看HBase版本 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/version/cluster" |
/status/cluster |
GET |
查看集群状态 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/status/cluster" |
/ |
GET |
列出所有的非系统表 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/" |
注:可浏览器中直接打开,如:http://10.143.136.232:8080/version/cluster。
Endpoint |
HTTP Verb |
说明 |
示例 |
/namespaces |
GET |
列出所有namespaces |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/namespaces/" |
/namespaces/namespace |
GET |
查看指定namespace的说明 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/namespaces/special_ns" |
/namespaces/namespace |
POST |
创建一个新的namespace |
curl -vi -X POST \ -H "Accept: text/xml" \ "example.com:8000/namespaces/special_ns" |
/namespaces/namespace/tables |
GET |
列出指定namespace下的所有表 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/namespaces/special_ns/tables" |
/namespaces/namespace |
PUT |
修改一个已存在的namespace |
curl -vi -X PUT \ -H "Accept: text/xml" \ "http://example.com:8000/namespaces/special_ns |
/namespaces/namespace |
DELETE |
删除一个namespace,前提是该namespace已为空 |
curl -vi -X DELETE \ -H "Accept: text/xml" \ "example.com:8000/namespaces/special_ns" |
注:斜体部分是需要输入的。
Endpoint |
HTTP Verb |
说明 |
示例 |
/table/schema |
GET |
查看指定表的schema |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/schema" |
/table/schema |
POST |
使用schema创建一个新的表或修改已存在表的schema |
curl -vi -X POST \ -H "Accept: text/xml" \ -H "Content-Type: text/xml" \ -d ' "http://example.com:8000/users/schema" |
/table/schema |
PUT |
使用schema更新已存在的表 |
curl -vi -X PUT \ -H "Accept: text/xml" \ -H "Content-Type: text/xml" \ -d ' "http://example.com:8000/users/schema" |
/table/schema |
DELETE |
删除表 |
curl -vi -X DELETE \ -H "Accept: text/xml" \ "http://example.com:8000/users/schema" |
/table/regions |
GET |
列出表的所有regions |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/regions |
Endpoint |
HTTP Verb |
说明 |
示例 |
/table/row/column:qualifier/timestamp |
GET |
取指定表指定列族下指定列的指定时间戳的值,返回的值为经过base64编码的,因此使用时需要做base64解码 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/row1"
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/row1/cf:a/1458586888395" |
/table/row/column:qualifier |
GET |
取指定表的指定列族下指定列的值 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/row1/cf:a"
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/row1/cf:a/" |
/table/row/column:qualifier/?v=number_of_versions |
GET |
取指定表的指定列族下指定列的指定版本值 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/row1/cf:a?v=2" |
Endpoint |
HTTP Verb |
说明 |
示例 |
/table/scanner/ |
PUT |
创建一个scanner |
curl -vi -X PUT \ -H "Accept: text/xml" \ -H "Content-Type: text/xml" \ -d ' "http://example.com:8000/users/scanner/" |
/table/scanner/ |
PUT |
带Filter创建一个scanner,过滤器可以写在一个文本文件中,格式如: { "type": "PrefixFilter", "value": "u123" }
|
curl -vi -X PUT \ -H "Accept: text/xml" \ -H "Content-Type:text/xml" \ -d @filter.txt \ "http://example.com:8000/users/scanner/" |
/table/scanner/scanner-id |
GET |
取下一批数据,如果已无数据,则返回的HTTP代码为204 |
curl -vi -X GET \ -H "Accept: text/xml" \ "http://example.com:8000/users/scanner/145869072824375522207" |
table/scanner/scanner-id |
DELETE |
删除指定的scanner,释放资源 |
curl -vi -X DELETE \ -H "Accept: text/xml" \ "http://example.com:8000/users/scanner/145869072824375522207" |
Endpoint |
HTTP Verb |
说明 |
示例 |
/table/row_key |
PUT |
往指定表写一行数据,注意行键、列族、列名和列值都必须采用base64编码 |
curl -vi -X PUT \ -H "Accept: text/xml" \ -H "Content-Type: text/xml" \ -d ' "http://example.com:8000/users/fakerow"
curl -vi -X PUT \ -H "Accept: text/json" \ -H "Content-Type: text/json" \ -d '{"Row":[{"key":"cm93NQo=", "Cell": [{"column":"Y2Y6ZQo=", "$":"dmFsdWU1Cg=="}]}]}'' \ "example.com:8000/users/fakerow" |
通过执行“hbase shell”进入命令行操作界面。详细请浏览官方文档:quickstart.html。
# 查看有哪些表 hbase(main):003:0> list
hbase(main):003:0> create 'test', 'cf' # 创建表test,一个列族cf 0 row(s) in 1.2200 seconds hbase(main):003:0> list 'test'
# 只看指定namespace下的表 list_namespace_tables 'default'
hbase(main):003:0> desc 'test' # 查看表状态
1 row(s) in 0.0550 seconds hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1' # 往表test的cf列族的a字段插入值value1 0 row(s) in 0.0560 seconds hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2' 0 row(s) in 0.0370 seconds hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3' 0 row(s) in 0.0450 seconds
hbase(main):007:0> scan 'test' # 扫描表test ROW COLUMN+CELL row1 column=cf:a, timestamp=1288380727188, value=value1 row2 column=cf:b, timestamp=1288380738440, value=value2 row3 column=cf:c, timestamp=1288380747365, value=value3 3 row(s) in 0.0590 seconds
# 带条件scan hbase(main):007:0> scan 'test',{LIMIT=>1} hbase(main):007:0> scan 'test',{LIMIT=>1,STARTROW=>'0000'}
hbase(main):008:0> get 'test', 'row1' # 从表test取一行数据 COLUMN CELL cf:a timestamp=1288380727188, value=value1 1 row(s) in 0.0400 seconds
# 取某列的数据 get 'test', 'row1', 'cf1:col1' # 或者 get 'test', 'row1', {COLUMN=>'cf1:col1'}
语法: get
查表行数第二种方法(非HBase shell命令,下列的test为表名):
以下命令均直接在HBase shell中运行,包括“import”部分:
备HMaster可以有0到多个,配置和主HMaster完全相同,所以只需要复制一份已配置好的HMaster过去即可,然后同样的命令启动。启动好后,一样可以执行HBase shell命令。
为启用HBase的访问控制,需在hbase-site.xml文件中增加如下两个配置项:
可以通过HBase shell进行权限管理,可以控制表(Table)和列族(Column Family)两个级别的权限,superuser为超级用户:
|