Apache HBase 的基本知识
2006 年 11 月,Google 发表了一篇名为《 BigTable 》论文 , 2007 年 2 月,Hadoop 的开发人员对其进行实现并命名为 HBase。 HBase 是基于 Hadoop 之上的一种新型的基于列存储的开源数据存储架构,用于解决大数据问题,是 Hadoop 的分布式数据库。
HBase 现在已经比较成熟,最新的稳定版本是 0.94.x。HBase 已经被很多大公司采用,如 Facebook, Twitter,Adobe, Cloudera, IBM, 等等。HBase 不是传统 RDBMS 意义上的基于列的数据库,而是利用磁盘进行列存储格式的数据库,其优势在于提供基于关键字的特定列和顺序范围的快速访问。
HBase 有三个重要的组件:客户端库,一个 master server(可以配置多个备用 master,后文将对此进行详细描述)以及多个 Region Server。Master 负责分配 Region 到各个不同的 Region Server 上,Region Server 负责存储实际的数据。同时,HBase 通过使用 ZooKeeper,一种可靠,高可用,一致性的分布式协同服务来帮助其完成相应的任务。HBase 集群管理员可以通过在系统运行过程中添加和删除 Region Server 节点来调节改变工作负载。HBase 以 HFile 作为存储数据的基本格式,其底层的文件系统默认采用 HDFS。
图 1. HBases 基本架构
![HBases 基本架构](https://i-blog.csdnimg.cn/blog_migrate/6fd6e4bd4fda91f3eaa5b02792cf597f.png)
图 1. 显示了不同的组件如 HDFS,Zookeeper 是怎样与 HBase 一起协调工作的。Master Server 负责处理跨 Region Server 的 regions 数据的导入平衡,卸载繁忙的 Region Server 负担,将 region 转移到更空余的 Region Server 上。
HBase Master 不负责实际的数据存储,它协调导入平衡,维护集群的状态,维护 schema 的更改和 metadata 元数据操作,如创建表和列族(column families),但从不提供任何数据服务。
Region servers 负责加载和维护 region,包括处理对其管理的 region 的所有读写请求,以及 region 大小增长到超过配置阀值的时候对其进行切分。
客户端通过与 Zookeeper 通信获取到其需要进行读写操作的 region 所在的 Region Server 之后,将直接与 Region Server 通信,并由 Region Server 处理所有相关的请求。
IBM BigInsights 架构中的 HBase
IBM Big Data(大数据)产品 InfoSphere BigInsights 是大数据管理与分析平台, 其底层架构也采用了 Hadoop 和 HBase 对结构化和非结构化数据进行存储和查询。
BigInsightsz 集群软件层次中的 HBase
BigInsights 整合了很多已有的 Hadoop 开源组件,如 HDFS, MapReduce, HBase, Zookeeper 等,将它们很好的融入 BigInsights 软件体系,并与其他 BigInsights 的组件一起协同工作在同一个平台上。 HBase 被用作 BigInsights 的存储数据库,Zookeeper 被用作 BigInsights 的服务协同组件。如果要使用 HBase, 我们需要同时安装 Hadoop, Zookeeper, 因为 HBase 采用 Hadoop 作为其文件系统,采用 Zookeeper 作为其服务协同支持。
当把 BigInsights 部署到一个集群上时,软件层次的结构如图 2. 所示:
图 2. BigInsights 中 Hadoop 开源组件列表
![BigInsights 中 Hadoop 开源组件列表](https://i-blog.csdnimg.cn/blog_migrate/424df6a7a1c7ba189a32b3d169052d38.png)
HBase 安装和配置
BigInsights 产品集成了经过 IBM JDK 编译和一定改进扩展后的 HBase。在 BigInsights 产品的安装过程中可以通过安装界面选择和配置 HBase, 配置内容包括指定 HBase 安装路径,日志目录,指定集群中 HBase Master 和 HBase Regionservers 节点以及服务端口。HBase 的二进制软件包默认安装和配置在 BigInsights 集群的所有节点上,也就是说安装完 BigInsights 以后的每个 BigInsights 节点都可以作为 HBase 的客户端使用。
在安装 BigInsights 之前,需要从解压以后的根目录下运行 start.sh 脚本,然后在浏览器中输入 URL http://your-server:8300/Install/ 打开安装向导,安装向导将引领您完成后续的安装步骤,安装过程将包括:安装类型(选择多节点分布式集群安装和配置)选择,文件系统选择,组,用户名及 SSH 配置,指定集群节点,组件安装,安全类型选择等,下面给出具体的 HBase 以及 Zookeeper 的安装配置实例。
配置内容 | 配置信息 |
---|---|
HBase master servers | 指定 HBase Master 的节点名,可以是 IP,也可以是 hostname |
HBase region servers | 指定 HBase Regionserver 的节点名,可以是 IP,也可以是 hostname |
Zookeeper mode | 可选,有 shared/separate ZooKeeper 安装模式 |
HBase root directory | 高级设置,默认为 /hbase( 可配置 ) |
HBase master port | 60000( 可配置 ) |
HBase master UI port | 60010( 可配置 ) |
HBase master server JMX port | 10101( 可配置 ) |
HBase region server port | 60020( 可配置 ) |
HBase region server UI port | 60030( 可配置 ) |
HBase region server JMX port | 10102( 可配置 ) |
图 3. HBase 安装和配置
![HBase 安装和配置](https://i-blog.csdnimg.cn/blog_migrate/3b22535ce974d31fb8c277664cb433ab.png)
图 4. Zookeeper 安装和配置
![Zookeeper 安装和配置](https://i-blog.csdnimg.cn/blog_migrate/3989ab2082932e4412fc5738f0939c95.png)
最后,当安装完成以后,点击“Finish”或者在后台命令行运行“start.sh shutdown”关闭安装向导。
IBM 对 HBase 的改进和扩展
BigInsights 最大限度的提供了统一的,IBM 特有的 HBase 管理功能,包括用户界面以及后台命令行管理模式。这样,用户可以通过简单的界面操作或者后台命令来启停 / 查看 HBase 集群,而不用关心具体的实现细节。
与此同时,IBM 还提供了统一的用户界面和添加、删除节点命令来支持 HBase 集群的可伸缩性。
另外,HBase Master 多结点功能的实现,提供并保证了 HBase 在 BigInsights 中的高可用性。以下将对这些改进和扩展功能进行展开介绍。
IBM BigInsights 中的 HBase 集群管理和监控
BigInsights 集群为 HBase 提供了完备的管理功能,包括统一的 HBase 用户管理界面,后台命令行管理模式,HBase 服务状态监控,检查、同步、添加、删除、启动、停用、查看 HBase 服务,反向代理 UI,查看 HDFS 中的 HBase,HBase 应用程序提交等。
Web 界面管理 HBase 服务状态
通过 http:// 主节点主机名或 IP:8080/data/html/index.html 进入 BigInsights Web 管理控制台。使用 BigInsights 安装所有模块包括 Hadoop、Hbase、Zookeeper、Oozie、Flume 等。(注意:如果您使用的是 BigInsights Basic 版本,请使用 http:// 主节点主机名或 IP:8080/BigInsights 打开控制台。下文截图全部基于 Enterprise 版本,Basic 版本会略有差别。)
图 5. BigInsights Web 管理界面
![BigInsights Web 管理界面](https://i-blog.csdnimg.cn/blog_migrate/8e22835dd0c8ffd6b2f162b7ad0940fc.png)
在 BigInsights Web 管理界面中点击“Cluster Status”页面,可以实现对 HBase, Zookeeper 以及其他模块状态的监控、启停。
“Cluster Status”页面左上方分别列出 BigInsights 集群中所有组件的服务的运行状态。可以看到所有服务目前都处于正常的运行状态中。选择“HBase”,可以查看 HBase 集群的服务信息,如图 8,列出了 HBase 的简要信息,包括 HBase 集群状态 (Start/Stop),HBase Master 节点及进程号,平均 Load 数,HBase 集群中生存的 Region Server 个数,死亡的 Region Server 个数等。
图 6. HBase 服务状态监控
![HBase 服务状态监控](https://i-blog.csdnimg.cn/blog_migrate/27b0295b3099f2957fcaacecae0b0a41.png)
图 7. HBase Master 服务状态监控及启停
![HBase Master 服务状态监控及启停](https://i-blog.csdnimg.cn/blog_migrate/fac4498b7f7f2f48e0e94fc0357374f0.png)
图 8. HBase Region Servers 服务状态监控及启停
![HBase Region Servers 服务状态监控及启停](https://i-blog.csdnimg.cn/blog_migrate/f8344bcffc1d17386af3f0a419936123.png)
此外,BigInsights 提供了统一的命令行接口对集群的组件进行管理。用户可以方便的使用命令行来检查 HBase 集群使用的健康状态,增加和删除 HBase 节点 , 启动、停止某个服务,或者查询服务的状态等。
检查 HBase 组件的健康状态
您可以 BigInsights 管理节点上通过以下命令来验证 HBase 集群的健康状态:
$/bin/sh $BIGINSIGHTS_HOME/bin/healthcheck.sh hbase
同步 HBase 的配置文件
作为集群管理人员,通常需要修改配置参数来调优 HBase 的集群性能,或者修改相关配置,所有的这些操作都需要修改 HBase 的配置文件,如 hbase-site.xml. regionservers, hbase-env.sh, hadoop-metrics.properties 或者 log4j.properties,BigInsights 集群管理为各组件提供统一的配置文件同步功能,以保证统一之组件在所有节点上配置的一致性。您可以通过以下命令来同步 HBase 配置文件:
1. 您可以在 BigInsights 管理节点的 $BIGINSIGHTS_HOME/hdm/components/hbase/conf/ 目录下更新 HBase 配置文件
2. 在 BigInsights 管理节点上通过运行以下命令同步所有的节点的 HBase 配置文件:
$/bin/sh $BIGINSIGHTS_HOME/bin/syncconfig.sh
hbase 增删 HBase 节点
BigInsights 平台支持增删 HBase 节点的功能。
1. 增加节点
您可以在 BigInsights 管理节点上运行以下命令来增加一个或多个节点到 HBase 集群中:
$/bin/sh $BIGINSIGHTS_HOME/bin/addnode.sh hbase node1 -type=master $/bin/sh $BIGINSIGHTS_HOME/bin/addnode.sh hbase node1 -type=regionserver
其中 node1 可以是 IP 地址也可以是 hostname.
2. 删除节点
您可以在 BigInsights 管理节点上运行以下命令来从 HBase 集群中删除一个或多个节点,删除 HBase 节点只会删除 HBase 服务,不会删除任何数据。
$/bin/sh $BIGINSIGHTS_HOME/bin/removenode.sh hbase
其中 node1 可以是 IP 地址也可以是 hostname.
启停和查看 HBase 服务
您可以在 BigInsights 管理节点上运行以下命令来启动 HBase 集群服务 :
$/bin/sh $BIGINSIGHTS_HOME/bin/start.sh hbase
您可以在 BigInsights 管理节点上运行以下命令来停止 HBase 集群服务 :
$/bin/sh $BIGINSIGHTS_HOME/bin/stop.sh hbase
查看 HBase 服务:
您可以在 BigInsights 管理节点上运行以下命令来查看 HBase 集群服务状态 :
$/bin/sh $BIGINSIGHTS_HOME/bin/status.sh hbase
HBase Master 多结点高可用支持
我们可以在 HBase 集群中启动多个 Master 节点,其中第一个启动的节点作为活跃 (Active)Master 对外提供服务,而其他的作为备份 (Backup)Master 节点;实际上,HBase 通过 Zookeeper 来保存活跃 Master 节点信息,一旦当前活跃 Master 节点由于硬件故障或者断电等原因失去连接,备份 Master 会通过 Zookeeper 收到该信息,并选举产生新的活跃 Master 提供服务。接下来将详细描述如何通过 BigInsights 启动多个 Master 并进行状态监控。
1. 通过命令行模式添加 / 启动 / 监控 HBase Master
A) 登录 BigInsights 管理节点,查看当前 HBase 集群状态
[biadmin@bdvm070 ~]$ status.sh hbase [INFO] Progress - Status hbase [INFO] @bdvm070.svl.ibm.com - hbase-master(active) started, pid 18157 [INFO] @bdvm071.svl.ibm.com - hbase-regionserver started, pid 12072 [INFO] Deployer - hbase service started [INFO] Progress - 100% [INFO] DeployManager - Status; SUCCEEDED components: [hbase]; Consumes : 9699ms
B) 添加 bdvm071 为备用 Master 节点
[biadmin@bdvm070 ~]$ addnode.sh hbase bdvm071.svl.ibm.com -type=master [INFO] DeployManager - Check SSH setup on [bdvm071.svl.ibm.com] [INFO] @bdvm071.svl.ibm.com - OK, password-less SSH has setup. ... [INFO] DeployManager - Add hbase nodes; SUCCEEDED components: [hbase]; Consumes : 0ms
C) 启动备用 Master 节点
[biadmin@bdvm070 ~]$ start.sh hbase [INFO] Progress - Start hbase [INFO] Deployer - make sure zookeeper service is started before start hbase service [INFO] @bdvm070.svl.ibm.com - hbase-master(active) already running, pid 18157 [INFO] @bdvm071.svl.ibm.com - hbase-master(backup) started [INFO] @bdvm071.svl.ibm.com - hbase-regionserver already running, pid 12072 [INFO] Deployer - hbase service started [INFO] Progress - 100% [INFO] DeployManager - Start; SUCCEEDED components: [hbase]; Consumes : 14110ms
D) 重新查看 HBase 集群状态
[biadmin@bdvm070 ~]$ status.sh hbase [INFO] Progress - Status hbase [INFO] @bdvm070.svl.ibm.com - hbase-master(active) started, pid 18157 [INFO] @bdvm071.svl.ibm.com - hbase-master(backup) started [INFO] @bdvm071.svl.ibm.com - hbase-regionserver started, pid 12072 [INFO] Deployer - hbase service started [INFO] Progress - 100% [INFO] DeployManager - Status; SUCCEEDED components: [hbase]; Consumes : 14382ms
E) 停止当前活跃 Master 节点并查看 HBase 集群状态
[biadmin@bdvm070 ~]$ $HBASE_HOME/bin/hbase-daemon.sh stop master stopping master. [biadmin@bdvm070 ~]$ status.sh hbase [INFO] Progress - Status hbase [INFO] @bdvm070.svl.ibm.com - hbase-master stopped [INFO] @bdvm071.svl.ibm.com - hbase-master(active) started, pid 19840 [INFO] @bdvm071.svl.ibm.com - hbase-regionserver started, pid 12072 [INFO] Deployer - hbase service started [INFO] Progress - 100% [INFO] DeployManager - Status; SUCCEEDED components: [hbase]; Consumes : 52069ms
通过上述操作我们可以看到,通过命令行可以在 BigInsights 集群中随时添加备份 Master 并进行 Master 的启停 / 监控。另外需要注意的是,备份 Master 检测到活跃 Master 宕机并切换为活跃 Master 需要一定的时间,因此在实际集群使用过程当中应当尽量避免主动停止当前活跃 Master 进程的操作。下面给出上述操作序列在 BigInsights Web 管理页面的监控情况。
2. BigInsights Web 管理页面监控 HBase 集群状态
A) 添加备用 Master 前 HBase Master 运行状态
图 9. 添加备用 Master 前 HBase Master 运行状态
![添加备用 Master 前 HBase Master 运行状态](https://i-blog.csdnimg.cn/blog_migrate/63d964ebc5287990b50059c5b1ff7cfa.png)
B) 添加备用 Master 并启动后 HBase Master 运行状态
图 10. 添加备用 Master 后 HBase Master 运行状态
![添加备用 Master 后 HBase Master 运行状态](https://i-blog.csdnimg.cn/blog_migrate/86e0e90d98ea7c96bdb9d7da6a9fb94d.png)
C) 停止当前活跃 Master 后 HBase Master 运行状态
图 11. 停止当前活跃 Master 后 HBase Master 运行状态
![停止当前活跃 Master 后 HBase Master 运行状态](https://i-blog.csdnimg.cn/blog_migrate/9b1f11c1bfc43d79074218b691d18e86.png)
D) 再次启动已停止的 Master 节点之后 HBase Master 运行状态(由于此时已有活跃 Master,重新启动的 Master 节点将作为备用 Master)
图 12. 再次启动已停止的 Master 节点之后 HBase Master 运行状态
![再次启动已停止的 Master 节点之后 HBase Master 运行状态](https://i-blog.csdnimg.cn/blog_migrate/a5686989dc7cb189e62622a2da0bf2ec.png)
通过 BigInsights Web 管理页面也可以方便的启动 / 停止指定的 Master 节点,具体步骤请参考相关章节,此处不再赘述。
反向代理 HBase UI
Reverse proxy 是 BigInsights 提供的反向代理工具,可以对 BigInsights 中所拥有 UI 界面的服务组件进行反向代理连接支持。(注意:此功能仅在 BigInsights Enterprise 版本里提供。)
图 13. Reverse proxy 管理 HBase 页面
![Reverse proxy 管理 HBase 页面](https://i-blog.csdnimg.cn/blog_migrate/c1dfd49e759ffe61107fa7a4f29830d0.png)
例如,在打开 Reverse proxy 管理页面之后,利用 Reverse proxy 提供的 URL 和 Alias 映射功能,能够简便地将服务 UI 通过直观的链接来重定向打开。
通过 Reverse Proxy 页面,点击“hbase-master”可以直接打开 HBase Master 管理页面。
图 14. 打开 HBase Master 管理页面
![打开 HBase Master 管理页面](https://i-blog.csdnimg.cn/blog_migrate/76bb7272963e3c9c79aaf994f17fccea.png)
通过 Reverse Proxy 页面,点击“hbase-regionserver”可以直接打开 HBase Regionserver 管理页面。
图 15. 打开 HBase Region Server 管理页面
![打开 HBase Region Server 管理页面](https://i-blog.csdnimg.cn/blog_migrate/e397b91747feda6a2dc9baf6549b2946.png)
查看 HDFS 中的 HBase
通过管理 HDFS 中的 HBase 页面,可以直接查看 HBase 在 HDFS 中的使用情况,包括 -ROOT-, .META., logs, BigInsights Monitoring 的监控信息, hbase.id, hbase.version, splitlog, 点击“hbase”可以查看 HBase 目录大小,用户和目录权限等,如图。
图 16. 图形化管理 HDFS 中的 HBase
![图形化管理 HDFS 中的 HBase](https://i-blog.csdnimg.cn/blog_migrate/8ca2b79bb9174873f80e196b8acfa176.png)
提交 HBase 应用程序
BigInsights 提供简单的 HBase 应用 demo,通过“Application”中的 HBase 页面打开。根据需要,用户可以选择其中的 HBase 应用程序发布和运行。(注意:此项功能仅在 BigInsights Enterprise 版本里提供。)
图 17. HBase 应用程序
![HBase 应用程序](https://i-blog.csdnimg.cn/blog_migrate/d681303e2dce442c61d57db51eaeb4fd.png)
图 18 描述了一个简单的 HBase 的应用的发布与运行,此应用程序将自动完成表导出成 CSV 格式。
图 18. 运行 HBase 导出表应用程序
![运行 HBase 导出表应用程序](https://i-blog.csdnimg.cn/blog_migrate/ff47027a296d4cfd4a64decd25679084.png)
输入必要的参数后,如执行操作的名称,表名,Row 键值,要取得的 record 数目等,HDFS 中的输出格式,输出目录等,点击运行按钮,作业将被提交到 BigInsight 的 HBase 集群上运行,作业运行的详细情况可以通过 Application status 页面监视
图 19. 查看程序运行状态
![查看程序运行状态](https://i-blog.csdnimg.cn/blog_migrate/637223f144327b970cb6601d736dd2de.png)
从该页面可以查看作业名称,配置文件,作业开始的运行时间以及结束的时间,并且能够方便的查看作业执行的状态。