首先,什么是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. windows deintall 12c client

    1.unintall: close all oracle app C:\app\client\CICadmin\product\12.1.0\client_1\deinstall deinstall ...

  2. APP多渠道打包

    多渠道打包的概念: 打包是指使用证书文件对app签名生成一个apk文件. 多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场.百度市场等,为了统计应用在各个市场的 ...

  3. webapp开发学习---Cordova目录结构分析及一些概念

      Config.xml是一个全局配置文件,用于控制cordova应用程序行为的许多方面. 这个不依赖于平台的XML文件是基于W3C的“打包Web应用程序(Widget)”规范进行安排的,并扩展到指定 ...

  4. HttpServletRequest对象,自己学习的心得。

    1. HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过Http超文本传输协议访问服务器时,Http请求头中的所有信息都封装在这个对象中, ...

  5. SharedPrefences的用处

    存储数据 SharedPreferences.Editor edit = getSharedPreferences("data", MODE_PRIVATE).edit(); ed ...

  6. iOS Programming View and View Hierarchy 视图和视图等级

    iOS Programming  View and View Hierarchy 视图和视图等级 1.1(1)File → New → Project.. From the iOS section, ...

  7. java JDK在windows及mac下安装配置

    windows下安装: JDK下载 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...

  8. C/C++ new/delete []、内存泄漏、动态数组

    一.概念 new/delete是用于动态分配和撤销内存的运算符.new/delete是c++里才有的,c中是用malloc和free,c++虽然也可以用,但是不建议用.当我们使用关键字new在堆上动态 ...

  9. 开源一个一个NodeJS 代理服务器扫描工具,可以用来***

    鉴于我朝很多网站访问不了,google等就是大悲剧,之前一直在用VPN,但是公司内网VPN被封,诸多工具也惨遭毒手..我辈怎能容忍. 目前只有代理没有被封,于是搞了个代理扫描工具并开源: https: ...

  10. Maven之——使用本地jar包并打包进war包里面的方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52594602 很显然,这种方法是很不可取的,因为Maven是用来团队合作,以及发布 ...