首先,什么是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. vijos P1426兴奋剂检查 多维费用背包问题的hash

    https://vijos.org/p/1426 这是个好题,容易想到用dp[i][v1][v2][v3][v4][v5]表示在前i个物品中,各种东西的容量是那个的时候,能产生的最大价值. 时间不会T ...

  2. easy ui combotree的操作

    1.获取combotree的选中值 $("#id").combotree("getValue"); 2.设置combotree的选中值 $('#id').com ...

  3. HashMap和List遍历方法总结及如何遍历删除元素

    https://blog.csdn.net/demohui/article/details/77748809

  4. turn协议的工作原理

    Allocate请求 客户端通过发送Allocate请求给STUN服务器,从而让STUN服务器为A用户开启一个relay端口.     a) 客户端A向STUN Port发送Allocate请求(图中 ...

  5. 看到了一篇不错的tensorflow文章

    http://dataunion.org/28906.html 本文作者 Steven Dufresne,总结了新手学 TensorFlow 需要的核心知识点和实操内容,旨在鼓励更多人借 Tensor ...

  6. leetcode_650. 2 Keys Keyboard_dp

    https://leetcode.com/problems/2-keys-keyboard/ 初始一个A,两种操作,复制当前所有A,粘贴,问得到n个A最少需要多少步操作. class Solution ...

  7. java_String类练习

    public class StringTest { //1.模拟trim方法,去除字符串两端的空格 public static void main(String[] args) { String st ...

  8. VINS-Mono论文笔记(未完)

    这是整篇论文的架构,下面针对每一部分进行自己的详细理解.(数学公式的问题没在博客里面解决,都是论文中的截图,尽可能美观==) 一.测量预处理部分(MEASUREMENT PREPROCESSING) ...

  9. JavaSE-08 封装

    学习要点 封装 访问控制符 包 封装 没有封装的代码有何缺陷? 例如:对狗狗的健康值赋值为-100.如何避免?——使用封装. 封装的概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该 ...

  10. vue 封装自定义组件

    组件结构 sjld >index.js >sjid.vue 最好单独放一个文件夹,有依赖的话装依赖 Sjld.vue 内容 <template id="sjld" ...