首先,什么是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. ios 创建和绘画pdf文件 -转

    转自:http://blog.csdn.net/ant1239/article/details/7761676 本方法为项目中画pdf的一个方法,画pdf,一共分为几步,1,获取地址,有两种获取地址方 ...

  2. 【Hibernate】多对多关系的表达

    User.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...

  3. mysql之修改字符编码

    目录 统一修改字段编码 修改单个字段编码 修改表字符编码 统一修改字段编码: alter table `tablename` convert to character set utf8; 修改表字符编 ...

  4. Bmob使用心得

    1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,示例如下:(注意文字说明部分): allprojects { repositories { jcente ...

  5. iOS-UI控件之UITableView(三)- 自定义不等高的cell

    Storyboard_不等高 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView之间的间距约束 设置tableViewCell的真实行高和估算行高 / ...

  6. C语言基础-循环结构

    循环结构while while循环-图例 while循环-格式 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号 ...

  7. 经典算法mark

    在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...

  8. webgl 的空间变换(下):空间变换

    在网上看了很多关于在三维世界中怎么把一个顶点经过一步步变化,最终呈现在我们的屏幕上的. 其实很多博客或者书籍已经讲的很清楚了,那为什么我还要特别再写一次博客来阐述自己观点呢?(这里只针对那些学习web ...

  9. dxf组码

    值 说明 -5 APP:永久反应器链 -4 APP:条件运算符(仅与 ssget 一起使用) -3 APP:扩展数据 (XDATA) 标记(固定) -2 APP:图元名参照(固定) -1 APP:图元 ...

  10. mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后出现#{0}-#{n}参数绑定异常

    解决方案: 在mybatis配置文件中声明setting属性的useActualParamName 参数值为false ** 这种方法解决mybatis3.4.2之后的版本产生该问题的解决方法**