【注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数据赠送,谢谢大家。

大数据小白系列——HDFS(1)的更多相关文章

  1. 大数据小白系列——HDFS(4)

    这里是大数据小白系列,这是本系列的第四篇,来看一个真实世界Hadoop集群的规模,以及我们为什么需要Hadoop Federation. 首先,我们先要来个直观的印象,这是你以为的Hadoop集群: ...

  2. 大数据小白系列——HDFS(3)

    这里是大数据小白系列,这是本系列的第三篇,介绍HDFS中NameNode选举,JournalNode等概念. 上一期我们说到了为解决NameNode(下称NN)单点失败问题,HDFS中使用了双NN的机 ...

  3. 大数据小白系列——HDFS(2)

    这里是大数据小白系列,这是本系列的第二篇,介绍一下HDFS中SecondaryNameNode.单点失败(SPOF).以及高可用(HA)等概念. 上一篇我们说到了大数据.分布式存储,以及HDFS中的一 ...

  4. 大数据小白系列——MR(1)

    一部编程发展史就是一部程序员偷懒史,MapReduce(下称MR)同样是程序员们用来偷懒的工具. 来了一份大数据,我们写了一个程序准备分析它,需要怎么做? 老式的处理方法不行,数据量太大时,所需的时间 ...

  5. 大数据小白系列 —— MapReduce流程的深入说明

    上一期我们介绍了MR的基本流程与概念,本期稍微深入了解一下这个流程,尤其是比较重要但相对较少被提及的Shuffling过程. Mapping 上期我们说过,每一个mapper进程接收并处理一块数据,这 ...

  6. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  7. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  8. 大数据学习系列之六 ----- Hadoop+Spark环境搭建

    引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...

  9. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

随机推荐

  1. jquery通过visible来判断标签是否显示或隐藏

    if($(".spnTotal").is(":visible")==false) { alert('隐藏'); } else { alert('显示'); } 

  2. 【数据库】MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  3. SS-QT5

    https://blog.csdn.net/sos218909/article/details/78781017

  4. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  5. Linux基础实操五

    实操一:nginx服务 二进制安装nginx包1) 1)#yum clean all 2)#yum install epel-release -y 3)#yum install nginx -y 1) ...

  6. jsp 修饰 Request 及Response

    Servlet API包含4个可修饰的类,用于改变Servlet Request以及Servlet Response.这种修饰允许修改 ServletRequest以及ServletResponse或 ...

  7. tmk射气球

    问题 : tmk射气球 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有一天TMK在做一个飞艇环游世界,突然他发现有一个气球沿匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去 ...

  8. Java 产生一个大于等于200,小于300的随机数,且是10的整数倍

    public class Random200_300 { public static void main(String[] args) { int r1 = 0; while (true) { r1 ...

  9. eclipse打Jar包问题

    1.首先,如果你的Java项目中没有任何第三方包,是十分容易的,只需要通过eclipse的Export就可以按操作一步步运行,如下: 选择你要导出的Java项目,右键选择Export,如下图,选择JA ...

  10. Python(字符串操作实例1)一个字符串用空格隔开

    # 将字符中单词用空格隔开# 已知传入的字符串中只有字母,每个单词的首字母大写,# 请将每个单词用空格隔开,只保留第一个单词的首字母大写传入:“HelloMyWorld”# 返回“Hello my w ...