如何二进制部署Apache Hadoop HBase?
- By : Will
- Category : Apache-Hadoop
- Tags: Apache, Hadoop, HBase
1 基础知识
1.1 HBase的简介
– HBase是一个分布式的可扩展的大数据存储
– HBase适用于对大型数据进行随机、实时的读写访问
– HBase目标是托管非常大的表(数十亿行X百万列)
– HBase是一个开源的、分布式的、版本化的非关系数据库
– HBase模仿谷歌的“Bigtable: A Distributed Storage System for Structured Data”
– HBase在Hadoop和HDFS之上提供类似Bigtable的功能
– HBase是一种NoSQL数据库(不支持SQL作为主要访问语言的RDBMS)
– HBase从技术角度更像数据存储而非数据库(例如缺少类型列、二级索引、触发器、高级查询语言等)
– HBase支持线性和模块化缩放功能
– Hbase集群通过添加托管在商品类服务器上的Region Servers进行扩展(Region Servers翻倍则存储和处理亦翻倍)
1.2 HBase支持的功能
– 支持强一致读写,HBase不是最终一致的数据存储,这使得他非常适合作为高速计数器聚合等任务
– 支持表自动分片,HBase表通过区域分布在集群上,区域会随着数据的增长而自动分隔和重新分配
– 支持Region Servers之间的自动故障转移
– 支持与Hadoop或HDFS集成,- HBase支持HDFS作为其分布式文件系统
– 支持与MapReduce集成,HBase支持通过MapReduce进行大规模并行处理并将HBase作为源和接收器
– 支持Java客户端和API,HBase支持使用Java API进行编程访问
– 支持Thrift或REST API,Hbase支持非Java前端的Thrift和REST
– 支持块缓存和布隆过滤器,HBase支持块缓存和布隆过滤器以实现高容量和查询优化
– 支持运营管理,HBase提供内置网页,用于运营洞察和JMX指标
1.3 HBase的适用场景
– HBase适用于数亿或数十亿行数据的场景(几千或百万行可使用传统的RDBMS)
– HBase使用需确保应用可没有RDBMS提供的所有额外功能情况下生存(例如,键入列、二级索引、事务、高级查询语言)
– HDFS适用于包含5个节点在内的集群环境
1.4 HBase额Hadoop或HDFS的区别
– HDFS是一种分布式文件系统,非常适合存储大型文件
– HDFS不是通用文件系统且不提供文件的快速单个记录查找。
– HBase建立在HDFS之上,为大型表提供快速记录查找和更新。
– HBase内部将数据存放于HDFS的索引“StoreFile”中(便于高速查找)
1.5 安装要求
HBase Version | JDK 7 | JDK 8 | JDK 9 (Non-LTS) | JDK 10 (Non-LTS) | JDK 11 |
---|---|---|---|---|---|
2.0+ |
|
|
|||
1.2+ |
|
|
如上表所示,你需要根据需要运行的HBase版本选择JDK的版本
2 最佳实践
2.1 系统环境
2.1.1 系统环境
OS = CentOS 7.6 x86_64
HostName = any
IP Address = 10.168.0.60
2.1.2 安装相关的软件包
yum install -y vim wget
2.2 准备工作
2.1.1 部署JDK
请按如下教程部署JDK 1.8
https://www.cmdschool.org/archives/397
2.2.2 下载安装包
cd ~ wget http://archive.apache.org/dist/hbase/hbase-1.2.10/hbase-1.2.10-bin.tar.gz
本章以hbase-1.2.10为例,如果你需要其他版本,请从以下链接下载,
http://archive.apache.org/dist/hbase/
2.2.3 解压软件包
tar -xf hbase-1.2.10-bin.tar.gz
2.3 部署软件包
2.3.1 解压软件包
mv hbase-1.2.10 /usr/
2.3.2 配置目录权限
chown hbase:hbase -R /usr/hbase-1.2.10/ chmod 755 -R /usr/hbase-1.2.10/
2.4 配置软件包
2.4.1 配置软件包的环境变量
vim /etc/profile.d/hbase.sh
加入如下定义,
export HBASE_HOME=/usr/hbase-1.2.10 export PATH=${HBASE_HOME}/bin:$PATH export HBASE_CONF_DIR=${HBASE_HOME}/conf export HBASE_LOG_DIR=/var/log/hbase export HBASE_PID_DIR=/var/run/hbase export HBASE_IDENT_STRING=hbase export HBASE_NICENESS=0 export HBASE_STOP_TIMEOUT=1200
配置环境变量所需的目录,
mkdir -p /var/run/hbase/ chown hbase:hbase /var/run/hbase/ chmod 775 /var/run/hbase/ mkdir -p /var/log/hbase chown hbase:hbase /var/log/hbase chmod 775 /var/log/hbase
2.4.2 导入环境变量
source /etc/profile.d/hbase.sh
2.4.3 配置运行用户
groupadd hbase useradd -g hbase -d /var/lib/hbase/ hbase
2.4.4 声明JDK安装目录
cp /usr/hbase-1.2.10/conf/hbase-env.sh /usr/hbase-1.2.10/conf/hbase-env.sh.default vim /usr/hbase-1.2.10/conf/hbase-env.sh
修改如下参数,
export JAVA_HOME=/usr/java/jdk1.8.0_121
2.4.5 修改HBase主配置文件
cp /usr/hbase-1.2.10/conf/hbase-site.xml /usr/hbase-1.2.10/conf/hbase-site.xml.default vim /usr/hbase-1.2.10/conf/hbase-site.xml
修改配置如下,
<configuration> <property> <name>hbase.rootdir</name> <value>file:///home/testuser/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/testuser/zookeeper</value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> <description> Controls whether HBase will check for stream capabilities (hflush/hsync). Disable this if you intend to run on LocalFileSystem, denoted by a rootdir with the 'file://' scheme, but be mindful of the NOTE below. WARNING: Setting this to false blinds you to potential data loss and inconsistent system state in the event of process and/or node failures. If HBase is complaining of an inability to use hsync or hflush it's most likely not a false positive. </description> </property> </configuration>
参数解析,
– 参数“hbase.rootdir”定义HBase的数据目录
– 参数“hbase.rootdir”可接受本地目录,使用格式为“file:///home/testuser/hbase”
– 参数“hbase.rootdir”可接受HDFS目录,使用格式为“hdfs://hdfs.cmdschool.org:8020/hbase”
2.4.6 手动启动服务
su - hbase -c '/usr/hbase-1.2.10/bin/start-hbase.sh'
可见如下显示,
starting master, logging to /usr/hbase-1.2.10/logs/hbase-root-master-localhost.localdomain.out Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
可使用如下命令检查启动的进程,
pgrep -a -u hbase java
可见如下显示,
9230 /usr/java/jdk1.8.0_121/bin/java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -XX:+UseConcMarkSweepGC -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m -Dhbase.log.dir=/var/log/hbase -Dhbase.log.file=hbase-hbase-master-localhost.localdomain.log -Dhbase.home.dir=/usr/hbase-1.2.10 -Dhbase.id.str=hbase -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.master.HMaster start
可使用如下命令查看服务倾听的端口,
netstat -antp | grep `pgrep -u hbase java` | grep LISTEN
可见如下显示,
tcp6 0 0 :::16010 :::* LISTEN 9230/java tcp6 0 0 :::34966 :::* LISTEN 9230/java tcp6 0 0 127.0.0.1:44376 :::* LISTEN 9230/java tcp6 0 0 127.0.0.1:33183 :::* LISTEN 9230/java tcp6 0 0 :::2181 :::* LISTEN 9230/java
2.4.7 手动停止服务
su - hbase -c '/usr/hbase-1.2.10/bin/stop-hbase.sh'
可见如下显示,
stopping hbase....................
2.4.8 配置服务控制脚本
vim /usr/lib/systemd/system/hbase.service
可加入如下配置,
[Unit] Description=Apache HBase manager Wants=network.target Before=network.target After=network-pre.target Documentation=https://hbase.apache.org/book.html [Service] Type=forking ExecStartPre=/bin/sh -c 'mkdir -p /var/run/hbase;chown hbase:hbase /var/run/hbase;chmod 775 /var/run/hbase' ExecStartPre=/bin/sh -c 'mkdir -p /var/log/hbase;chown hbase:hbase /var/log/hbase;chmod 775 /var/log/hbase' ExecStart=/usr/bin/su - hbase -c '/usr/hbase-1.2.10/bin/start-hbase.sh' ExecStop=/usr/bin/su - hbase -c '/usr/hbase-1.2.10/bin/stop-hbase.sh' PIDFile=/var/run/hbase/hbase-hbase-master.pid Restart=on-success [Install] WantedBy=multi-user.target
修改完脚本后,你需要使用如下命令重载服务,
systemctl daemon-reload
你可使用如下命令控制服务和查询状态,
systemctl start hbase.service systemctl status hbase.service systemctl stop hbase.service systemctl restart hbase.service
测试完毕,建议你使用如下命令设置服务自动启动,
systemctl enable hbase.service
2.5 测试HBase
2.5.1 使用Shell登录
hbase shell
可见如下显示,
2019-09-06 19:52:48,791 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable HBase Shell; enter 'help' for list of supported commands. Type "exit" to leave the HBase Shell Version 1.2.10, r18f428abb64b405de24d164425e470512e82f287, Mon Jan 7 16:53:30 CST 2019 hbase(main):001:0>
2.5.2 获取命令行帮助
help
可见如下显示,
HBase Shell, version 1.2.10, r18f428abb64b405de24d164425e470512e82f287, Mon Jan 7 16:53:30 CST 2019 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. [...] hbase> get 't1', "key\x03\x3f\xcd" hbase> get 't1', "key\003\023\011" hbase> put 't1', "test\xef\xff", 'f1:', "\x01\x33\x40" The HBase shell is the (J)Ruby IRB with the above HBase-specific commands added. For more on the HBase Shell, see http://hbase.apache.org/book.html
2.5.3 创建表
create 'test','cf'
可见如下提示,
0 row(s) in 2.7520 seconds => Hbase::Table - test
2.5.4 列出表
list 'test'
可见如下提示,
TABLE test 1 row(s) in 0.3490 seconds => ["test"]
2.5.5 查看表的详细信息
describe 'test'
可见如下提示,
Table test is ENABLED test COLUMN FAMILIES DESCRIPTION {NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', C OMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.0230 seconds
2.5.6 推数据到表
put 'test', 'row1', 'cf:a', 'value1' put 'test', 'row2', 'cf:b', 'value2' put 'test', 'row3', 'cf:c', 'value3'
可见如下提示,
0 row(s) in 0.0130 seconds
2.5.7 扫描表中的数据
scan 'test'
可见如下提示,
ROW COLUMN+CELL row1 column=cf:a, timestamp=1567775370910, value=value1 row2 column=cf:b, timestamp=1567775371023, value=value2 row3 column=cf:c, timestamp=1567775372617, value=value3 3 row(s) in 0.0210 seconds
2.5.8 获取单行数据
get 'test', 'row1'
可见如下提示,
COLUMN CELL cf:a timestamp=1567775370910, value=value1 1 row(s) in 0.0170 seconds
2.5.9 禁用或启用表
disable 'test' enable 'test'
可见如下提示,
0 row(s) in 1.2930 seconds
2.5.10 删除表
drop 'test'
可见如下提示,
0 row(s) in 1.2440 seconds
注:删除之前要先禁用
2.5.11 退出Shell
exit
2.6 HBase的其他使用方式
2.6.1 Linux Shell中使用
echo "describe 'test'" | hbase shell -n echo "describe 'test'" | hbase shell -n > /dev/null 2>&1
另外,如果需要请使用如下命令编写交互的脚本,
mkdir ~/scripts vim ~/scripts/hbase.sh
加入如下内容,
#!/bin/bash echo "describe 'test'" | hbase shell -n > /dev/null 2>&1 status=$? echo "The status was " $status if (($status == 0)); then echo "The command succeeded" else echo "The command may have failed." fi return $status
由于包含“return”函数,所以建议使用如下命令执行,
source ~/scripts/hbase.sh
2.6.2 批处理方式处理
vim ~/scripts/hbase.hbs
加入之前的命令,
create 'test', 'cf' list 'test' put 'test', 'row1', 'cf:a', 'value1' put 'test', 'row2', 'cf:b', 'value2' put 'test', 'row3', 'cf:c', 'value3' put 'test', 'row4', 'cf:d', 'value4' scan 'test' get 'test', 'row1' disable 'test' enable 'test'
使用如下语句调用并执行,
hbase shell ~/scripts/hbase.hbs
注:命令行只需要纯文本保存即可,与后缀名无关
========================
官方首页
———–
https://hbase.apache.org/
中文指南
———-
http://abloz.com/hbase/book.html#standalone_dist
HBase的下载
————
http://archive.apache.org/dist/hbase/
https://hbase.apache.org/downloads.html
https://www.apache.org/dyn/closer.lua/hbase/
HBase的架构
————-
https://hbase.apache.org/book.html#arch.overview
HBase的简介
————–
https://baike.baidu.com/item/HBase/7670213?fr=aladdin
https://hbase.apache.org/book.html#_preface
HBase 与 JDK的版本关系
————————–
https://hbase.apache.org/book.html#java
没有评论