首先,什么是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. d3学习笔记

    (1)使用enter()函数. 当要创建新的绑定数据的元素,必须使用enter().这个方法会分析当前选择的DOM元素和传给它的数据,如果数据值比对应的DOM元素多,就创建一个新的占位元素.然后把这个 ...

  2. Object C学习笔记18-SEL,@ selector,Class,@class--转

    一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体介绍参数: - (id)performSelector:(SEL)aSelector; - (id)performSele ...

  3. jmeter(七)函数

    JMeter函数是一些能够转化在测试树中取样器或者其他配置元件的域的特殊值.一个函数的调用就像这样:${_functionName(var1,var2,var3)},-functionName匹配函数 ...

  4. c语言-依赖倒转

    当一个文件(aa.c文件)依赖于头文件(bb.h)时,如果bb.c编译之后形成的bb.o文件重新编译后,aa.o的文件不需要重新编译 aa.c文件: bb.h文件:对bb.c文件进行声明 bb.c文件 ...

  5. [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; ...

  6. MSSQL数据库事务处理

    在日常应用中通常需要多人执行多表的操作,比如售票系统的售票功能,这时候就涉及到数据读取的一致性问题,好在MSSQL数据库也提供了事务处理功能,这里就简单的记下 语法: Begin Tran //事务处 ...

  7. Node.js——npm

    npm un 包名 :删除指定包,不删除安装的依赖 npm un --save 包名: 删除包,并且删除其依赖项 npm install -g cnpm --registry=https://regi ...

  8. (转)淘淘商城系列——发布dubbo服务

    http://blog.csdn.net/yerenyuan_pku/article/details/72758639 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入, ...

  9. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  10. 基于ant design form的二次封装

    // standardForm.js import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; ...