(hadoop安装方法:http://blog.csdn.net/wangjia55/article/details/53160679这里不再累述)

  hadoop是针对大数据设计的一个计算架构。如果你有几百TB的数据需要检索,你在控制终端敲下命令,计算机会向几百分布式台云服务器同时发布命令,使他们开始运行。并且把结果返回给你

hadoop分为大概念,

HDFS(分布式文件系统)+MapReduce(分布式计算模型)

HDFS 优点

适合大文件的存储,并且由备份策略,有比较好的容错和恢复机制,支持流式数据访问,一次写入,多次读取最高效

HDFS 缺点

不适合大量小文件的存储

不适合并发写入,不支持文件的随机修改(只能后续添加)

不适合随机读等低延时的访问方式

存储的三个概念:

block 是一个存储的数据块,hadoop的数据存储是以数据块为单位的(而非文件)(这样的有点是易于备份,而且简化了数据空间的设计)这里有点类似于磁盘的数据块,

NameNode 是一个管理节点,它管理文件系统的命名空间,存放文件数据(这个节点相当于一个枢纽,它的保护措施是,创建一个备用节点,NameNode和备用节点的内容时刻保持一致,当NameNode崩溃的时候,会马上启用另一个节点)

维护文件系统所有的文件和目录,文件与数据块之间的映射

记录着每个文件中各个块所在的数据节点的信息。

DataNode 是数据块的实际存储点,也是工作节点,存储并检索数据块,向NameNode时刻更新所存储的数据块的列表

文件的写流程:当用户需要写一个文件进去时候,先向namenode发送请求,然后namenode把分配的datanode1、datanode2、datanode3的地址和凭证构成的存储单(假设这个清单上要求数据备份在2和3节点上)返回给用户端,用户端开始对文件进行分块,然后把第一个数据块和相应存储单的发给datanode1,datanode1存储完了以后,会向namenode发送存储报告,并且把这个数据块的信息和相应的数据块存储单转发给datanode2来备份······datanode2再把数据块转发给datanode3(也就是说datanode会自动通知其他几个datanode完成数据的备份操作),相应的存储完以后,节点2和节点3也会发送相应存储报告。

hdfs是流式数据访问,也就是说,一个数据块一旦被写入,块内的数据就不能再做随机修改,如果要修改,删除这个磁盘块,然后再把整个块的数据重新写入,(每次访问也只能从块的首部开始访问)。

它不支持用户并发的写相同的文件(不想sql数据库文件一样,可以让多个线程并发的读或者写)

namenode会找距离最近的一个datanode节点的信息

文件的读流程也相似,这里不再累述

Hadoop默认的调度器是基于队列的FIFO调度器:

所有用户的作业都被提交到一个队列中,然后由JobTracker先按照作业的优先级高低,再按照作业提交时间     的先后顺序选择将被执行的作业。

优点: 调度算法简单明了,JobTracker工作负担轻。

缺点: 忽略了不同作业的需求差异。

Fair Scheduler(公平调度器):

1:多个Pool,Job需要被提交到某个Pool中;

2:每个pool可以设置最小 task slot(猜测最小的job数),称为miniShare

3:FS会保证Pool的公平,Pool内部支持Priority(优先级)设置,支持资源抢占(优先级)

hdfs的shell命令 ls,cat, mkdir,rm,chmod ,chown等

hdfs的文件交互命令 copyFromLocal,copToLocal,get,put

常用命令:https://www.cnblogs.com/gaopeng527/p/4314215.html

MapReduce计算框架

mapreduce 计算框架使用的是分而治之的概念,一个大任务分成多个小的子任务(map),执行完,从map端输出后,会进行网络混洗,经过shuffle层后进入reduce(在shuffle层混洗时,如果数据量较大,会造成很大的网络开销,故可以先按照key先进行一轮排序与合并,再开始网络混洗,这个过程就combine),合并结果(reduce)

2.0以前的框架的结构学习笔记:

这里面有两个概念JobTracker和TaskTracker,

JobTracker  对应于 NameNode

TaskTracker 对应于 DataNode

JobTracker介绍

首先用户程序(JobClient)提交了一个job,job的信息会发送到JobTracker,JobTracker是Map-reduce框架的中心,会先将任务拆分成多个map任务(也就是子任务),分发给map层的各个datanode,等计算完成以后,结果会被发送到 reduce层的各个datanode进行合并同时他还需要与集群中的机器定时通信heartbeat(也就是心跳协议),需要管理哪些程序应该跑在哪些机器上,需要管理所有job失败、重启等操作。

JobTracker后台程序用来连接应用程序与Hadoop。由JobTracker决定哪个文件将被处理,每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上

TaskTracker介绍

TaskTracker是Map-Reduce集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。

TaskTracker同时监视当前机器的tasks运行状况。TaskTracker需要把执行状态和任务进度通过heartbeat发送给JobTracker,JobTracker会搜集这些信息以给新提交的job分配运行在哪些机器上。

MapReduce的容错机制

1重复执行,当一个datanode执行任务失败的时候,jobtracker会自动命令他重新执行,一般默认现需重新执行4次都失败的话,放弃这个节点,寻找一个和它存储内容相同的节点,继续执行,

2.推测执行,当一个datanode执行速度特别慢的时候,jobtracker则推测它出现了问题,jobtracker也会找一台和它存储相同内容的节点,来一起执行,谁先执行完,就终止另一台的执行。

新旧对比

yarn

yarn是hadoop2.0之后的版本的一个总的资源管理器,yarn中有三个概念,ResourceManager ,ApplicationMaster,和NodeManager

ResourceManager 负责调度资源,并且启动和监控ApplicationMaster和NodeManager,

ResourceManager在执行过程中不对task进行监控和状态跟踪(而是只监控ApplicationMaster和)。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。

ApplicationMaster为MapReduce类型的程序申请资源,并且分配给内部任务。负责数据的切分,监控任务的执行和容错,

NodeManager,管理单个节点的资源,处理ResourceManager的命令,处理来自ApplicationMaster的命令。NodeManager是每一台机器框架的代理,监控应用程序的资源使用情况(CPU 内存 磁盘 网络)并且向调度器汇报。

注意:yarn中jobtracker所负责的任务拆分成两个部分,资源的分配ResourceManager和对每个独立任务ApplicationMaster的管理:ResourceManager仍然运行在namenode上,负责监控所有datanode,而任务管理方面:每一个任务都会独立成立一个ApplicationMaster,这个ApplicationMaster不一定运行在哪个DataNode上,这样我们就可以设置用相对闲置的DataNode来运行ApplicationMaster。

Container是Yarn为资源分配提出的一个方案,当ApplicationMaster向ResourceManager申请资源时,ResourceManager返回的资源就被描述为container,一般而言,一个container只能用于执行一个task(一个job是一个总的任务,它会被分割成多个task,每一个task在一个datanode上执行),目前是一个框架,仅仅提供Java虚拟机内存的隔离,hadoop团队的设计思路应该后续能支持更多的资源调度和控制。

ResourceManager内部运行原理:

可参看:http://blog.csdn.net/zcc_0015/article/details/34921981

上图描述的6个步骤解释如下:

步骤1.ApplicationMasterLauncher与对应的NodeManager联系,启动ApplicationMaster。

步骤2.ApplicationMasterLivenessMonitor添加监控列表,启动对ApplicationMaster的监控列表,启动对ApplicationMaster的监控。

步骤3.ApplicationMaster启动后,向ApplicationMasterService注册,公布自己的URL,访问接口等。

步骤4.ApplicationMaster定期向ApplicationMasterService发送心跳,及时更新自己的信息,便于RM进行管理。

步骤5.当application job执行完毕后,ApplicationMaster向ApplicationMaster Service报告执行完成。

步骤6.ApplicationMaster Service 通知ApplicationMasterLivenessMonitor从监控列表中删除ApplicationMaster,释放资源

- ApplicationMaster存活监控

帮助管理活跃的及死的/不响应ApplicationMaster

map-shuffle-reduce工作原理(其中假设每个map中含有三个数据块,不同颜色的方块表示不同的分割区间。)

http://xxx.xxx.xxx.xxx:50070/查看hadoop各节点的运行情况,(其中xxx.xxx.xxx.xxx指的是所填的ip,必须是namenode的ip)

一个mapreduce作业中,partition的数量和reduce的数量和最终输出结果文件(如part-r-0001)的数量是相等的(小细节:在一个reduce中,所有数据都会按照key升序排列,故如果part输出文件包含的key值,则这个文件一定是有序的。)

hadoop的分布式缓存机制

在执行mapreduce时,可能mapper之间需要共享一些信息,如果信息量不大,可以将其从hdfs加载到内存中(每个datanode上的内存里会加载相同的共享数据),这就是hadoop的分布式缓存机制。(如果数据量太大可以将共享数据分批缓存重复执行作业)

hadoop生态圈

简要介绍,HBase是一个高可靠,高性能,面向列,可伸缩,实时读写的分布式数据库,利用hdfs作为文件存储系统,支持MR程序读取数据,存储非结构化和半结构化以及结构化的数据,column family 列族,多个列的集合,最多不超过三个

spark是一个基于内存的分布式大数据并行计算框架,spark也是MapReduce的替代方案,兼容hdfs,hive等数据源,spark抽象出分布式内存存储数据结构,弹性分布式数据集RDD,基于事件驱动,通过线程池复用线程提高性能

分布式计算框架学习笔记--hadoop工作原理的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. [转]dwr3框架学习笔记--简介及原理简介

    1.DWR简介 DWR(直接web远程访问),DWR是一个Java库,使服务器上的Java和JavaScript的浏览器进行交互和相互调用尽可能简单. DWR 是一个可以允许你去创建 AJAX WEB ...

  3. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  4. SSM框架学习笔记_第1章_SpringIOC概述

    第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...

  5. phalcon(费尔康)框架学习笔记

    phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构   pha ...

  6. Yii框架学习笔记(二)将html前端模板整合到框架中

    选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...

  7. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  8. JavaSE中线程与并行API框架学习笔记1——线程是什么?

    前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位 ...

  9. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

随机推荐

  1. 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)

    在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...

  2. python爬去电影天堂恐怖片+游戏

    1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...

  3. git正确的删除远程仓库的文件并用.gitignore忽略提交此文件

    我向远程仓库提交了如下文件src/ pom.xml target/ WebContent/,发现没必要提交target目录. 于是做了如下操作: git rm -r --cached target g ...

  4. Neo4j学习笔记(1)——使用API编写一个Hello World程序

    项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管理. 首先创建一个Maven Project,添加依赖: <dependency> <groupId& ...

  5. Elastic 技术栈之 Filebeat

    Elastic 技术栈之 Filebeat 简介 Beats 是安装在服务器上的数据中转代理. Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash . Beats ...

  6. 聊聊API网关的作用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Trebuchet MS" } p.p2 { margin: 0.0px ...

  7. UNIX域协议(无名套接字)

    关于什么是UNIX域套接字可以参考:http://www.cnblogs.com/xcywt/p/8185597.html这里主要介绍非命名的UNIX域套接字的用法.1.socketpair函数先看m ...

  8. [编织消息框架][JAVA核心技术]cglib动态代理

    先在mavne项目里添加cglib库 maven仓库搜索cglib版本 maven地址:http://mvnrepository.com/ 点击最新的版本 3.2.5 复制到pom.xml  depe ...

  9. python3 python2 import 的区别

    https://stackoverflow.com/questions/12172791/changes-in-import-statement-python3

  10. Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功

    在使用Fiddler抓包时,我们有时需要抓https协议的包,这种需要配置一下 开启监控https才可以 首先 找到Tools——>Options 在弹出的菜单中 选择https项  勾选捕捉h ...