HBase有如下几个特点:首先HBase是No-SQL的一个典型实现,提升了系统的可扩展性;其次HBase支持线性水平扩展,极大提升了系统的可伸缩性和运算能力;最后HBase和Google的BigTable有异曲同工之妙,底层也是建立在HDFS(Hadoop分布式文件系统)之上,可以搭建在廉价的PC机集群上。No-SQL、云计算、海量数据分析的普及,使我们越来越关注系统的可靠性(High Availability),数据容灾/数据恢复是高可用系统的一个很重要的技术组成,本文由简入深,一步步搭建一个HBase数据集群,并详细说明生产环境如何使用HBase数据容灾方案。
HBase架构简介
HBase在完全分布式环境下,由Master进程负责管理RegionServers集群的负载均衡以及资源分配,ZooKeeper负责集群元数据的维护并且监控集群的状态以防止单点故障,每个RegionServer会负责具体数据块的读写,HBase所有的数据存储在HDSF系统上。
图一 HBase逻辑架构[1]
HBase集群部署
HBase集群物理架构
物理机
192.168.0.105 Master Ubuntu Desktop 11.10 Desktop
192.168.0.102 Slave1 Ubuntu Desktop 11.10 Desktop
192.168.0.103 Slave2 Ubuntu Desktop 11.10 Desktop
192.168.0.104 Slave3 Ubuntu Desktop 11.10 Desktop
192.168.0.101 Recover Ubuntu Desktop 11.10 Desktop
图二 集群物理架构
先决条件
1.SSH协议[2]
Hadoop集群之间的通讯采用的是SSH协议,所以要保证Master、Slave之间可以自由的通讯,一般推荐使用无验证通讯
◦安装SSH
apt-get install openssh-server
apt-get install openssh-client ◦创建相同用户名的SSH公钥
在master主机和slave机上创建相同的用户hadoop
sudo adduser hadoop ◦在主机上生成公私钥key pair
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys ◦将key值复制到slave1和slave2上
scp $HOME/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/.ssh/authorized_keys
scp $HOME/.ssh/id_rsa.pub hadoop@slave2:/home/hadoop/.ssh/authorized_keys
scp $HOME/.ssh/id_rsa.pub hadoop@slave3:/home/hadoop/.ssh/authorized_keys 这样master就可以自由的访问slave节点了
2.Java安装
sudo apt-get install sun-java6-jdkHadoop部署
1.Hadoop配置[3]
下载Hadoop 0.20.2版本[4]
◦hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HADOOP_HOME=/home/hadoop/hadoop-0.20.2 ◦master,slaves
Master, Slave1, Slave2, Slave3 ◦core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> //临时文件目录
<value>/data/tmp/hadoop</value> //注意不要放到/tmp目录下
</property> ◦hdfs-site.xml
<property>
<name>dfs.replication</name> //备份文件
<value>1</value>
</property> ◦mapred.xml
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property> 2.启动Hadoop
hadoop namenode format //首先需要格式化namenode
bin/start-all.sh验证服务:MapReduce管理界面http://master:50030/jobtracker.jsp
HBase部署
1.HBase配置
下载HBase 0.90.50版本[5]
◦HBase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HBase_MANAGES_ZK=true //zookeeper随HBase启动 ◦HBase-site.xml
<property>
<name>HBase.rootdir</name>
<value>hdfs://master:9000/HBase</value> //端口号和名称和Hadoop配置一致
</property>
<property>
<name>HBase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>HBase.master</name>
<value>master</value>
</property>
<property>
<name>HBase.zookeeper.quorum</name>
<value>slave1,slave2,slave3</value>
</property> 2.启动HBase集群
Master主机上执行 $HBase_HOEM/bin/start-HBase.sh
验证:使用jps命令查看HBase的集群进程
HBase数据容灾
前面我们已经介绍过,如果HBase单个节点出现故障,Zookeeper会通知master主进程,master会将HLog日志进行拆分,分发到其他RegionServer上进行数据恢复。HBase对于单点故障的容错能力还是不错的,但是如果发生多点故障,现有的基本容错功能是远远不够的(会造成数据丢失)。
HBase Replication机制[6]
HBase 0.90以后开始支持Replication机制,该机制设计的主导思想是基于操作日志(put/get/delete)做数据同步,这点很像MySQL基于Binary Log做statement-based replication[7]。
如下图所示,客户端的put/delete操作会被RegionServer写入本地的HLog中去,与此同时每个RegionServer会将Hlog放入对应znode上的Replication队列,HBase集群会有一个独立的线程,根据固定大小的buffer值,将HLog内容推送到Slave Cluster集群中的某个RegionServer上(当前版本只支持单个Slave Cluster复制),并在将当前复制的偏移量保存在ZooKeeper上,整个过程是异步完成的。
图三 HBase数据同步[8]
HBase Replication启动
1.HBase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HBase_MANAGES_ZK=false //ZooKeeper独立启动 2.HBase-site.xml
master集群和slave集群的配置需要同时修改
<property>
<name>HBase.replication</name>
<value>true</value>
</property>3.Shell启动复制功能
add_peer disable 'my_table_name' //表名字
alter ' my_table_name ', {NAME => 'family_name', REPLICATION_SCOPE => '1'} //修改表schema
enable ' my_table_name' 验证:查看RegionServer的日志
Considering 1 rs, with ratio 0.1
Getting 1 rs from peer cluster # 1
Choosing peer 192.168.0.101:62020数据校验
为了保证数据一致性,生产环境上做异地容灾需要增加数据校验/数据监控。HBase的Replication机制,根据官方的文档提供了数据比对的工具类VerifyReplication[9]。我们可以将其功能包装起来,做自动化校验。下面是代码片段:
final String[] argumentsArray = new String[] {
"--starttime=xxxxxxxxxxx", //开始时间戳根据具体的业务需要
"--stoptime=" + new Date().getTime(), //选取当前时间戳作为结束的时间戳
"1", //peer node id
"my_table_name" //表名
};
final Timer timer = new Timer();
timer.schedule(new TimerTask() {@Override
public void run() {
try {
Configuration conf = HBaseConfiguration.create();
Job job = VerifyReplication.createSubmittableJob(conf, argumentsArray);
job.waitForCompletion(true);
long value = job.getCounters().findCounter(VerifyReplication.Verifier.Counters.BADROWS).getValue();
if (value > 0) {
Logger.getLogger("Finding Unmatched Rows! " + value);
}
} catch (Exception e) {
//异常处理策略
final String msg = "Comparing Job Error!";
Logger.getLogger(this.getClass()).error(msg, e);
try {
SMTPClientWrapper.send("xxx@xxx.com", "HBase replication error!", msg);
} catch (Exception e1) {
//考虑邮件服务器down机, failover
Logger.getLogger(this.getClass()).error("send alarm email error!", e);
}
}
}
}, 0, 600000); //十分钟校验一次小结与展望
HBase的Replication机制,为增强系统可靠性提供了有力支持,但目前单节点Slave Cluster复制会增加系统的负荷并间接形成Slave Cluster的数据热点,期待HBase后续的版本支持多节点Slave Clusters复制。
引用
[1] http://ofps.oreilly.com/titles/9781449396107/intro.html
[2] http://en.wikipedia.org/wiki/Secure_Shell
[3] http://hadoop.apache.org/common/docs/current/cluster_setup.html
[4] http://hadoop.apache.org/common/releases.html#Download
[5] http://www.apache.org/dyn/closer.cgi/HBase/
[6] http://HBase.apache.org/replication.html
[7] http://dev.mysql.com/doc/refman/5.1/en/replication-formats.html
[8] http://HBase.apache.org/replication.html
[9] http://HBase.apache.org/xref/org/apache/hadoop/HBase/mapreduce/replication/VerifyReplication.html
分享到:
相关推荐
容灾实践是HBase使用中非常重要的部分,它涉及数据备份、故障转移等机制来保证数据的可用性、完整性和一致性。在容灾设计中,需要考虑以下方面: - 保证数据多副本存储,确保数据在部分节点故障时不会丢失。 - 实现...
在IT行业中,灾备与容灾是至关重要的领域,...总之,双活数据中心容灾解决方案是现代企业保护业务连续性的基石,涉及多个技术层面和管理策略。理解并实施这样的方案,有助于企业确保关键业务不受损失,实现可持续发展。
云时代的容灾技术不仅涉及数据备份,还包括实时同步、多区域部署、跨地域复制等,如阿里云的DTS(Data Transmission Service)和DBS(Database Backup Service)等服务,为企业提供高可用和灾难恢复解决方案。...
综上所述,蚂蚁金服和支付宝的海量账单处理方案涉及了大数据存储、分布式计算、高并发处理、容灾备份等多个领域的技术,这些技术和实践对于任何处理大规模数据的企业都是极其宝贵的。"下载地址.txt"和"源码必读.txt...
### HBase数据迁移解决方案的设计与实践 #### 1. 同构数据源迁移 同构数据源迁移是指在相同的硬件和软件环境下进行数据迁移。这种迁移方式通常包括以下典型场景:机房搬迁、HBase主备集群的搭建、集群冷备、异地...
2-1 HBase简介及其在大数据生态圈的位置 2-2 HBase数据存储模型及与关系型数据库的区别 2-3 Hadoop伪分布式集群安装 2-4 HBase伪分布式集群安装 2-5 HBase基础架构 2-6 HBase阶段小结 第3章 HBase原理与实战 介绍...
- **HBase数据模型**:学习HBase的数据模型,了解表、行键、列族等基本概念以及它们之间的关系。 - **HBase读写流程**:掌握HBase中的数据读取和写入的具体流程,包括如何定位数据、如何进行读写操作。 - **HBase...
阿里云*** X-Pack数据存储检索分析平台是基于阿里云大数据技术实现的一个高效、安全、具有广泛适用场景的数据存储与分析解决方案。平台整合了Apache HBase、Phoenix、Spark和Solr等多种技术,支持数据的存储、检索、...
- 高可用性:阿里云HBase可能采用了多副本策略,确保数据的高可用性和容灾能力,减少单点故障的影响。 - 灵活的数据模型:HBase是列族数据库,支持动态列,允许用户根据需要添加或删除列,适应业务变化。 - 强...
总的来说,云HBase是应对大数据挑战的关键技术,它通过创新的架构和生态,不仅解决了大数据的存储和计算问题,还为企业提供了灵活、高效且经济的数据处理能力。这种技术的应用不仅限于特定行业,而是普遍适用于需要...
为了应对大量数据和保持事务的时间序列,采用了HBase提供的高效的数据存储解决方案。 最后,文档探讨了HBase在亿方云的演进之路,提到了主从同步、云HBase监控以及自动化容灾演练等关键实践。同时,也强调了HBase在...
企业用户需要深入理解这些技术,并结合自身业务特点,选择合适的云迁移路径和容灾方案,从而确保业务的顺畅迁移与持续稳定运行。 综上所述,云迁移与云原生容灾不仅涉及技术的革新,更涉及到企业信息化战略的转变。...
在大数据时代,云数据库HBase因其强大的架构创新和技术特性,成为了应对海量非结构化数据挑战的重要解决方案。HBase是一种分布式的、基于列族的NoSQL数据库,它在大规模数据存储和高并发处理方面展现出了卓越的能力...
综上所述,HBase在大数据云存储领域展现出强大的优势,不仅解决了传统关系型数据库在海量数据面前的瓶颈,还通过技术创新实现了对实时数据处理和高并发访问的支持。随着技术的不断迭代,HBase将继续引领大数据存储的...
- 用户需要了解如何定期备份HBase数据,以防数据丢失。 - 恢复策略可能包括从备份中恢复,或者使用时间点恢复功能。 10. **最佳实践**: - 文档可能会提供如何设计表结构、数据模型的最佳实践,以提高效率和可...
综上所述,阿里云专有云企业版V3.8.0的云数据库HBase是面向大数据时代的强大数据库解决方案,它集成了HBase的高性能、高可用性和可扩展性,为企业的大数据处理和实时分析提供了可靠保障。用户在使用过程中,应遵循...
- **数据存储技术**:利用HDFS、HBase等技术实现数据的有效存储和查询。 - **智能分析技术**:应用机器学习、深度学习等AI技术实现数据的智能分析与预测。 #### 五、安全保障措施 - **数据安全管理**:建立严格的...