1、HDFS简介

1)计算机集群的基本架构

实现目标:

  • 兼容廉价的硬件设备
  • 流数据读写
  • 大数据集
  • 简单的文件模型
  • 强大的跨平台兼容性

局限性:

  • 不适合低延迟数据访问
  • 无法高效存储大量小文件
  • 不支持多用户写入及任意修改文件

2)HDFS简介

块概念:HDFS默认一个块64MB,一个文件分为多个块,以块作为存储单位,大小远大于普通文件系统,可以最小化寻址开销。

好处有:

  • 支持大规模文件存储
  • 简化系统设置
  • 适合数据备份

HDFS主要组件的功能

NameNode

DataNode

存储元数据

存储文件内容

元数据保存在内存中

文件内容保存在磁盘

保存文件,block,datanode之间的映射关系

维护了block id到datanode本地文件的映射关系

a)     Namenode(核心数据结构FsImage和EditLog)

FsImage:维护文件系统树以及文件树种所有的文件和文件夹的元数据

EditLog:记录了所有针对文件的创建、删除、重命名等操作

名称节点:记录了每个文件中各个块所在的数据节点的位置信息

启动名称节点时:将FsImage文件中内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存在的元数据支持客户端的读操作;

在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件;

HDFS的更新操作会重新写到EditLog文件中,提高效率。

第二名称节点可解决EditLog不断变大的问题

b)    SecondaryNameNode的工作情况:

新的文件操作会写入Edit.new的文件中;

原来的EditLog和FsImage文件会读取到第二名称节点上,然后进行合并;

再将合并后的FsImage文件发送到NameNode里面,同时,名称节点会将Edit.new改为EditLog;

如此,就解决了EditLog变大的问题。

c)     DataNode

负责数据的存储和读取,

根据客户端或名称节点的调度来进行数据的存储和检索,

向名称节点定期发送自己所存储的块的列表;

每个节点的数据会被保存在各自节点的本地Linux文件系统中

HDFS1.0体系结构的局限性:       

命名空间的限制;

性能的瓶颈;

隔离问题;

集群的可用性。

冗余数据保存:

优点:加快数据传播速度;容易检查数据错误;保证数据可靠性。

数据存储策略:

a)数据存放:

第一个副本:集群外提价,随机挑选一台磁盘不太慢、CPU不太忙的节点;

第二个副本:放置在与第一个副本不同的机架的节点上;

第三个副本:与第一个副本相同机架的其他节点上;

更多副本:随机节点。

b)数据读取:

就近读取,HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID;如果客户端和副本在相同机架上,优先选择该副本读取数据,如果没有发现,随机选择一个副本。

数据错误与恢复:

1、名称节点出错:

1.0版本会暂停,利用第二名称节点恢复;

2、数据节点出错:

名称节点无法收到来自一些数据节点的心跳信息,这些数据节点会被标记为“宕机”,名称节点会第七检查这种情况,一旦发现会,冗余复制。

3、数据出错:

读取数据时,客户端会对数据块进行校验,

在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面,

当客户端读取文件时,会先读取改信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

HDFS数据读写过程:

1、读过程


2、写过程


HDFS常用命令:

有三种Shell命令方式

  • hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统;
  • hadoop dfs只能适用于HDFS文件系统;
  • hdfs dfs跟hadoop dfs的命令作用一样,也只适用于HDFS文件系统。

hadoop fs -ls <path>:显示<path>指定的文件的详细信息

hadoop fs-mkdir <path>:创建<path>指定的文件夹

hadoop fs-cat <path>:将<path>指定的文件内容输出到标准输出

hadoop fs -copyFromLocal<localsrc> <dst>:将本地源文件<localsrc>复制到路径<dst>指定的文件或文件夹中

2、YARN原理

1)Hadoop版本的演变

Hadoop框架中最核心的设计是为海量数据提供存储的HDFS和对数据进行计算的MapReduce

MapReduce的作业主要包括:(1)从磁盘或从网络读取数据,即IO密集工作;(2)计算数据,即CPU密集工作

Hadoop集群的整体性能取决于CPU、内存、网络以及存储之间的性能平衡。

一个基本的Hadoop集群中的节点主要有:

  • NameNode:负责协调集群中的数据存储
  • DataNode:存储被拆分的数据块
  • JobTracker:协调数据计算任务
  • TaskTracker:负责执行由JobTracker指派的任务
  • SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息

2)YARN结构

ApplicationMaster

ResourceManager接收用户提交的作业,按照作业的上下文信息以及从NodeManager收集来的容器状态信息,启动调度过程,为用户作业启动一个ApplicationMaster

ApplicationMaster的主要功能是:

(1)   当用户作业提交时,ApplicationMaster与ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源;

(2)   把获得的资源进一步分配给内部的各个任务(Map任务或Reduce任务),实现资源的“二次分配”;

(3)   与NodeManager保持交互通信进行应用程序的启动、运行、监控和停止,监控申请到的资源的使用情况,对所有任务的执行进度和状态进行监控,并在任务发生失败时执行失败恢复;

(4)   定时向ResourceManager发送“心跳”消息,报告资源的使用情况和应用的进度信息;

(5)   当作业完成时,ApplicationMaster向ResourceManager注销容器,执行周期完成。

NodeManager

NodeManager是驻留在一个YARN集群中的每个节点上的代理,主要负责:

  • 容器生命周期管理
  • 监控每个容器的资源使用情况
  • 跟踪节点健康状况
  • 以“心跳”的方式与ResourceManager保持通信
  • 向ResourceManager汇报作业的资源使用情况和每个容器的运行状态
  • 接收来自ApplicationMaster的启动/停止容器的各种请求

YARN的体系结构:


YARN的工作流程

步骤1:用户编写客户端应用程序,向YARN提交应用程序,提交的内容包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等;

步骤2:YARN中的ResourceManager负责接收和处理来自客户端的请求,为应用程序分配一个容器,在该容器中启动一个ApplicationMaster;

步骤3:ApplicationMaster被创建后会首先向ResourceManager注册;

步骤4:ApplicationMaster采用轮询的方式向ResourceManager申请资源;

步骤5:ResourceManager以“容器”的形式向提出申请的ApplicationMaster分配资源;

步骤6:在容器中启动任务(运行环境、脚本);

步骤7:各个任务向ApplicationMaster汇报自己的状态和进度;

步骤8:应用程序运行完成后,ApplicationMaster向ResourceManager的应用程序管理器注销并关闭自己。

YARN框架相对于MapReduce1.0框架的优势:

1)大大减少了承担中心功能的ResourceManager的资源消耗;

2)MapReduce1.0只能支持MapReduce编程模型,而YARN则是一个纯粹的资源调度管理框架,可以运行包括MapReduce在内的不同类型的计算框架;

3)YARN中的资源管理比MapReduce1.0更加高效,以容器为单位而不是slot为单位。

3、MapReduce原理

MapReduce采用“分而治之”的策略,将大数据数据集切分成独立的分片,由多个Map并行处理;

MapReduce设计的一个理念就是“计算向数据靠拢”,

MapReduce采用了Master/Slave架构,运行的分别是Jobtracker和Tasktracker

1) 结构:Client,JobTracker,TaskTracker以及Task。

1)Client

用户编写的MapReduce程序通过Client提交到JobTracker端

用户可通过Client提供的一些接口查看作业运行状态

2)JobTracker

JobTracker负责资源监控和作业调度

JobTracker监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点

JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(TaskScheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源

3)TaskTracker

会周期性的发送“心跳”给JobTracker,同事接受JobTracker发送过来的命令并执行相应的操作

TaskTracker使用“slot”等量划分本节点上的资源量,slot分为Map slot和Reduceslot两种

4)Task

分为Map Task和Reduce Task两种,均由TaskTracker启动

2) 工作流程

输入——Map任务——Shuffle——Reduce任务——输出

  • 不同的Map任务之间不会进行通信
  • 不同的Reduce任务之间也不会发生任何信息交换
  • 用户不能显式地从一台机器向另一台机器发送消息
  • 所有的数据交换都是通过MapReduce框架自身去实现的

3) MapReduce的执行过程

split是一个逻辑概念,只包含一些元数据信息

split的多少决定了Map任务的数量

Reduce任务个数取决于集群中可用的reduce任务槽的数目,设置通常比reduce任务槽数目稍微小一些Reduce任务个数

4) Shuffle过程简介


过程如下:

  • 输入数据和执行Map任务
  • 写入缓存:默认100MB缓存,每个Map任务分配一个缓存
  • 溢写(分区、排序、合并):溢写比例0.8,分区默认采用哈希函数,分区后自动排序,排序后可能会合并
  • 文件归并:归并可以设置预定值,溢写文件数量大于预定值(默认3),则可以再次启动Combiner,少于3不需要
  • Reduce端的Shuffle过程


过程如下:

  • Reduce任务通过RPC向JobTracker询问Map任务是否已经完成,若完成,则领取数据;
  • Reduce领取数据先放入缓存没来自不同Map机器,先归并,再合并,写入磁盘;
  • 多个溢写文件归并成一个或多个大文件,文件中的键值对是排序的;
  • 当数据很少时,不需要溢写到磁盘,直接在缓存中归并,然后输出给Reduce。

Wiley大数据-大数据开发基础上-笔记相关推荐

  1. 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步

    这篇是对书本 网络多人游戏架构与编程 的学习第二篇(第一篇:多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | ...

  2. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...

  3. android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...

    Android Studio开发基础之启动Service,并通过从Activity向Service传递数据 本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Se ...

  4. 微信小游戏 腾讯课堂《白鹭教育 - 成语大挑战小游戏开发》学习笔记

    腾讯课堂<白鹭教育 - 成语大挑战小游戏开发>:https://ke.qq.com/course/287266 学习笔记 首先这个视频课程简单介绍了一个小游戏的制作,包括新建项目.适配模式 ...

  5. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步

    今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...

  6. iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图

    第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...

  7. 获取rawimage的像素点函数_光场相机数据二次开发基础-使用LFtoolbox解码lfp文件

    使用LFtoolbox解码lfp文件 1. 配置文件路径 必须按照这个路径配置文件夹.Bxxxxx表示的是相机的序列号,我们相机的是B5151502360:这个文件夹里放从相机内导出的白图像数据.白图 ...

  8. SOA 开发基础 (上)

    从去年开始(可能更早),SOA的概念在汽车软件行业逐渐蔓延开来,很多公众号都发过讲汽车SOA的文章,很多车厂都要开始(或者已经在)搞SOA.但我觉得吧,在开搞新技术之前,是不是先花点时间弄明白这个技术 ...

  9. python保存数据型变量_Python基础学习笔记(一)变量与数据类型

    https://m.toutiao.com/is/J3fN6eK/ Python是一门易学的面向对象的程序设计语言,可以轻易地完成界面.文件.封装等高阶需求,可移植性好,有非常多功能强大的库与包,如N ...

最新文章

  1. Spring 自动化装配Bean
  2. 算法---------数组-----------两数相加
  3. 【字符串】大小写的转换
  4. 吊打 Tomcat ,Undertow 性能很炸!!
  5. windows上运行MapReduce出错(Failed to set permissions of path)
  6. Deep Boltzmann Machines
  7. P3567 [POI2014]KUR-Couriers
  8. 面试题:如何实现丝滑般的数据库扩容
  9. 联想90W快充是假的吗?官方回应:我们不玩文字游戏
  10. [转]OpenMP 入门指南
  11. 蓝桥杯2019年第十届C/C++省赛A组第三题-最大降雨量
  12. 如何调整转场时间和移动转场效果
  13. matlab使用笔记(一)——matlab语言中if、for语句与C语言中的差别
  14. 解题报告:HDU_4093 Xavier is Learning to Count FFT
  15. microsoftonenote_Microsoft OneNote 2017 官方免费版
  16. python中怎么把每一个字符用、隔开_python 实现将list转成字符串,中间用空格隔开...
  17. freeswitch实战六(呼叫转移)
  18. bps、Bps、pps的概念和区别
  19. android 比较靠谱的图片压缩
  20. 便携电源快充方案 30W自动升降压PD快充

热门文章

  1. SpreadJS 表格控件发布V11版本,新增图表及前端PDF导出!
  2. php导出1万条数据excel_PHP快速导出百万级数据到CSV或者EXCEL文件
  3. SpringBoot 工程打包并运行
  4. Office LTSC 专业增强版 2021 显示“你的许可证并非XX”横幅解决方法(亲测有效,2016专业增强版同样适用,其他版本自行测试)
  5. gb28181简单实现sip信令服务器(java版基于springboot):一、netty创建udp服务器
  6. 正确设置Windows缓存 让系统快步如飞
  7. 斯坦福博士李纪为成立 AI 金融公司香侬科技,获红杉中国数千万天使投资
  8. 吴昊品游戏核心算法 Round 15 —— (转载)德州扑克中的心理战
  9. 【大数据发展篇】大数据的诞生
  10. Android转AndroidX