Hadoop01

一、Hadoop

1、概述:

Hadoop是一个适合海量数据的分布式存储和分布式计算的平台

2、实例

分拣大豆

3、来源

作者Doug Cutting受Google三篇论文的启发,开发了hadoop

​ 1、Google FS

​ 2、MapReduce

​ 3、BigTable

4、hadoop组件介绍

1、hadooop是一个统称,目前hadoop主要包含三大组件

​ a、hdfs:是一个分布式存储框架,适合海量数据存储

​ b、mapreduce:是一个分布式计算框架,适合海量数据计算

​ c、yarn:是一个资源调度平台,负责给计算框架分配计算资源

2、由底到上为:HDFS–>YARN–>MapReduce/Others

5、HDFS主从架构

1、HDFS集群由单个名称节点组成,主服务器管理文件系统名称空间并控制客户机对文件的访问。此外还有许多数据节点,通常是集群中每个节点一个,他们管理连接到运行他们的节点的存储。

6、yarn架构分析

1、资源的调度和管理平台

2、主从架构

​ 主节点可以有两个:ResourceManager

​ 从节点可以有很多个:NodeManager

3、ResourceManager负责

​ 集群资源的分配与调度

​ MapReduce、Storm、Spark等应用,必须实现ApplicationMaster接口,才能被RM管理。

4、NodeManager负责

​ 单节点资源的管理(CPU+内存)

5、yarn架构
在这里插入图片描述

7、Hadoop的特点

1、扩容能力:能可靠的存储和处理PB级别的数据。如果数据量更大,存储不下了,再增加节点就可以了

2、成本低:可以通过普通机器组成的服务器集群来分发以及处理数据。这些服务器集群可以达数千个节点

3、高效率:通过分发计算程序,Hadoop可以在数据所在节点上(本地)并行地处理他们,这使得处理的非常迅速

4、可靠性:Hadoop能够自动的维护数据的多份副本,并且在任务失败后能够自动的重新部署计算任务。

二、HDFS概述

1、概述

1、数据量越来越多,在一个操作系统的管辖范围存储不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。

2、是一种允许文件通过网络在多台主机上分享的文件系统,可以让多机器上的用户分享文件和存储空间。

3、通透性:实际上是通过网络来访问文件的动作,有程序于用户看来,就像是访问本地的磁盘一般。

4、容错:即使系统中有某些节点宕机,整体来说系统仍然可以持续运作而不会有数据损失【通过副本机制实现】

5、分布式文件管理系统很多,hdfs只是其中一种,不适合小文件

6、HDFS架构
在这里插入图片描述

7、HDFS小文件
在这里插入图片描述

2、HDFS写流程

1、流程图

在这里插入图片描述

2、写文件流程分析

1、客户端通过调用DistributedFileSystem的方法创建新文件

2、DistributedFileSystem通过RPC调用namenode去创建一个meiyoublocks关联的新文件,创建前,namenode会做各种校验,比如文件是否存在,客户端有无权限去创建等。如果校验通过,namenode就会记录下新的文件,否则就会抛出IO异常

3、前两步结束后会返回,FSDataOutputStream的对象,跟读文件的时候相似,FSDataOutputStream被封装成DFSOutputStream,DFSOutputStream可以协调namenode和datanode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet,然后拍成队列data quene。

4、DataStreamer回去处理接受data queue,他先询问namenode这个新的block最适合存储在哪几个datanode里,比如副本数是3,那么就找到3个最合适的datanode,把它们排成一个pipeline.DataStreamer把packet按队列输出到管道的第一个datanode中,第一个datanode又把packet输出到第二个datanode中,以此类推。

5、DFSOutputStream还有一个队列叫ack queue也是由packet组成,等待datanode收到响应,当pipeline中的所有datanode都表示已经收到的时候,这时ack queue才会把对应的packet包移除掉。

6、如果在写的过程中某个datanode发生错误,会采取以下几步:1)pipeline被关掉;2)为了防止丢包ack queue里的packet会同步到data queue里; 3)把产生错误的datanode上当前在写但未完成的block删掉; 4)block剩下的部分被写到剩下的两个正常的datanode中; 5)namenode找到另外的datanode去创建这个块的复制。当然这些操作对客户端来说是无感知的。

7、客户端完成写数据后调用close方法关闭写入流

8、DataStreamer把剩余的包都得刷到pipeline里然后等待ack信息,首都奥最后一个ack后,通知namenode把文件标示为已完成。

3、HDFS读流程

1、流程图

在这里插入图片描述

2、读文件流程分析

1、首先调用FileSystem对象的open方法,其实是一个DistributedFileSystem的实例

2、DistributedFilseSystem通过rpc获得文件的第一个block的locations,同一个block按照副本数会返回多个locations,这些locations按照Hadoop拓扑结构排序,距离客户端近的排在前面

3、前两步会返回一个FSDateInputStream对象,该对象会被封装成DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用read方法,DFSInputStream最会找出离客户端最近的datanode并连接。

4、数据从datanode源源不断地流向客户端

5、如果第一块的数据读完了,就会关闭指向第一块的datanode连接,接着读取下一块。这些操作对客户端来说是透明的,客户端的角度看来只是读一个持续不断的流。

6、如果第一批block都读完了,DFSInputStream就回去namenode拿下一批blocks的location,然后继续读,如果所有的块都读完了,这时候就会关闭所有的流。

7、如果在读取数据的时候,DFSInputStream和datanode的通讯发生异常,就会尝试正在读的block的第二近的datanode,并且会记录那个datanode发生错误,剩余的blocks读的时候就会跳过该datanode。

DFSInputStream也会检查block数据校验和,如果发现一个坏的block,就会报告到namenode节点,然后DFSInputStream在其他的datanode上读该block的镜像。

8、该设计的方向就是客户端直接连接datanode来检索数据并且namenode来负责为每一个block提供最优的datanode,namenode仅仅处理block location的请求,这些信息都加载在namenode的内存中,HDFS通过datanode集群可以承受大量客户端的并发访问。

4、数据备份

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eX7U55Q-1649219894736)(C:/Users/stu/AppData/Roaming/Typora/typora-user-images/image-20220403200241907.png)]

5、机架感知

在这里插入图片描述

三、NameNode

1、NameNode是整个文件系统的节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的请求操作。

2、文件包括:

​ fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息

​ edits:操作日志文件,namenode启动后一些新增元信息日志

​ fstime:保存最近一次checkpoint的时间

以上这些文件是保存在Linux的文件系统中

​ hdfs-site.xml的dfs.namenode.name.dir属性

四、secondary namenode

1、secondary的工作流程

1、secondary通知namenode切换edits文件

2、secondary从namenode获得fsimage和edits(通过http)

3、secondary将fsimage载入内存,然后开始合并edits

4、secondary将新的fsimage发回给namenode

5、namenode用新的fsimage替换旧的fsimage

2、什么时候checkpoint

1、fs.checkpoint.period指定两次checkpoint的最大时间间隔,默认3600秒

2、fs.checkpoint.size 规定esits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

五、DataNode

1、提供真实文件数据的存储服务

2、文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的O偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一块成为一个Block。2.0以后HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block

​ hdfs-site.xml中dfs.blocksize属性

3、不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间

4、Reolication。多副本。默认是三个

​ hdfs-site.xml的dfs.replication属性

六、HDFS的Trash回收站

1、和Linux系统(桌面环境)的回收站设计一样,HDFS会为每一用户创建一个回收站目录:/user/用户名/.Trash/,每一个被用户通过Shell删除的文件/目录,fs.trash.interval是指在这个回收周期范围内,文件实际上是被移动到trash的这个目录下面,而不是马上把这个数据删除掉。等到回收周期真正到了以后,HDFS才会将数据真正删除。默认的单位是分钟,1440分钟=60*24,刚好是一天。配置:在每个节点(不仅仅是主节点)上添加配置core-site.xml

fs.trash.interval 1440 注意:如果删除的文件过大,超过回收站大小的话会提示删除失败 需要指定参数 -skipTrash

七、FileSystem

1、fileSystem时使用Java代码操作hdfs的api接口

2、文件操作

​ create:写文件

​ open:读取文件

​ delete:删除文件

3、目录操作

​ mkdirs:创建目录

​ delete:删除文件或目录

​ listStatus:列出目录的内容

​ getFileStatus:显示文件系统的目录和文件的元数据信息

​ getFileBlockLocation:显示文件存储位置

八、Remote Procedure Call

1、RPC——远程过程调用协议,他是通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假设某些传输协议的存在,如TCP或UDP,为了通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

2、RPC采用客户机(client)/服务器(server)模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端用进程接收答复信息,获得进程结果,然后调用执行继续进行。

3、Hadoop的整个体系结构就是构建在RPC之上的。

九、HDFS-Java操作

URI uri = new URI("hdfs://master:9000");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(uri,conf);
//	FileStatus[] fileStatus = fs.listStatus(new Path("/snaguo"));
//		for (FileStatus fileSt : fileStatus) {
//			if (fileSt.listFile()){
//				System.out.println(fileSt.getPath());
//		}
//	}

十、HA的failover原理

1、HDFS的HA,指的是在一个集群中存在两个NameNode,分别运行在独立的物理节点上。在任何时间点,只有一个NameNode是出于Active状态,另一种是在Standby状态。Active NameNode负责所有的客户端的操作,而Standby NameNode用来同步Active NameNode的状态信息,以提供快速的故障恢复能力。

2、为了保证Active NN与Standby NN节点状态同步,即元数据保持一致。除了DataNode需要向两个NN发送block位置信息外,还构建了一组独立的守护进程JournalNodes,用来同步Edits信息。当Active NN执行任何有关命名空间的修改,他需要持久化到一半以上的JournalNode上。而Standby NN负责观察JNs的变化,读取从Active NN发送过来的Edits信息,并更新自己内部的命名空间。一旦Active NN遇到错误,Standby NN需要保证从JNs中读出了全部的Edits,然后切换成Active状态。

3、使用HA的时候,不能启动SecondaryNameNode,会出错。

架构图

在这里插入图片描述

十一、HDFS2的federation

1、HDFS Federation设计可以解决单一命名空间存在的以下几个问题:

​ (1)HDFS集群扩展性。多个NameNode分管一部分目录,使得一个集群可以扩展到更多节点,不再像1.0中那样由于内存的限制制约文件的存储数目。

​ (2)性能更高效。多个NameNode管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。

​ (3)良好的隔离性。用户可根据需要将不同的业务数据交由不同NameNode管理,这样不同业务之间影响很小。

十二、federation架构图

架构图1

在这里插入图片描述

架构图2

在这里插入图片描述

十三、HDFS常见问题

1、集群启动失败

​ 查看日志

2、HDFS文件无法操作

​ 一般是因为处于安全模式下

​ 离开安全模式:hdfs dfsadmin -sademode leave

​ 进入安全模式:hdfs dfsadmin -safemode enter

​ 查看安全模式:hdfs dfsadmin -safemode get

户提供更高的读写吞吐率。

​ (3)良好的隔离性。用户可根据需要将不同的业务数据交由不同NameNode管理,这样不同业务之间影响很小。

十二、federation架构图

十三、HDFS常见问题

1、集群启动失败

​ 查看日志

2、HDFS文件无法操作

​ 一般是因为处于安全模式下

​ 离开安全模式:hdfs dfsadmin -sademode leave

​ 进入安全模式:hdfs dfsadmin -safemode enter

​ 查看安全模式:hdfs dfsadmin -safemode get

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘浩浩yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值