第 3 章 Hbase安装
3.1 Hbase安装前
3.1.1 启动Zookeeper
首先保证Zookeeper集群的正常部署,并启动之:
[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start [atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkServer.sh start [atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkServer.sh start
3.1.2 启动Hadoop
Hadoop集群的正常部署并启动:
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
3.1.3 HBase的解压
解压HBase到指定目录:
[atguigu@hadoop102 software]$ tar -zxvf HBase-1.3.1-bin.tar.gz -C /opt/module
3.2 HBase的安装
3.2.1 HBase的配置
修改HBase对应的配置文件。
1)HBase-env.sh修改内容: 可不用改 因为profile已经把JAVA_HOME设为全局了!
export JAVA_HOME=/opt/module/jdk1.6.0_144 export HBASE_MANAGES_ZK=false
2)HBase-site.xml修改内容:
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://hadoop102:9000/HBase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 --> <property> <name>hbase.master.port</name> <value>16000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/module/zookeeper-3.4.10/zkData</value> </property> </configuration>
3)regionservers:
hadoop102
hadoop103
hadoop104
4)软连接hadoop配置文件到HBase:
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml /opt/module/HBase/conf/core-site.xml [atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml /opt/module/HBase/conf/hdfs-site.xml
3.2.2 分发HBase到其他节点
[atguigu@hadoop102 module]$ xsync HBase/
3.3 HBase服务的启动
1.启动方式1
[atguigu@hadoop102 HBase]$ bin/HBase-daemon.sh start master
[atguigu@hadoop102 HBase]$ bin/HBase-daemon.sh start regionserver
提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出ClockOutOfSyncException异常。
修复提示:
a、同步时间服务
请参看帮助文档:《尚硅谷大数据技术之Hadoop入门》
b、属性:hbase.master.maxclockskew设置更大的值
<property> <name>hbase.master.maxclockskew</name> <value>180000</value> <description>Time difference of regionserver from master</description> </property>
2.启动方式2
[atguigu@hadoop102 HBase]$ bin/start-HBase.sh
对应的停止服务:
[atguigu@hadoop102 HBase]$ bin/stop-HBase.sh
3.4 查看HBase页面
启动成功后,可以通过“host:port”的方式来访问HBase管理页面,例如:http://hadoop102:16010
第 4 章 HBase Shell操作
使用hbase shell可以进入一个shell命令行界面!
[atguigu@hadoop102 HBase]$ bin/HBase shell
4.1 其他操作
1.查看集群状态
使用status可以查看集群状态,默认为summary,可以选择‘simple’和‘detailed’来查看详情。
hbase(main):011:0> status 1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
2.查看版本
hbase(main):002:0> version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017
3.查看操作用户及组信息
hbase(main):003:0> whoami atguigu (auth:SIMPLE) groups: atguigu
4.查看表操作信息
hbase(main):004:0> table_help Help for table-reference commands.
5.查看帮助信息
hbase(main):005:0> help HBase Shell, version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017 Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command. Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.
6.查看具体命令的帮助
hbase(main):006:0> help 'get' Get row or cell contents; pass table name, row, and optionally a dictionary of column(s), timestamp, timerange and versions. Examples: hbase> get 'ns1:t1', 'r1'
注意引号是必须的!
4.2 表的操作
4.2.1. list
hbase(main):008:0> list TABLE 0 row(s) in 0.0410 seconds
list后可以使用*等通配符来进行表的过滤!
4.2.2 create
创建表时,需要指定表名和列族名,而且至少需要指定一个列族,没有列族的表是没有任何意义的。
创建表时,还可以指定表的属性,表的属性需要指定在列族上!
格式:
create '表名', { NAME => '列族名1', 属性名 => 属性值}, {NAME => '列族名2', 属性名 => 属性值}, …
如果你只需要创建列族,而不需要定义列族属性,那么可以采用以下快捷写法:
create'表名','列族名1' ,'列族名2', …
HBase(main):002:0> create 'student','info'
4.2.3 desc
hbase(main):003:0> describe 'person' hbase(main):004:0> desc 'person'
4.2.4 disable
停用表后,可以防止在对表做一些维护时,客户端依然可以持续写入数据到表。一般在删除表前,必须停用表。
在对表中的列族进行修改时,也需要停用表。
hbase(main):005:0> disable 'person' 0 row(s) in 2.4250 seconds
disable_all ‘正则表达式’ 可以使用正则来匹配表名。
is_disabled 可以用来判断表是否被停用。
hbase(main):006:0> is_disabled 'person' true 0 row(s) in 0.0160 seconds
4.2.5 enable
和停用表类似。enable ‘表名’用来启用表,is_enabled ‘表名’用来判断一个表是否被启用。
enable_all ‘正则表达式’可以通过正则来过滤表,启用复合条件的表。
4.2.6. exists
hbase(main):008:0> exists 'person' Table person does exist 0 row(s) in 0.0210 seconds
4.2.7. count
hbase(main):012:0> count 'person' 1 row(s) in 0.0240 seconds => 1
4.2.8. drop
删除表前,需要先disable表,否则会报错。ERROR: Table xxx is enabled. Disable it first.
hbase(main):011:0> drop 'person'
4.2.9 truncate
hbase(main):013:0> truncate 'person' Truncating 'person' table (it may take a while): - Disabling table... - Truncating table... 0 row(s) in 4.0010 seconds
4.2.10 get_split
hbase(main):015:0> get_splits 'person' Total number of splits = 1 => []
获取表所对应的Region个数。每个表在一开始只有一个region,之后记录增多后,region会被自动拆分。
4.2.11 alter
alter命令可以修改表的属性,通常是修改某个列族的属性。
alter ‘表名’, ‘delete’ => ‘列族名’
hbase(main):050:0> alter 'myns:t1',{NAME => 'info',VERSIONS => '5'} hbase> alter 'ns1:t1', 'delete' => 'f1'
4.3 数据操作
4.3.1 scan
scan命令可以按照rowkey的字典顺序来遍历指定的表的数据。
scan ‘表名’:默认当前表的所有列族。
scan ‘表名’,{COLUMNS=> [‘列族:列名’],…} : 遍历表的指定列
scan '表名', { STARTROW => '起始行键', ENDROW => '结束行键' }:指定rowkey范围。如果不指定,则会从表的开头一直显示到表的结尾。区间为左闭右开。
scan '表名', { LIMIT => 行数量}: 指定返回的行的数量
scan '表名', {VERSIONS => 版本数}:返回cell的多个版本
scan '表名', { TIMERANGE => [最小时间戳, 最大时间戳]}:指定时间戳范围
注意:此区间是一个左闭右开的区间,因此返回的结果包含最小时间戳的记录,但是不包含最大时间戳记录
scan '表名', { RAW => true, VERSIONS => 版本数}
显示原始单元格记录,在Hbase中,被删掉的记录在HBase被删除掉的记录并不会立即从磁盘上清除,而是先被打上墓碑标记,然后等待下次major compaction的时候再被删除掉。注意RAW参数必须和VERSIONS一起使用,但是不能和COLUMNS参数一起使用。
scan '表名', { FILTER => "过滤器"} and|or { FILTER => "过滤器"}: 使用过滤器扫描
HBase(main):008:0> scan 'student' HBase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'} HBase(main):010:0> scan 'student',{STARTROW => '1001'}
4.3.2 put
put可以新增记录还可以为记录设置属性。
put '表名', '行键', '列名', '值'
put '表名', '行键', '列名', '值',时间戳
put '表名', '行键', '列名', '值', { '属性名' => '属性值'}
put '表名', '行键', '列名', '值',时间戳, { '属性名' =>'属性值'}
HBase(main):012:0> put 'student','1001','info:name','Nick' HBase(main):003:0> put 'student','1001','info:sex','male' HBase(main):004:0> put 'student','1001','info:age','18' HBase(main):005:0> put 'student','1002','info:name','Janna' HBase(main):006:0> put 'student','1002','info:sex','female' HBase(main):007:0> put 'student','1002','info:age','20'
4.3.3 get
get支持scan所支持的大部分属性,如COLUMNS,TIMERANGE,VERSIONS,FILTER
HBase(main):014:0> get 'student','1001' HBase(main):015:0> get 'student','1001','info:name'
4.3.4 delete
删除某rowkey的全部数据:
HBase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据:
HBase(main):017:0> delete 'student','1002','info:sex'