InfoSphere BigInsights 是 IBM 集成和开发的一个大数据分析平台,同时具备可视化的管理界面。它能够帮助企业从海量的数据集中挖掘出潜在的商业价值,基于这些信息,企业能够以此或者有用的信息和做出正确的商业决策。如果使用传统的数据处理方式,不仅数据处理的效率低,而且容易丢失一些重要的数据信息。
BigInsights 包含了 Apache Hadoop 开源项目,同时集成了 IBM 自己开发的组件,这样的软件架构具有处理大数据的天然优势,可以满足企业开发和部署高可扩展的分布式计算平台的要求。它提供了简洁方便的 UI 界面,用户只需要通过界面简单修改配置,就能够轻松实现 Hadoop、HBase、Oozie、Hive 等各个组件的安装。同时,用户可以通过 UI 来查看各个组件的运行状态。
HBase 作为 BigTable 的一个开源实现,是 BigInsights 软件平台中重要的一个组成部分,HBase 是一个面向列的分布式数据库。HBase 不是一个关系型数据库,其设计目标是用来解决关系型数据库在处理海量数据时的理论和实现上的局限性。传统关系型数据库,以满足数据一致性(ACID)为目标,并没有考虑数据规模扩大时的扩展性。HBase 从一开始就是为 Terabyte 到 Petabyte 级别的海量数据存储和高速读写而设计,这些数据能够被分布到数千台普通服务器上,并且能够满足高并发的读写需求。
随着移动互联网,物联网(Internet of Things)等新兴应用业务的不断出现,HBase 的应用也变得越来越广泛。很多大型互联网公司,比如脸书、淘宝等都在 HBase 上有符合自己业务特征的应用和扩展,同时对 HBase 的发展也做出了自己的贡献,在这些贡献里面当然也包括 IBM 在内。大型的移动互联网公司在业务中面临的一个重要挑战就是大规模数据的实时写入与高效读取,随之而来的就是人们会越发关注 HBase 的读写性能。
往 HBase 写入数据的过程中,涉及到以下的一些步骤:
从 HBase 读取数据,主要分为以下两种情况:
通过上述 HBase 读写过程的解析,我们可以看到 memstore 在读写过程中起到了非常重要的作用。所以在关注 HBase 高并发写入读取数据性能的时候,这些性能的指标很难被直观检测到,所以需要借助外部的一些工具来监控这些指标,以此来找出性能的瓶颈,并且对集群做出调优,使 HBase 的读写性能达到最佳。
回页首
随着数据中心的发展,对于计算机资源以及应用程序资源利用的监控比以往更加重要。Ganglia 是一个开源的监控项目,现在已经能扩展到监控数千节点的集群。每一台被监控的机器上都会运行一个叫 gmond 的守护进程,负责发送在本机上采集到的一些度量,比方说 CPU 的使用率、内存的使用情况、磁盘的使用等等。这个守护进程会将采集的这些信息发送给集群里面的一台主机,这台主机会接收所有的度量信息,将这些度量信息整合之后以可视化的界面展示给用户。gmond 守护进程的开销非常小,所以不会影响它所在机器的性能。
图 1. Ganglia 架构和数据流
由图 1 可以看到,Ganglia 可以监控由好几个子集群结合起来的集群。gmond 与 gmetad 之间的关系相当于 Master-Slave 的关系,一个 gmetad 节点可以所属于一个或者多个 gmond 节点。在 gmetad 搜集到来自各个 gmond 节点的度量信息之后,通过 rrdtool 产生数据的走势图。最后通过 Web 的方式展现给用户。
gmond 有以下几个特点:
本文使用 BigInsights 版本为 2.1.2,所属的 HBase 版本为 0.96。因为本文的重点是如何使用 Ganglia 来监控 BigInsights 中的 HBase 集群,所以将省略 BigInsights 的安装步骤,大家可以参考其它的文章来完成对它的部署。该集群由四个节点组成,如表格 1 所示。
表 1. BigInsights 集群信息
主机名称 | IP 地址 | 操作系统版本 |
---|---|---|
HMasterServer | 9.112.246.124 | Red Hat Enterprise Linux 5.9 |
HRegionServer1 | 9.110.79.23 | Red Hat Enterprise Linux 5.9 |
HRegionServer2 | 9.110.79.24 | Red Hat Enterprise Linux 5.9 |
HRegionServer3 | 9.110.79.25 | Red Hat Enterprise Linux 5.9 |
安装完成之后在浏览器可以输入 URL:9.112.246.124:8080,即可登录 Biginsights 的 console,查看各个模块的状态信息。
本文 Ganglia 的安装都是基于离线安装的,所以需要安装一些依赖包,如表格 2 所示。
表 2. Ganglia 依赖包及安装包
依赖包 | 作用 |
---|---|
expat-2.0.1.tar.gz | 解析 XML |
apr-1.4.5.tar.gz | Apache 可移植运行库 |
apr-util-1.3.12.tar.gz | Apache 可移植运行库 |
confuse-2.6.tar.g | 配置文件解析 |
rrdtool-1.2.27.tar.g | 画图 |
php-5.4.10.tar.gz | 支持 Ganglia 的 web 页面 |
httpd-2.2.23.tar.gz | Apache 用于发布 web 页面 |
ganglia-3.6.0.tar.gz | 度量数据的采集 |
ganglia-web-3.5.10.tar.gz | 发布采集的度量信息 |
其中 php、Apache、ganglia-web 只需要在主节点上安装。主节点负责将从节点的度量信息,以 web 的方式展现给用户。
ganglia-web 是使用 php 编写的 web 界面,以图表的方式展现存储在 RRD 中的数据。通常与 gmetad 进程运行在一起。
清单 1. 主节点 ganglia-web 的安装与配置
tar -zxf ganglia-web-3.5.10.tar.gz cd /home/Ganglia/ganglia-web-3.5.10 cp conf_default.php conf.php vi conf.php $conf['gweb_confdir'] = "/home/Ganglia/ganglia-web-3.5.10"; $conf['gmetad_root'] = "/usr/local/ganglia";
清单 2. 主节点创建 ganglia-web 的临时目录
cd /home/Ganglia/ganglia-web-3.5.10/dwoo mkdir cache chmod 777 cache mkdir compiled chmod 777 compiled
清单 3. ganglia 在所有节点的安装与配置
tar -zxf ganglia-3.6.0.tar.gz cd ganglia-3.6.0 ./configure --prefix=/usr/local/ganglia --with-gmetad --enable-gexec --with-python=/usr/local
在安装完 Apache 和 PHP 之后,需要讲主节点采集到的信息通过 web 的方式发布出去,这里需要在 ganglia-web 上做一定的配置,在 httpd.conf 增加了如下部分内容:
清单 4. 主节点使用 Apache 发布 ganglia-web
Alias /ganglia “/home/Ganglia/ganglia-web-3.5.10" <Directory “/home/Ganglia/ganglia-web-3.5.10"> AuthType Basic Options None AllowOverride None Order allow,deny Allow from all </Directory>
为了能够使主从节点之间组成一个信息度量的采集集群,需要对主节点的 gmetad 进行配置,即修改“/etc/ganglia/gmetad.conf”文件,如清单 5。本文将所要监控的集群的名称叫做“moma-cluster”,这个集群里面包含了四个节点,同时指明了在主节点上度量信息存放的位置是“/usr/local/ganglia/rrds”,case_sensitive_hostnames 表示在集群里面,各个节点的名字的大小写是敏感的。
清单 5. 主节点配置 gmetad
data_source "moma-cluster" HMasterServer HRegionServer1 HRegionServer2 HRegionServer3 xml_port 8651 interactive_port 8652 rrd_rootdir "/usr/local/ganglia/rrds" case_sensitive_hostnames 1
需要对各个从节点上安装的 gmond 进行配置,即修改“/etc/ganglia/gmond.conf”文件,如清单 6。
清单 6. 从节点配置 gmond
cluster { name = "moma-cluster" owner = "nobody" latlong = "unspecified" url = "unspecified" }
在安装完所有这些服务之后,可以开始启动这些服务项,测试是否安装完成,主节点启动 apche 服务和 gmetad 服务,每一台从节点启动 gmond 节点。在启动完成之后,可以在浏览器中输入 URL: 9.110.246.124/ganglia,可以看到如图 2 所示的界面,其中包含了四个节点。
图 2. Ganglia 监控界面
回页首
文本已经在上一节中介绍了 Ganglia 能够监控的指标,包括系统的 CPU、内存、DISK IO 等等,这些都是涉及的系统资源。通过 HBase 读写的简介,本文已经将读写过程中涉及到的一些重要参数做了介绍,这些参数的配置和调整在很大程度上影响到 HBase 的读写性能。如果只是从系统资源的利用率来衡量,很难将那些因为 HBase 内部机制而影响性能的因子挖掘出来,从而会影响性能的调优,所以需要 Ganglia 在监控与采集系统资源的同时,获得跟 HBase 本身机制相关的度量信息。
其实 HBase 本身已经实现了这些度量信息的采集,即通过对度量信息的采集接口发送给 Ganglia,下面将举例 RegionServerMetrics,详细说明这个实现过程。
图 3. HBase Metrics 架构设计
清单 7. 创建 Context 实例*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10 hbase.sink.ganglia.period=10 hbase.sink.ganglia.servers=9.110.246.124:8649
在完成 HBase Metrics 跟 Ganglia 结合的配置之后,重启 Biginsights 中的 HBase 集群,之后再次打开 Ganglia 的控制页面,就可以看到跟 HBase 相关的 metrics,如图 4 所示。
图 4. Ganglia 采集 HBase Metrics
回页首
本文将结合车联网项目中的海量数据(GPS 数据,CAN 数据等)的读写案例,来说明如何使用 Ganglia 来监控 HBase 集群,从而发现 HBase 读写中的性能瓶颈,从而做出调整与优化,提升整个集群的性能。
本文采用多线程的方式,采取读文件的的方式来模拟大数据中持续不断的写入过程,从而来监控 HBase 在数据灌输中的各项指标,包括系统资源,以及 HBase 的各项指标。首先,本文将通过写数据的过程中发现的一个关于集群 CPU 消耗不均衡的问题来调整,经过优化与调整之后,实现集群的负载均衡。
由图 5 可得,在高并发的数据写入过程中,三台 RegionServer 上的 CPU 使用率非常不均匀,写入的压力集中在 HRegionServer2 上,而且 HRegionServer1 和 HRegionServer3 的 iowait 值非常高。分析其原因,这是由于 HBase 本身的特性造成。在 HBase 里面,在表格刚刚创建的时候,只有一个 region,随着数据的不断写入,region 会被分割,然后集群会对这些 reigon 做一个调度。所以说,在 region 没有被分割的时候,会集中在某一台 server 上,也就是图 4 中的 HRegionServer2。因为 HBase 底层的存储机制是基于 HDFS,所以会存在冗余备份的过程,数据在写入到 HRegionServer2 的时候,同时会对它在其它节点上做备份写入操作,所以会造成 iowait 非常高。
图 5. Ganglia 监控优化之前的 CPU
本文已经在第一节中介绍过关于 memstore 在整个 HBase 读写过程中的作用。通过 HBase Metrics 就可以实时监控整个指标,及时发现性能的瓶颈。HRegionServer1 和 HRegionServer2 在写入过程中的 memstore 的平均值分别是 7.3MB 和 32.7MB,而 HRegionServer3 的平均值只有 1.97KB,进一步说明了整个集群的写入是负载不均衡的。
图 6. Ganglia 监控 HBase Metrics
为了能够解决 CPU 使用率不均匀的问题,本文对 HBase 中 Rowkey 的设计上做了一个 region 的预划分,同时在数据的写入过程中,根据 GPS/CAN 数据的特点,做了一个动态的 region 的分配机制,最终实现了数据写入的负载均衡,如图 7 所示。
图 7. Ganglia 监控优化之后的 CPU
回页首
本文通过介绍 Biginsights 以及其中 HBase 的读写机制,引出在大数据读写过程中对性能监控的需求,Ganglia 是现在主流的监控集群的开源软件,能够满足对集群的系统资源的监控。但是这并不能采集 HBase 的一些度量信息,所以介绍了 HBase Metrics。本文最后通过车联网数据在 Biginsights 的写入案例,展示了如何使用 Ganglia 对整个集群性能以及 HBase Metrics 的进行性能监控,找到了数据写入的瓶颈,对此作出了优化,提升了整个集群的写入性能。
本文对于 Biginsights 或者是 HBase 读写性能的监控非常有指导意义,可以通过监控系统以及平台的指标来及时发现性能的瓶颈,做出调整与优化,最终提升数据的读写性能。