如何二进制部署Apache Hadoop HBase?

Apache-Hadoop

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 安装要求

Table 2. Java support by release line
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

没有评论

发表评论

Apache-Hadoop
如何安装Kafka connect mqtt?

1 前言 一个问题,一篇文章,一出故事。 我们配置好Kafka connect集群后,我们来尝试安装 …

Apache-Hadoop
如何配置Kafka connect集群?

1 基础知识 1.1 Kafka Connect的介绍 – Kafak Connect是 …

Apache-Hadoop
如何二进制部署CMAK?

1 基础知识 1.1 CMAK 1.1.1 CMAK的介绍 – CMAK原称Kafka …