热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HadoopHDFS框架技术

Hadoop 主要由HDFS和MapReduce 两个核心部分组成。其中最底部就是HDFS,它被用来存储Hadoop  集群中所有存储节点上的文件。通过JavaAPI可以对所有的H

Hadoop  主要由HDFS和MapReduce  两个核心部分组成。其中最底部就是HDFS,

它被用来存储Hadoop  集群中所有存储节点上的文件。通过Java API可以对所有的HDFS文件进行操作,

必须通过抽象类FileSystem来操作,FileSystem继承org.apache.hadoop.conf.Configuration,适用file:// 、 ftp、hdfs

多种文件系统。

一个只有500G的单节点无法一次性读取连续的PB级的数据,为了解决这个问题,可以把大规模数据集分别存储在多个不同的节点系统中,即实现跨网络的多个节点资源的文件系统:分布式文件系统

HDFS架构图:

Hadoop-HDFS框架技术

 

HDFS的设计目标:    

1、硬件故障是常态,而不是异常,运行在普通廉价的机器上

2、适合流式数据访问

3、适合大规模数据集,非常巨大的分布式文件系统

5、移动计算比移动数据更划算

6.易扩展,为用户提供性能不错的文件存储服务

NameNode是所有HDFS元数据的管理者,用户数据永远不会存储到NameNode上

Hadoop-HDFS框架技术

A typical deployment has a dedicated machine that runs only the NameNode software.

Each of the other machines in the cluster runs one instance of the DataNode software.

The architecture does not preclude running multiple DataNodes on the same machine but in a

real deployment that is rarely the case.

部署架构建议:NameNode+N个DataNode

                         NN和DN部署在不同的节点

选择 HDFS 存储数据,是因为 HDFS 具有以下优点:

(1) 高容错性

1) 数据自动保存多个副本。它通过增加副本的形式,提高容错性。

2) 某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。

(2) 适合批处理

1) 它是通过移动计算而不是移动数据。

2) 它会把数据位置暴露给计算框架。

(3) 适合大数据处理

1) 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。

2) 文件规模:能够处理百万规模以上的文件数量,数量相当之大。

3) 节点规模:能够处理10K节点的规模。

(4) 流式数据访问

1) 一次写入,多次读取,不能修改,只能追加。

2) 它能保证数据的一致性。

(5) 可构建在廉价机器上

1) 它通过多副本机制,提高可靠性。

2) 它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。

2、当然 HDFS 也有它的劣势,并不适合所有的场合:

(1) 不适合低延时数据访问

1) 比如毫秒级的来存储数据,这是不行的,它做不到。

2) 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况  下是不行的,

     比如毫秒级以内读取数据,这样它是很难做到的。

(2) 无法高效的对大量小文件进行存储

1) 存储大量小文件的话,它会占用  NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,

   因为NameNode的内存总是有限的。

2) 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。 改进策略

(3) 并发写入、文件随机修改

1) 一个文件只能有一个写,不允许多个线程同时写。

2) 仅支持数据 append(追加),不支持文件的随机修改。

常用的架构部署图:

Hadoop-HDFS框架技术

NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同

NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的元数据,

而真正的文件I/O操作是直接和DataNode进行交互的。

这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。

下面我们分别介绍这四个组成部分。

Client:就是客户端。

1、文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。

2、与 NameNode 交互,获取文件的位置信息。

3、与 DataNode 交互,读取或者写入数据。

4、Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS。

5、Client 可以通过一些命令来访问 HDFS。

NameNode:就是 master,它是一个主管、管理者。用户的实际数据不经过namenode

1、管理 HDFS 的名称空间(各种操作,维护文件系统树和其中的所有文件和目录):这些信息保存在命名空间镜像文件

     和编辑日志文件。

2、管理数据块(Block)映射信息:记录每个文件中各个数据块在节点上的信息,

      但不永久保存块的位置信息,这些信息会在系统启动时由数据节点重建。

3、分配副本的存放节点 ,配置副本策略

4、处理客户端读写请求。

DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作。

1、存储实际的数据块,负责来自文件系统客户的读写请求。

2、执行数据块的创建,读/写操作,删除和来自namenode节点的块复制命令。

Secondary NameNode:并非 NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。

1、辅助 NameNode,分担其工作量。

2、定期合并 fsimage和fsedits,并推送给NameNode。

3、在紧急情况下,可辅助恢复 NameNode。

HDFS副本机制:

Hadoop-HDFS框架技术

副本因子、副本系数:

An application can specify the number of replicas of a file that should be maintained by HDFS. The number of copies of a file is called the replication factor of that file.

All blocks in a file except the last block are the same size

读写:

Files in HDFS are write-once and have strictly one writer at any time.

心跳机制:

The NameNode makes all decisions regarding replication of blocks. It periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode

HDFS 副本存放策略:

Hadoop-HDFS框架技术

第一个副本:存储在同 Client 相同节点上。第二个副本:存储在不同机架的节点上。

第三个副本:存储在第二个副本机架中的另外一个节点上。其它副本:选择随机存储

===================================================================================

HDFS文件读写流程:

漫画讲解:https://blog.csdn.net/scdxmoe/article/details/50904881

                  https://www.jianshu.com/p/a0f170436cbe

  • HDFS写流程:

客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本。

Hadoop-HDFS框架技术

详细步骤:

1、客户端向namenode发送文件上传的请求 ,namenode检查目标文件是否已存在,父目录是否存在
2、namenode返回是否可以上传.

3、client发送文件上传的真正请求,包含文件名,文件大小等
3、client会先对文件进行切分,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M

     (进行文件的逻辑切块(不真正切块,只划分出切块的范围,是预切分))

     请求第一个 block该传输到哪些datanode服务器上
4、namenode根据3中的计算返回datanode的服务器,确定哪些数据节点可以上传。
5、client请求一台datanode上传数据(本质上是一个RPC调用,建立pipeline(构建第一个块的pipline(从client-》

     datanode01-》datanode02.。。。)在此期间,客户端会构建一个守护进程,等待pipline构建成功的响应)),第一个

     datanode收到请求会继续调用第二个datanode,然后第二个调用第三个datanode,将整个pipeline建立完成,逐级返回客户端

6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(一个packet为64kb),当然

      在写入的时候datanode会进行数据校验,它并不是通过一个packet进行一次校验而是以chunk为单位进行校验(512byte),

      第一台datanode收到一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet会放入一个应答队列等待应答

7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

注意:

1.namenode实际客户端只上传一个datanode,其余两个是namenode完成的。让datenote自己复制的。然后复制完成以后逐级返回结果给namenode.如果2,3datanode复制失败,再有namenode分配新的datanode地址。对于客户端来说默认上传一个datanode就可以了,其余的由datanode自己复制。

2.datanode切片是由客户端完成的。datanode第二三个副本的上传和第一个上传是异步的。

3.构建pipline的时候,如果有节点通信不成功,会重试,没有反应会剔除,然后重建pipline

4.文件上传过程中,只要有一个副本上传成功,就默认这个数据块上传成功,剩下的副本会在集群空闲的时候进行异步复制

5.优先返回客户端所在节点,如果客户端不在集群中,就近返回同机架的节点,再返回不同机架的,就近返回原则

  • HDFS读流程:

客户端将要读取的文件路径发送给namenode,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件。

Hadoop-HDFS框架技术

读详细步骤:

1、跟namenode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验(CRC校验),若成功就进行第二块的下载)
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。

 

元数据包含

1.抽象目录树

2.数据和块的映射

3.块的存储位置

元数据文件分成4类

1.edits 历史日志文件/正在编辑的日志文件,记录元数据的操作日志

2.fsimage 镜像文件,存储真实的元数据信息序列化之后的文件

3.seen_txid 合并点,记录下次需要合并的edits文件的编号

4.合并工作由secondarynamenod来做 ,fsimage最终就是由fsimage和edits合并得来的

触发条件:可配置 1.一个小时 2.元数据条数达100万

checkpoint过程

若接收到修改元数据的请求比如hadoop fs -mkdir

过程如下:

1.先修改edits文件

2.修改内存中的元数据

3.snd会定时向nd发送请求,查看是否需要合并

4.nd反馈需要进行元数据合并

5.snd向nd发送元数据合并的请求

6.nd将正在编辑的edits文件进行回滚,写入历史数据,同时生成新的edits_inprogress文件,接受新的元数据请求

7.snd会将回滚完成的文件和fsimage文件拉取到snd本地

8.snd对文件放在内存中进行合并,完成后fsimage.checkpoint文件

9.将新的fsimage文件发送给nd,并进行重命名为fsimage文件,将原来的文件覆盖

 


推荐阅读
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
author-avatar
林立霞61556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有