试述hadoop生态系统以及每个部分的具体功能_Hadoop架构小结

f348d83671627214027f24a8be47b7d2.png

什么是Hadoop

• 信息时代,数据量越来越大,传统的集中式存储(即所有数据都存储在一台机器上)再也满足不了存储需求。毕竟纵向扩展(即将用于存储的那一台机器升级配置,提高处理能力)总是有限的

• 此时谷歌提供了一个横向扩展的解决方案,即不再只使用一台机器去做存储,而是使用很多普通的,便宜的,容量大的机器去做存储。谷歌在2003年发布了一篇名为Google FileSystem的论文,又于2004年发布了MapReduce论文。前者讲述了如何用横向扩展的方式去存储数据(我们将之称为分布式结构),后者提供了一种在使用分布式结构存储数据的情况下,程序员去使用这些数据的一种并行处理的方法

• 随后谷歌又于2008年发布了Bigtable论文,在存储的数据之上提供了一种让人更容易接受的,也更易于使用的提取,使用,更新这些数据的新的存储模型

• 开源基金会Apache,可以说紧接着谷歌的研究成功,针对分布式结构提供了开源的实现(开源的简单理解就是:不收钱),这个开源的实现就是我们今天说的Hadoop

Hadoop由什么组成

• Hadoop可以说是一整套分布式大数据生态系统(大数据指的是数据量很大),因此不可避免的需要以下几个部分来组成:存储,访问和更新,提取和使用

• 关于存储部分,我们已经知道,Hadoop将大量的数据用许多个机器来共同存储。具体的存储方式是:分片。用一个简单的例子来诠释分片的话,就是在存储人口信息数据时,将2020年2月的数据存在机器A上,将2020年1月的数据存储到机器B上。如此一来,机器A和机器B就可以共同组成2020年前两个月的人口数据库。如果有很多个机器都遵循一个机器存一个月的数据的话,那么它们就可以共同组成完整的人口数据库了。

• 在访问和更新上,Hadoop为了让使用者在访问的时候可以看到,如前面的例子所说的,完整的人口数据库,它需要让各个机器之间相互通讯,互通有无。于是Hadoop从许多机器中选择一个领导者,并将它成为NameNode,将其他的被领导者都成为DataNode。然后NameNode上会存储关于所有的DataNode的信息,包括谁存着什么数据,谁现在在正常工作,谁故障了等等。如此一来,使用者要找任何数据的时候,只需要去问问NameNode,就可以精确地知道应该去哪台机器上取这个数据了。使用者想要更新任何数据的时候,NameNode也会告诉他,去哪台机器上存就可以了

• 我们将存储和访问更新这两个部分合一,统一称为HDFS(Hadoop Distributed File System)

• 最后说说关于这个提取和使用的部分。任何数据都不可能是只存不取的,因此对于一个大数据生态系统来说,肯定要有数据的出口。这个出口就跟谷歌在2008年发布那篇Bigtable论文息息相关了。

基于Bigtable论文,Apache基金会创建了HBase项目(Hadoop Database),也就是一个分布式的,面向列的(面向列的意思就是每一列数据一起存,而不是每一行数据一起存)开源数据库

– HBase可以说将HDFS这个存储方式彻底完善成为了一个数据库系统,补全了最后一块短板。它把存储在HDFS里面的数据通过行,列,时间三个维度进行组织,并给使用者提供随机读写(随机读写是指不按照既定的顺序去读取和写入数据)和增量数据更新的接口(增量数据更新是指在不改变现有的存储数据的情况下,增加新的数据)

HBase很多概念跟传统的关系型数据库很相似,但是它们之间有一个很大的区别,就是HBase可以随时增删表的列,而不用遵守任何之前定下的规则。而对于传统的关系型数据库而言,有几列,每列分别存什么都是固定无法改变的

HBase和接下来说的Hive不同,存储的是物理表(也就是说表里每个数据都是真实存储在硬盘的某个地方的,而不是只存储了一个找到这个数据的路径)

• 但是Hadoop生态中还有一种批量处理数据的方法,叫做Hive。所谓的Hive,就是给本来是无结构存储的HDFS套上跟传统关系型数据库一样的结构信息,规定出什么什么是列,什么什么是行,然后用逻辑表的方式去存储(逻辑表的意思就是实际上没有存储任何实际信息,只是存储了当你需要什么数据的时候,去哪里取得的一个路径类的信息),最后再使用MapReduce技术,直接从HDFS里面大批量的去提取和处理数据的方式

– 在这里可能必须要提一下MapReduce的实现。假设我们要在一万个网页上统计所有词语各自出现的总次数,使用MapReduce的技术,我们会首先让10台机器(10台是一个随便说的数字)去这10亿个网页上,将网页的内容解析成如下格式:(词语1:1次,词语2:1次,词语1:1次,词语3:1次……)。这个过程称为Map,即映射。

然后再用2台机器(2台也是随便说的数字),去获取那10台解析出来的结果,把他们合并成为如下格式:(词语1:100次 ,词语2:20次,词语3:300次……)。这个过程成为Reduce,即归纳。

– MapReduce是一种比较重型的计算方式,主要原因是因为它本身是一种批量处理的手段,使用了大量机器,从而造成机器之间需要网络通讯;并且为了不因为机器故障而损失结果,每个Map任务结束后还要往硬盘里面写入结果;同时它要求所有机器都结束了Map之后才能开始Reduce,然而怎么可能每台机器执行效率都一样呢?于是真正开始执行Reduce的时间是由Map任务执行的最慢的那台机器所决定的

Hadoop靠什么来调度

  • 之前描述的Hadoop生态似乎一切都井然有序:从数据的存储到数据的使用都是如此简单,如此自然。但是从一开始我们就提到,Hadoop本质上是运行在很多台机器上的分布式系统。那么这很多台机器得有个管理者吧?否则万一哪台机器坏了,哪台机器新加入了,谁来调度呢?
  • 这就是Yarn这个资源管理器的作用。它负责从客户端那里收到请求,然后根据不同的任务,去分配机器的数量;也负责管理整个分布式系统里面机器的状态,定时检查有没有谁故障了,有没有谁新加入了;如果工作已经完成了,它得把机器的管理权收回来,随时准备分配给别的任务

Hadoop和传统数据库间的数据传输

• 在这里特别提一下,企业应用中时常会面对一个问题,即如何让Hadoop和传统的集中式关系型数据库进行数据交换?毕竟这么新潮的分布式不是每个企业刚刚创业的时候都能负担的起,或者说是有必要拥有的东西。更多企业刚开始还是使用的传统的关系型数据库

• Apache基金会为此特别准备Sqoop项目。这个项目存在的意义就是实现分布式和传统集中式两者之间的数据传输和迁移

• 具体使用的方式就是我们在上面提到的MapReduce方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值