博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据小白系列——HDFS(1)
阅读量:5856 次
发布时间:2019-06-19

本文共 1498 字,大约阅读时间需要 4 分钟。

【注1:结尾有大福利!】

【注2:想写一个大数据小白系列,介绍大数据生态系统中的主要成员,理解其原理,明白其用途,万一有用呢,对不对。】

  

大数据是什么?抛开那些高大上但笼统的说法,其实大数据说的是两件事:一、怎么存储大数据,二、怎么计算大数据。

我们先从存储开始说,如果清晨起床,你的女仆给你呈上一块牛排,牛排太大,一口吃不了,怎么办?拿刀切小。

同样的,如果一份数据太大,一台机器存不了,怎么办?切小了,存到几台机器上。

想要保存海量数据,无限地提高单台机器的存储能力显然是不现实,就好比我们不能把一栋楼盖得无限高一样(通常这也不是经济的做法),增加机器数量是相对可持续的方案。

使用多台机器,需要有配套的分布式存储系统把这些机器组织成一个整体,由于Hadoop几乎是目前大数据领域的事实标准,那么这里介绍的分布式存储系统就是HDFS(Hadoop Distributed Filesystem)。

先来介绍几个重要概念。

  • 分片(shard)

就好比把牛排切成小块,对大的文件进行切分,显然是进行分布式存储的前提,例如,HDFS中默认将数据切分成128MB的块(block)。

 

  •  副本(replica)

三台机器中,如果有一台出现故障,如何保证数据不丢失,那么就是使用冗余的方式,为每一个数据块都产生多个副本。

下面图示中,任何单独一个节点掉线,都不会造成数据丢失,仍然可以凑齐A、B、C三个数据块。

当然,如果两个节点同时掉线就不行了。

不过,如果每个数据块都有两个副本,那么可以承受同时损失两个节点。代价是,你的存储成本上升了。

  • Master/Slave架构

只有工人而没有包工头的工地肯定不能正常运转,所以,除了上面3台负责存储的机器,还需要至少一台机器来领导它们,给它们分配工作,否则谁也没办法中的A、B、C具体应该存在哪个机器上。

HDFS中采用Master/Slave架构,其中的NameNode就是Master,负责管理工作,而DataNode就是Slave,负责存储具体的数据,NameNode上管理着元数据,简单的讲就是记录哪个数据块存储在哪台机器上。同时,DataNode也会定时向NameNode汇报自己的工作状态,以便后者监控节点状态、是否故障。

 

说完上面几个我觉得需要了解的基础概念,我们再把HDFS的读、写流程描述一下。

  • 读取数据

读取数据的过程。在这个过程中,NameNode负责提供数据的存储位置,真正的数据读取操作发生在用户和DataNode之间。由于数据有副本,一份数据在多个节点上存在,具体NameNode返回哪个节点,遵循一定的原则(比如,就近原则)。

  • 写入数据

写入数据的过程。和读取流程类似,NameNode负责提供数据的存储位置,真正的写入操作发生在用户和DataNode之间,而副本的制造,是在DataNode之间发生的,例如用户先把数据写入节点1,节点1再把数据复制到节点2等。

 

这篇文章就先到这里,下一篇准备接受HDFS中的单点问题、HA、Federation等概念。

 

最后,福利来了,关注公众号“程序员杂书馆”,将免费送出大数据经典书籍《Spark快速大数据分析》,没错,就是下面这本,纸质书哦,不是什么乱七八糟的其他书哦!还犹豫什么,抓紧扫码关注吧。“程序员杂书馆”以后将每周为大家带来经典书籍资料、原创干货分享,谢谢大家。

需要书的同学请直接在公众号留言哈,如果不想要纸质书的也可以说明,我会选择一些PDF数据赠送,谢谢大家。

转载于:https://www.cnblogs.com/morvenhuang/p/10092144.html

你可能感兴趣的文章
高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-2 发布
查看>>
ZOJ 3316 Game 一般图最大匹配带花树
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
angularjs1-7,供应商
查看>>
oracle参数列表
查看>>
Wordpress3.2去除url中的category(不用插件实现)
查看>>
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine-Excel2003
查看>>
《Java 2 图形设计卷Ⅱ- SWING》第12章 轻量容器
查看>>
macOS Sierra 代码显示未来 Mac 将搭载 ARM 芯片
查看>>
《Arduino家居安全系统构建实战》——1.3 部署安全系统的先决条件
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
《jQuery移动开发》—— 1.3 小结
查看>>
使用 Flutter 反序列化 JSON 的一些选项
查看>>
开发进度——4
查看>>
使用原理视角看 Git
查看>>
Node.js 的module 系统
查看>>
经典c程序100 例
查看>>
页面中富文本的使用
查看>>
etymology-F
查看>>