高级数据库技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅析Hadoop集群下HBase数据库的性能优化
摘要:随着大数据应用的程度不断发展,NOSQL也日益成为大家关注的焦点。各种集群应用也不短涌现。本通通过对HADOOP集群和HBASE集群的介绍及构建,深入分析了HBASE集群的性能优化。得出HBase性能优化不要从程序和配置文件两方面入手,从而提高HBASE集群性能。
关键词:HBASE;HADOOP;集群;优化
1Hadoop集群概述
随着互联网的高速发展,各种各样的数据冲刺着我们的视野。人们上传视频、照片、文章,更新论坛信息、点击广告留言等,这使得机器产生和保留的数据越来越多。数据的指数级增长首先向谷歌、雅虎、亚马逊和微软等处于市场领导地位的公司提出了挑战。他们需要遍历TB级和PB级数据来发现哪些网站更受欢迎,哪些书有需求,哪种广告更吸引用户,现有技术处理这些数据已经显得吃力。面对挑战及使命,谷歌率先发表了MapReduce数据处理算法相关的论文,同时,Doug Cutting受到MapReduce算法的启示,领导开发了开源版本的MapReduce,命名为Hadoop。由于Hadoop生态系统的开源性、可持续性以及其高性能的处理能力,雅虎等公司纷纷响应,为其提供支持。如今,Hadoop已经成为许多互联网公司基础计算平台的核心部分。研究和分析Hadoop生态系统集群已经迫在眉睫。
Hadoop作为一个开源框架,可以编写和运行分布式应用,处理大规模数据。分布式计算时一个宽泛并且不断变化的领域,但Hadoop集群与分布式不同之处在于以下几点:方便。Hadoop集群运行在由一般商用机器构成的大型集群上,或者如亚马逊弹性计算云(EC2)等云计算服务之上;
健壮。Hadoop集群致力于在一般商用硬件上运行其架构假设硬件会频繁地出现失效。它可以从容地处理大多数此类故障。
可扩展性。Hadoop集群通过增加集群节点,可以线性地扩展,以便处理更大的数据集。
简单。Hadoop允许用户快速编写高效的并行代码。
Hadoop集群的方便和简单让其在编写和运行大型分布式程序方面占有巨大优势,同时
其健壮性和可扩展性有能胜任雅虎和Facebook等最严苛的工作。下图解释了如何与Hadoop 集群进行交互:
Hadoop集群与客户端的交互图
Hadoop集群是在同一地点用网络互连的一组通用机器。数据存储和处理都发生在这个机器”云”中。不同的用户可以从独立的客户端提交”作业”到Hadoop,这些客户端可以是远离Hadoop集群的个人台式机。 Hadoop中心节点通过NameNode和JobTracker进行管理和控制各个节点以及处理各项”作业”。在一个全配置的集群上运行Hadoop,意味着在网络分布的不同服务器上运行一组守护进程(Daemons)。这些守护进程有特殊的角色,它们包括:NameNode名称节点。Hadoop集群在分布式计算和分布式存储中都采用了主/从(master/slave)结构。分布式存储系统被称为Hadoop集群文件系统HDFS。NameNode位于HDFS的主端,它指导从端的DateNode执行底层的I/O任务。NameNode主要在HDFS中跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。运行NameNode需要消耗大量的内存和I/O资源,因此为了减轻机器的负载,驻留NameNode的服务器通常不会存储用户数据或者执行MapReaduce程序的计算任务。这意味着NameNode服务器不会同时是DateNode或者TaskTracker。
DataNode数据节点。在每一个Hadoop集群的从节点上都会驻留一个DateNode守护进程,用来执行分布式文件系统的繁重工作,将HDFS数据库读取或者写入到本地文件系统的实际文件中。当希望对HDFS文件进行读取时,文件被分割为多个块,由NameNode告知客户端每个数据库驻留在哪个DataNode中。客户端直接与DateNode守护进程通信,处理与数据库相对应的本地文件。而后,DataNode会与其他DataNode进行通信,复制这些数
据块以实现冗余。
NameNode/DataNode在HDFS中的交互
上图说明了NameNode和DataNode的角色。图中显示了两个数据文件,一个位于目录/user/chuck/data1,另一个位于/user/james/data2。文件data1有3个数据块,表示为1,2,3,而文件data2由数据库4和5组成。这些文件的内容分手在几个DataNode上。这个实力中,每个数据库有3个副本。例如,数据库1被复制在途中右侧的3个DataNode上,这确保了如果任何一个DataNode崩溃或者无法通过网络访问时,仍然可以读取这些文件。DataNode 不断向NameNode报告,初始化时,每个DataNode将当前存储的文件块告知NameNode。在这个初始映射完成后,DataNode仍然会不断地更新NameNode,为之提供本地修改的相关信息,同时接受指令创建、移动或删除本地磁盘上的数据块。
Secondary NameNode(SNN)次名称节点。SNN是一个用于检测HDFS集群状态的辅助守护进程,像NameNode一样,每个集群都有一个SNN,它通常也独占一台服务器,该服务器不会运行其他的DataNode或者TaskTracker守护进程。SNN与NameNode的不同在于它不接受或者记录HDFS的任何实时变化。相反,它与NameNode通信,根据集群所配置的时间间隔获取HDFS元数据快照。NameNode是Hadoop集群的单一故障点,而SNN的快照可以有助于减少停机的时间并降低数据丢失风险。然而,NameNode的失效处理需要人工的干预,即手动地重新配置集群。
JobTracker作业跟踪节点。它是应用程序和Hadoop集群之间的纽带,一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件、为不同的任务分配节点以及监控所有任务的运行。如果任务失败,JobTracker将自动重启任务,但所分配的节点可能会不同,同时受到预定义的重试次数限制。每个Hadoop集群只有一个JobTracker守护进程,