高级数据库技术

发布 2021-05-07 09:29:28 阅读 2403

**hadoop集群下hbase数据库的性能优化。

本通通过对hadoop集群和hbase集群的介绍及构建,深入分析了hbase集群的性能优化。得出hbase性能优化不要从程序和配置文件两方面入手,从而提高hbase集群性能。

关键词:hbase;hadoop;集群;优化。

1 hadoop集群概述。

随着互联网的高速发展,各种各样的数据冲刺着我们的视野。人们上传**、**、文章,更新论坛信息、点击广告留言等,这使得机器产生和保留的数据越来越多。数据的指数级增长首先向谷歌、雅虎、亚马逊和微软等处于市场领导地位的公司提出了挑战。

他们需要遍历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/sl**e)结构。分布式存储系统被称为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守护进程,通常运行在服务器集群的主节点上。

tasktracker任务跟踪节点。与存储的守护进程一样,计算的守护进程也遵循主/从架构:jobtracker作为主节点,检测mapreduce作业的整个执行过程,同时,tasktracker管理各个人物在每个从节点上的执**况。

下图说明了jobtracker与tasktracker的交互关系:

jobtracker与tasktracker的交互。

每个tasktracker负责执行由jobtracker分配的单项任务。虽然每个节点上仅有一个tasktracker,但每个tasktracker可以生成多个jvm来并行的处理许多map或reduce任务。同时,tasktracker还负责持续不断地与jobtracker通信。

如果jobtracker在指定的时间内没有收到来自tasktracker的”心跳”,它会假定tasktracker已经崩溃,进而重新提交相应的任务到集群中的其他节点。

2 hbase集群概述。

hbase是apache的hadoop项目的子项目,hbase是一个开源的、分布式的、面向列的存储系统,该技术**于google的**:”bigtable一个分布式的结构化数据存储系统“。hbase是google bigtable的开源实现,就像bigtable利用了gfs所提供的分布式数据存储一样,hbase在hadoop平台上提供了类似于bigtable的功能,作为hadoop的数据库,底层是将数据保存在hdfs里。

hbase不同于传统的关系数据库,采用的是基于列的而不是基于行的存储模式。基于列的存储的数据库中鼠标没列放在相邻的物理单元;查询时只访问设计到的列,不必将正行数据都读取出来,大大降低系统i/o开销,没列可以由一个线程来处理,支持查询时的并发处理。

hadoop与hbase关系框架图。

上图描述了hadoop生态系统中各层系统的关系,以及hbase在hadoop系统中的作用。hbase位于结构化存储层,hadoop hdfs为hbase提供了高可靠性的底层存储支持,hadoop mapreduce为hbase提供了高性能的计算能力,zookeeper为hbase提供了稳定服务和失效节点的替换机制。此外,pig和hive还未hbase提供了高层语言支持,使得在hbase上进行数据统计处理变得非常简单。

sqoop则为hbase提供了方便的rdbms数据导入功能,使得传统数据库数据向hbase中迁移变得非常方便。

hbase的数据表示一个系数的、持久化的、多维度的、排序的映射表。这张表的索引是行关键字,列关键字和时间戳。这三个基本类型的定义为:

行关键字,列关键字,时间戳。行关键字是行在表中的唯一标识,时间戳是每次数据写入都会有一个与之关联的时间戳,用户在**中存储数据,每一行都有一个可以拍下的主键和任意多的列,由于是稀疏存储的,所以每一张表里面的每一行数据都可以有截然不同的列。列关键字定义为”《列簇》:

《列标签》”,一个列簇下面可以有多个列标签,通过这两部分可以唯一的指定一个数据的存储列。

所有数据库的更新多有一个时间戳标志,每个更新都是一个新的版本,而hbase会保留一定数量的版本,这个值是可以设定的。客户端可以选择获取举例某个时间最近的版本,或者一次获取所有版本。hbase集群数据模型主要包括逻辑数据模型和物理数据模型。

一个表可以想象成一个大的映射关系,通过主键,或者主键+时间戳,可以定位一行数据,由于是稀疏数据,所以某些列可以是空白的,下面就是数据的逻辑数据模型:

hbase数据表逻辑数据。

如果用传统的盖帘来对hbase的数据表作解释,那么hbase的每个数据表可以看做一个数据库模式,每一个行就是一个表,行关键字就是表名,这个表根据列的不同可以划分为多个版本,同时每个版本操作都会有时间戳关联到操作的行。每一个行可以多个列簇,每一个列簇可以包含无数个列,每一个列都可以有一个不同于其他列的时间戳。在通用数据库中当表创建时已经定义了列,如果修改表结构非常困难,在hbase中可以很轻松实现添加一个列簇和列。

虽然从逻辑模型来看,每个**是由很多行组成,但是在物理存储上面,它是按照列来保存的。

hbase数据表存储结构。

物理数据模型是将逻辑模型中的一个行分割成为按列存储的物理模型。对于hbase的数据模型操作时,会锁定整个行,并保证行操作的原子性。

高级数据库技术考点

1 时态建表 设计,面向对象模型创建 定义。2 现代应用中的数据所表现出来的和传统数据有什么不一样的特征?3 面向对象中给大家介绍了多种数据类型,其中构造类型大概包涵几种数据类型?这些构造类型之间的特点是什么?4 基于对时间轴结构的选择,时间模型划分为哪4种时间模型?5 空间对象可以抽象为哪3种基本...

高级数据库技术考试大纲

考试复习大纲。第一章数据库及其基本理论。1 什么是数据模型?包括哪3个基本要素?2 什么是概念模型 逻辑模型 物理模型?3 逻辑模型可分为哪3种模型?4 数据库管理系统包括哪些功能?5 什么是数据库系统?6 什么是关系 元组 属性?7 掌握利用e r模型分析数据对象及相互之间的关系。8 如何将e r...

高级数据库技术考题 1

北京交通大学。2015 2016学年第二学期工程硕士期末考试试题。课程名称 高级数据库技术出题教师 任课教师。专业班级 姓名学号。注意 卷面共三道大题,满分100分,考试时间120分钟。一 简答题 每小题8分,共40分 1.画出数据库系统的组成示意图,并阐述数据库系统的特点。2.简述数据库系统从哪些...