本文主要讨论这几个问题:
- HBase有哪些部署方式
- Standalone(单机部署)
- Pseudo-Distributed(伪分布式)
- Fully-Distributed(分布式)
- 手动部署
- 通过HDP(ambari)和CDH(cloudrea manager)等大数据平台进行部署
- 云HBase
1. HBase有哪些部署方式
- 主要有以下几种部署方式:
- 单机部署(Standalone)
- 伪分布式集群部署(Pseudo-Distributed)
- 分布式集群部署(Fully-Distributed)
2.Standalone(单机部署)
- 在 HBase 的 Standalone 模式中,所有的服务都运行在同一 JVM 中:只有一个HMaster进程,regionserver和 zookeeper服务实例也包含在该进程中,并且监听了对应服务的端口。
- HBase的standalone部署模式使用Hadoop的local filesystem抽象接口,其不保证持久化的可靠性,因此有可能丢数据,所以该部署模式主要用于便于本地开发调试。
- 部署步骤:
- 1)下载二进制安装包:hbase-2.2.1-bin.tar.gz
- 2)解压:tar -xvzf hbase-2.2.1-bin.tar.gz
- 3)配置JAVA_HOME环境变量:
- 方式 1:修改/etc/profile文件,添加如下语句,然后source /etc/profile生效:
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=/usr/java/jdk1.8.0_144/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
- 方式2:修改 hbase安装目录/conf/hbase-env.sh,将export JAVA_HOME的注释打开,并修改为正确的java安装路径
- 4)修改conf/hbase-site.xml
- 指定HBase和Zookeeper的数据存储目录,如果是本地文件系统,不指定默认是存放在/tmp目录下,重启后可能会丢失
<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>
- 5)启动HBase:
- bin/start-hbase.sh:
- hbase master端口,默认是16000(hbase.master.port)
- master web ui端口,默认是16010(hbase.master.info.port)
- hbase region server端口,默认监听16020(hbase.regionserver.port)
- region server web ui端口,默认是16030(hbase.regionserver.info.port)
- zookeeper默认监听2181端口(hbase.zookeeper.property.clientPort)
- bin/start-hbase.sh:
- 6)启动Thrift Server:
- /bin/hbase-daemon.sh start thrift2
- sh hbase-daemons.sh –config $HBASE_HOME/conf start thrift2 –infoport 9096 -p 9097
- thrift server默认监听9090端口(hbase.regionserver.thrift.port)
- thrift server的web ui默认监听9095端口(hbase.thrift.info.port)。
- /bin/hbase-daemon.sh start thrift2
2.Pseudo-Distributed(伪分布式部署)
- 伪分布模式意味着 HBase 仍然在单个主机上完全运行,但是每个 HBase 守护进程(HMaster,HRegionServer 和 ZooKeeper)作为一个单独的进程运行
- 部署步骤:
- 1)修改conf/hbase-site.xml
- 首先,添加以下指示 HBase 以分布式模式运行的属性,这样会使得每个守护进程(Master, RegionServer, Zookeeper)有一个 JVM 实例
- 1)修改conf/hbase-site.xml
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
- 接下来,将 hbase.rootdir 从本地文件系统更改为您的 HDFS 实例的地址,hbase会自动创建这个目录
<property>
<name>hbase.rootdir</name>
<value>hdfs://node32:8020/user/hbase-jz7d</value>
</property>
- 配置zookeeper,使用hbase自己管理的zookeeper,将conf/hbase-env.sh中如下配置注释放开:
export HBASE_MANAGES_ZK=true
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase-2.2.1/zkdata</value>
</property>
- 2)启动HBase:
- bin/start-hbase.sh
- 3)启动和停止备份 HBase 主(HMaster)服务器:
- 主要用于在一台机器上部署伪分布集群,启动多个HMaster:
- local-master-backup.sh start 2 3 5,脚本后第一个参数为操作命令,例如start, stop,之后的参数表示在默认端口数字上增加多少作为新启动端口号,可以跟多个数字,会循环创建
- 主要用于在一台机器上部署伪分布集群,启动多个HMaster:
- 4)启动和停止其他 RegionServers:
- 同上,使用local-regionservers.sh脚本
3.Fully-Distributed(分布式集群部署)
- 手动部署(node-a, node-b, node-c三个节点,主机名为node-*.example.com):
- 1)确保节点间网络互通,无防火墙规则阻止
- 2)配置无密码SSH访问(node-a需要能够登录node-b和node-c(包含自己)才能启动守护进程。实现这一点的最简单的方法是在所有主机上使用相同的用户名,并配置node-a到其他的无密码的 SSH 登录):
- a) 在node-a,生成一个密钥对。以运行 HBase 的用户身份登录时,使用以下命令生成 SSH 密钥对:
- $ ssh-keygen -t rsa
- 如果命令成功,密钥对的位置将打印到标准输出。公钥的默认名称是id_rsa.pub
- b) 创建并共享密钥的目录:
- 在node-b和上node-c,以 HBase 用户身份登录,并在用户主目录中创建一个 .ssh/ 目录(如果尚不存在)。如果它已经存在,请注意它可能已经包含其他值。
- c) 将公钥复制到其他节点:
- 通过使用 scp 或其他一些安全的手段,安全地将公钥从node-a复制到每个节点。在其他每个节点上,创建一个名为 .ssh/authorized_keys 的新文件(如果该文件尚不存在),并将 id_rsa.pub 文件的内容附加到该文件的末尾。请注意,你也需要为node-a本身执行此项。
- $ cat id_rsa.pub >> ~/.ssh/authorized_keys
- d) 由于 node-b 是备份主节点, 重复上述步骤,将node-a替换为node-b.确保不会覆盖现有的 .ssh/authorized_keys 文件, 可以使用>>运算符而不是>运算符将新密钥添加到文件末尾
- a) 在node-a,生成一个密钥对。以运行 HBase 的用户身份登录时,使用以下命令生成 SSH 密钥对:
- 3)配置node-a:
- a)node-a 是主节点和 ZooKeeper 进程节点,而不是 RegionServers 服务. 首先停止node-aRegionServers 服务
- b)编辑 conf/regionservers 移除包含 localhost的列. 添加 node-b 和 node-c的主机名和 IP。
- 即使你非要在 node-a上运行 regionserver, 你应该配置主机名. 演示中为 node-a.example.com.确保您能够将配置分发到集群的每个节点上并无任何主机名冲突。保存文件。
- c)配置 HBase,将 node-b作为备份主节点
- 在 conf/ 目录创建 backup-masters 添加新的一行主机名为 node-b. 演示中主机名为 node-b.example.com.
- d)配置 ZooKeeper:
- 实际上,你应该仔细考虑你的 ZooKeeper 配置。您可以在zookeeper部分找到更多关于配置 ZooKeeper 的信息。这个配置将指示 HBase 在集群的每个节点上启动和管理一个 ZooKeeper 实例。在node-a上,编辑 conf/hbase-site.xml 并添加下列属性
<property>
<name>hbase.zookeeper.quorum</name>
<value>node-a.example.com,node-b.example.com,node-c.example.com</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper</value>
</property>
- 4)配置其他节点(node-b, node-c):
- a)node-b 将运行一个备份主服务器和一个 ZooKeeper 实例。
- 下载并解压 HBase,将 HBase 下载并解压到node-b, node-c
- 将配置文件从node-a复制到node-b和node-c,群集的每个节点都需要具有相同的配置信息。将 conf/ 目录下的内容复制到node-b和node-c上的 conf/ 目录中。
- a)node-b 将运行一个备份主服务器和一个 ZooKeeper 实例。
- 5)启动并测试群集
- 确保 HBase 没有在任何节点上运行
- 如果您在之前的测试中忘记停止 HBase,您将会遇到错误。通过使用该jps命令检查 HBase 是否在任何节点上运行。寻HMaster, HRegionServer和 HQuorumPeer的进程。如果他们存在,杀掉他们
- 启动集群:在node-a,发出start-hbase.sh命令,并检查启动日志输出
- ZooKeeper 首先启动,然后是 master,然后是 RegionServers,最后是 backup masters。
- 验证进程是否正在运行:
node-a
jps
输出
$ jps
20355 Jps
20071 HQuorumPeer
20137 HMaster
node-b
jps
输出
$ jps
15930 HRegionServer
16194 Jps
15838 HQuorumPeer
16010 HMaster
node-c
jps
输出
$ jps
13901 Jps
13639 HQuorumPeer
13737 HRegionServer
- ZooKeeper 进程名称:
- 进程HQuorumPeer是一个由 HBase 控制和启动的 ZooKeeper 实例.如果以这种方式使用 ZooKeeper,则每个群集节点仅限于一个实例,并且仅适用于测试。如果 ZooKeeper 在 HBase 之外运行,则调用该进程 QuorumPeer
- 通过HDP(ambari)和CDH(cloudrea manager)等大数据平台进行部署:
- 在HDP或CDH集群部署好后,HDP通过ambari管理界面,CDH通过cloudrea manager管理界面,在界面上直接添加对应hbase组件或服务即可完成hbase集群的添加和部署。
- 相比基于原生Hadoop搭建HBase集群,线上环境推荐使用HDP或CDH进行集群搭建和管理
- 云HBase:
- 通常提供云HBase的供应商,如阿里云,腾讯云等,都维护有自己的HBase分支版本,并且提供的是围绕HBase的一整套解决方案,不只是HBase进行数据存储,例如还提供了基于HBase的OLAP分析功能,时间序列数据库,图数据引擎等
- 如果缺乏大数据相关运维团队,使用基于云供应商提供的云HBase会省心的多。
/* 本文属于原创文章,转载请注明作者和出处 quarterback.cn,请勿用于任何商业用途 */