首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈)

Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数据进行分布式的处理,就相当于我们JAVA8新添的线程池forkjoinpool一样,可以将一组数据,拆分到各个服务器中进行并行的按照我们自定义的业务逻辑来进行计算,最后将结果进行一个汇总。但有一点要注意的是,Hadoop是计算向数据移动,也就是说,当我们要去对一些数据进行业务处理的时候,不会去调用我们存储在节点中的数据,而是将具体执行逻辑的方法字节码通过网络传输到各个节点,节点直接在内部对数据进行运算。

它的核心组件有:

  HDFS(分布式文件系统,将每个文件切割成一定数量的bolck,并且每个block的大小相同,之后分开录入到各个服务器中,并且设有副本,对应block的副本也不会与主block在同一个服务器上.当然,前提是副本与主block的量不能大于集群服务器数量),其实关于这个,我们Es从某种意义上来说也是借鉴了此种模式,唯一不同的就是ES不会对单个文件进行拆分存储到不同的服务器(分片)中,当然,这也与ES本身只是作为一个搜索引擎,一般来说只存储信息数据有关。

  YARN (运算资源调度系统)负责CPU,内存等硬件资源在分布式情况下的调度

  MAPREDUCE(分布式运算编程框架)计算向框架的编程模型

请记住,HDFS,MAPREDUCE这三个组件的名词并非是Hadoop特有的实现,正确来说,它们是一种分布式架构理论和一种编程模型,是由谷歌发出的两篇论文进行定义的,Hadoop只是将它们实现了而已。

在HDFS中,节点分为两种,一种是NameNode(负责保存具体数据在什么地方,创建日期,大小等等各种信息,保存元数据的文件名为fsimage,而记录对于文件操作的记录都保存在edits文件中,在NameNode刚启动的时候会从硬盘中加载fsimage,但此时的fsimage中不包含具体文件数据的信息,因为具体的文件数据信息是不会持久化的,同时也会创建一个空的edits文件,之后接收DataNode节点上报的文件数据信息,在这个阶段NameNode都处于安全模式中,客户端无法对其进行写操作请求,这个过程被称为安全模式。而之后,为了防止edits未见过大,每过一段时间,都会根据edits文件整合出新的fsimage,这个操作则是在secondary namenode节点中进行的,secondary namedode节点如果不进行设置的话,默认是在namenode节点中开启),DataNode(专门负责存储数据的节点),典型的中心化分布式,但有一点要注意的是,因为考虑到集群的扩展性和稳定性,所以NameNode和DataNode会保持心跳外,NameNode里对于数据的信息,以及DataNode的一些硬件的信息都是由DataNode进行上报的,而不是主动去拿,这样做的好处在于,当你想要添加一个新的DataNode节点的时候,你只需要在DataNode节点里添加上我们NameNode的Ip+端口即可(如果NameNode里HDFS是默认端口,那么就不用写)。

YARN节点也分为两种,一种是ResourceManager(主管理节点,保存着各个节点的服务器数据信息),一种则是DataManager(具体负责各个节点服务器分配资源)

具体的写数据的流程为:

首先由HDFS客户端将我们要上传的数据按照一定格式分为多个Block(Block的大小可以自定义,如果存储的数据量没有达到Block的大小,也会单独创建一个Block,因为Block是个逻辑概念),按照一个Block发送一次请求到NameNode中,之后NameNode根据各个节点存储空间,CPU和内存空闲度,以及距离等各种条件返回几个DateNode节点的位置,为什么是几个?因为HDFS是有副本这个概念的,默认是三个,你也可以自己修改。之后HDFS客户端拿到节点的信息后,会通过网络传输,将数据传输到第一个节点,同时将几个节点信息也一起带过去,之后第一个DataNode除了保存数据外,同时还会与下一个节点建立一个传输通道,并将数据和节点信息发送过去,而其它节点收到后也是同理,保存数据和传输数据是同时的,异步的。在保存完毕后,节点会反馈给HDFS客户端完成,之后再反馈给NameNode完成,之后HdfsClient再反馈给NameNode完成,然后再存储第二个block,重复相同的步骤.....

怎么读数据呢?

首先由HDFS客户端发送相应的要读的文件的请求给NameNode,之后NameNode把此文件对应的块和DataNode发送给HDFS客户端,之后HDFS客户端会一个一个Block的到节点中去拿,并且优先选择最近的节点。

  

2018/3/14 Hadoop学习笔记(一)的更多相关文章

  1. 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟

    因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...

  2. Hadoop学习笔记(两)设置单节点集群

    本文描写叙述怎样设置一个单一节点的 Hadoop 安装.以便您能够高速运行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 參考官方文档:Hadoo ...

  3. Hadoop学习笔记系列

    Hadoop学习笔记系列   一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼 ...

  4. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  5. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  6. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  7. Hadoop学习笔记(2)

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  8. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  9. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

随机推荐

  1. 437 Path Sum III 路径总和 III

    给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...

  2. 解决asp.net 以及MVC中上传文件大小限制的问题

    ﹤system.web﹥ ﹤httpruntime requestlengthdiskthreshold="256" maxrequestlength="2097151& ...

  3. Oracle中的表空间

    表空间是什么? Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构是指构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念及它们之间的关系. 表空间是数据库数据 ...

  4. 为OS X开发者准备的15个超棒应用

    几乎所有的开发人员在他们日常的开发工作中都有他们自己不可缺少的工具或实用程序集. 这些工具中的每一个都提供了特定的功能,大多数开发者都已经将他们集成到了其工作流程中. 使用这些工具或实用程序不单单只是 ...

  5. Activiti工作流和shiro权限管理关系图

  6. poj3050 Hopscotch

    思路: 水题. 实现: #include <iostream> #include <cstdio> #include <set> using namespace s ...

  7. Cannot load php5apache2_4.dll into server 问题的解决方法

    解决方法,重新安装 VC9或 VC11 试试,或者全部安装VC9  VC11 注意:如果下载的 php5.5为32位版本, 那么安装的vc9或VC11 也必须是32位版本.           如果下 ...

  8. git --删除文件、重命名

    修改最后一次提交 git commit --amend -m “” 删除文件:. git rm <需要删除的文件> 只是删除当前工作目录和暂存区的文件,也就是取消跟踪.在下次提交时不纳入版 ...

  9. Matlab中size、numel、length、fix函数的使用

    size():获取矩阵的行数和列数  (1)s=size(A),      当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size ...

  10. ArrayList源码分析(基于JDK1.8)

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...