Hadoop基础

Hadoop

前言:这是大数据之路的开篇,在已经具备开发经验、具有分布式系统理论基础的前提下讲解大数据基本组件的理论和使用。这个系列的文章用从下到上的角度,从场景出发讲解系统为什么这么设计,争取用自己的语言将原理讲述清楚。好,开始第一篇。

虽然hadoop得起源来自google三驾马车(Google file system\MapReduce\BigTable)之GFS和MapReduce,但是就本子来说就是为了解决数据量巨大,无法在单节点存储和计算的问题。在Hadoop出现之后又出现多种版本,此处不再详述。

既然单节点无法存储数据,那就可以使用集群将数据分散存储到不同节点,同时节点不一定可靠,所以就需要数据冗余,将每个节点的数据在其余节点备份,这个工作需要一个管理系统来完成。同时,当需要对这些数据进行计算时,若将所有数据汇总到某一个节点必然会占用较大带宽并且网络传输耗时严重影响计算效率。

Hadoop中的HDFS和MapReduce框架很好的解决了这两个问题。首先,HDFS就像本地文件系统一样管理着集群中的数据,这对应用着来说是透明的,通过接口或命令行即可像管理本地文件一样管理放在HDFS上的数据,同时还提供了WebUI,可以方便的查看文件在系统中的位置。存储在HDFS上的文件多为大文件会被拆成多个block放在不同的节点上,当有计算任务用到该文件时,如果沿用读写小文件的思路–将数据同一加载到内存后再统一计算(比如遍历文件找最大最小等操作)就行不通了,因为这些数据可能太大无法加载到某一个节点的内存,即使能加载到内存,由于数据分散到多个节点,加载数据这个过程也会产生大量的网络传输。所以Hadoop提供了mapreduce模块,其核心思想是移动计算而不是移动数据,这也是后来大数据领域中计算框架的基本思想,MapReduce将编写的计算任务发布到存放这些数据的节点,每个计算节点计算后写到文件中。有了数据,也有了计算任务,那么这些计算任务需要的计算资源怎么分配和管理呢,Hadoop提供了Yarn资源调度框架管理集群中的计算任务。这样数据储存,计算任务编写和计算资源管理就都搞定了。下面开始进入hadoop内部看看这三个模块。

1、HDFS 分布式文件系统

既然是分布式系统,那么在集群中就免不了各自分工,每个节点都要干好自己的活,分工合作,完成任务。HDFS文件系统中主要要干两件事,一个是存储数据,一个是存放这些数据的元数据(就像本地文件系统中的inode节点,通过文件元数据找到文件)方便寻找存放在其中的数据。既然都是集群了,那么就让一个节点来单独干存放元数据的事请吧,这样就分好工了,存放数据的叫DataNode,存放元数据的叫NameNode。

前面提到HDFS是存储大文件的,一个文件在单节点存不下,那么必然会被分成多个块来存,HDFS是怎么分的呢,HDFS将存放在其中的文件按128M (默认值,可更改) 大小分块,每块存放在不同的节点,同时每块还做了数据冗余,毕竟机器不是那么可靠。

这样HDFS整体架构就出来了。
在这里插入图片描述

先说说元数据
NameNode 元数据示例:
// todo
元数据每条记录的大小
首先文件管理需要做的事请无外乎对文件的增删改查,但是改文件的过程是相当复杂的,需要先找到文件,再打开文件,修改后再保存,可能时改大也可能是改小,所以HDFS并不支持修改文件。

元数据专门由NameNode 来管理,那么元数据又是怎么被管理的呢?
写请求到来,NameNode会将操作日志写在editslog 中(WAL的体现),但日志落盘后,然后再给写请求分配元数据,返回给客户端。NameNode内存中元数据 也会被定时(可配置)dump成fsimage文件,就像redis的RDB一样。元数据可能非常大,由NameNode自己dump下来就很可能影响性能了,所以由引入了SecondNameNode,专门来干dump的editslog的事请。具体的流程就是
xxxxxxxxxxxxxxxxxx待上传图片xxxxxxxxxxxxxxxxxxx
1、2NN向NN发请求询问是否到了checkpoint
2、如果到了checkpoint,2NN拉取NN的fsimage和editslog,并将其合并成一个fsimage。此时NN已经开启了一个editslog
3、2NN生成新的fsiamge后将其发到NN,NN滚动fsimage。
与文件数据比起来元数据小很多,所以一般来说一个节点就可以搞定了,但是一个节点又有单点问题了,所以又引入了zk提供HA。

HDFS是怎么读写文件的呢?
首先,跟本地文件系统一样,读写文件需要先找元数据,HDFS客户端读文件先去NameNode问一下,某一块文件在哪里,NameNode查找放在内存中的元数据,找到指定块存放在哪个节点后将节点信息返回客户端,客户端再到对应的DataNode节点取取数据,如果文件大小超过一块,就重复查元数据再取数据的过程,直到取完整个文件。

xxxxxxxxx 读文件图片 xxxxxxxxxx
xxxxxxxxx 写文件图片 xxxxxxxxxx

总结:
HDFS 存文件。
MapReduce 做计算。
Yarn 管理计算资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值