【版本】
当前版本号v20220411
版本 | 修改说明 |
---|---|
v20220411 | 增加配置修正HMaster消失的问题 |
v20210601 | 修正文件夹拷贝的命令错误和一些标点符号的错误 |
v20210520 | 初始化版本 |
实验8.1 - 部署 HBase 完全分布式
【实验目的】
- 部署 HBase 完全分布式
【实验环境】
- Windows 7 以上64位操作系统
- JDK8
- Hadoop 3
- CentOS 7
【实验资源】
- HBase 1.X
链接:https://pan.baidu.com/s/1MoQ0iU0Qb1o8_o5JV6X6iw
提取码:3rno
【实验内容】
- 部署 HBase 完全分布式
【实验步骤】
- 在NodeA、NodeB、NodeC三个节点分别运行以下语句,创建 HBase 的安装目录。
sudo mkdir /opt/hbase
sudo chown hadoop:wheel /opt/hbase
- 使用 hadoop 登录NodeA节点。
su hadoop
上传 HBase 安装包
hbase-1.6.0-bin.tar.gz
到 NodeA 节点/home/hadoop
目录。解压
hbase-1.6.0-bin.tar.gz
到/home/hadoop
目录。
tar -xvf hbase-1.6.0-bin.tar.gz
- 把解压以后的目录移到安装目录
sudo mv ~/hbase-1.6.0/* /opt/hbase
- 提升 root 用户权限执行以下语句,加入 HBase 环境变量。
su
echo "export HBASE_HOME=/opt/hbase
export PATH=\$HBASE_HOME/bin:\$PATH:." >>/etc/profile
- 切换会 hadoop 用户
su hadoop
- 使环境变量生效。
source /etc/profile
- 编辑 HBase 的环境配置脚本。
cd $HBASE_HOME/conf
vim hbase-env.sh
- 在第1行加入
export JAVA_HOME=/opt/jdk8
- 在约128行,设置启用Zookeeper
export HBASE_MANAGES_ZK=true
保存 hbase-env.sh。
备份并编辑 HBase 配置文件
hbase-site.xml
。
cd $HBASE_HOME/conf
cp hbase-site.xml{,.bak}
vim hbase-site.xml
- 输入以下内容,注意替换你的学号后3位。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--HBase 的数据保存在 HDFS 对应目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://nodea你的学号后3位:8020/hbase</value>
</property>
<!-- 是否是分布式环境 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 配置 ZK 的地址 ,3 个节点都启用 ZooKeeper-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>nodea你的学号后3位,nodeb你的学号后3位,nodec你的学号后3位</value>
</property>
<!-- 冗余度 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 主节点和从节点允许的最大时间误差 -->
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
</property>
<!--zookeeper 数据目录 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
- 编辑Region Server的配置文件
regionservers
。
cd $HBASE_HOME/conf
vi regionservers
- 清空文件内容,加入以下内容并保存。注意替换你的学号后3位。
nodea你的学号后3位
nodeb你的学号后3位
nodec你的学号后3位
- 同步 HBase 安装目录内容到 NodeB 和 NodeC。注意替换为你的学号后3位。
rsync -r /opt/hbase nodeb你的学号后3位:/opt
rsync -r /opt/hbase nodec你的学号后3位:/opt
rsync 是文件同步命令,可以用于本机和远程之间的文件同步 如果没有安装,可以使用 yum install rsync 安装
- 启动 HDFS 和 HBase。
start-dfs.sh
start-hbase.sh
【实验验证步骤】
- 在 NodeA、NodeB 和 NodeC 3个节点分别输入jps。
jps
- 查看其中1个节点是否存在以下进程
HRegionServer
HQuorumPeer
HMaster
- 另外2个节点存在以下进程。
HQuorumPeer
HRegionServer
实验8.2 通过 HBase Shell 访问 HBase
【实验目的】
掌握 HBase Shell 常用指令的使用。
【实验环境】
- Windows 7 以上64位操作系统
- JDK8
- Hadoop 3
- CentOS 7
【实验资源】
- Hadoop 3.X
- HBase 1.X
【实验内容】
- 按要求使用 HBase Shell 访问 HBase
【实验步骤】
- 启动 HBase
start-dfs.sh
start-hbase.sh
- 启动 HBase Shell。
hbase shell
执行命令前,请大家注意在hbase shell 下删除字符需要同时按下
ctrl+Backspace
。查询服务器状态。
status
- 查询 HBase 版本。
version
- 查看所有表。
list
- 增、删、改 注意:为了避免冲突,下面的表名命名规则为 member + 学号,比如学号 +学号,表名为 member+学号。
- 创建一个Rowkey是会员名的会员表。
create 'member+学号后3位','member_id','address','info'
- 获得表的描述。
describe 'member+学号后3位'
- 添加一个列族id。
alter 'member+学号后3位', 'id'
- 再次查询表的结构,是否多了一个id。
describe 'member+学号后3位'
- 添加数据。在 HBase Shell 中,我们可以通过 put 命令来插入数据。列族下的列不需要提前创建,在需要时通过
:
来指定即可。添加数据如下:
put 'member+学号后3位', 'debugo','id','11'
put 'member+学号后3位', 'debugo','info:age','27'
put 'member+学号后3位', 'debugo','info:birthday','1991-04-04'
put 'member+学号后3位', 'debugo','info:industry', 'it'
put 'member+学号后3位', 'debugo','address:city','Shanghai'
put 'member+学号后3位', 'debugo','address:country','China'
put 'member+学号后3位', 'Sariel', 'id', '21'
put 'member+学号后3位', 'Sariel','info:age', '26'
put 'member+学号后3位', 'Sariel','info:birthday', '1992-05-09'
put 'member+学号后3位', 'Sariel','info:industry', 'it'
put 'member+学号后3位', 'Sariel','address:city', 'Beijing'
put 'member+学号后3位', 'Sariel','address:country', 'China'
put 'member+学号后3位', 'Elvis', 'id', '22'
put 'member+学号后3位', 'Elvis','info:age', '26'
put 'member+学号后3位', 'Elvis','info:birthday', '1992-09-14'
put 'member+学号后3位', 'Elvis','info:industry', 'it'
put 'member+学号后3位', 'Elvis','address:city', 'Beijing'
put 'member+学号后3位', 'Elvis','address:country', 'china'
- 查看表数据。
scan 'member+学号后3位'
- 删除一个列族。
alter 'member+学号后3位', {NAME => 'member_id', METHOD => 'delete' }
- 通过 delete 命令,我们可以删除行键是’debugo’记录的’info:age’字段,再用 get 获取’info:age’字段的值,会发现已经没有值了,命令如下。
delete 'member+学号后3位','debugo','info:age'
get 'member+学号后3位','debugo','info:age'
- 删除整行的值,用 deleteall 命令:
deleteall 'member+学号后3位','debugo'
get 'member+学号后3位','debugo'
- 通过 enable 和 disable 来启用/禁用这个表,相应地可以通过 is_enabled 和 is_disabled 来检查表是否被启用/禁用。
is_enabled 'member+学号后3位'
is_disabled 'member+学号后3位'
- 使用 exists 来检查表是否存在。
exists 'member+学号后3位'
- 删除表前需要先将表 disable。
disable 'member+学号后3位'
drop 'member+学号后3位'
- 查询
- 查询表中有多少行,用 count 命令。
count 'member+学号后3位'
- get 命令。获取一个 ID 的所有数据。
get 'member+学号后3位', 'Sariel'
- get 命令。获得一个 ID 下一个列簇(一个列)中的所有数据。
get 'member+学号后3位', 'Sariel', 'info'
- 查询整表数据。
scan 'member+学号后3位'
- 扫描整个列簇。
scan 'member+学号后3位', {COLUMN=>'info'}
- 扫描其中指定的某个列。
scan 'member+学号后3位', {COLUMNS=> 'info:birthday'}
- 除了列(COLUMNS)修饰词外,HBase 还支持 LIMIT(限制查询结果行数),STARTROW (ROWKEY 为起始行,会先根据这个 KEY 定位到 Region,再向后扫描)、STOPROW(结束行)、 TIMERANGE(限定时间戳范围)、VERSIONS(版本数)、FILTER(按条件过滤行)等。比如 我们从 Sariel 这个 ROWKEY 开始,找下一个行的最新版本,代码如下。
scan 'member+学号后3位', { STARTROW => 'Sariel', LIMIT=>1, VERSIONS=>1}
- Filter 是一个非常强大的修饰词,可以设定一系列条件来进行过滤。比如我们要限制某个列的值等于 26。
scan 'member+学号后3位', FILTER=>"ValueFilter(=,'binary:26')"
- 值包含 6 这个数字的过滤指令:
scan 'member+学号后3位', FILTER=>"ValueFilter(=,'substring:6')"
- 列名中的前缀为 birth 的过滤指令:
scan 'member+学号后3位', FILTER=>"ColumnPrefixFilter('birth') "
- FILTER 支持多个过滤条件(通过括号、AND 和 OR 的条件组合)。
scan 'member+学号后3位', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:1988')"
- PrefixFilter 对 ROWKEY 的前缀进行判断,这是一个非常常用的功能。
scan 'member+学号后3位', FILTER=>"PrefixFilter('E')"