hadoop之初识

1.Hadoop简介


hadoop官网:
在这里插入图片描述
在官网的第一句话,显示出了hadoop的三个特点

1.reliable:

hadoop的HA,解决了单节点故障问题

hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素 或存储出现故障,也不会导致数据的丢失。

2.scalable:

增添或者删除DataNode(支持热插拔,即无需重新启动集群),都会通知NameNode及时更新metadata

3.distributed computing:

数据在各个计算机节点上流动,同时各个计算机节点都能以某种方式访问共享数据,最终分布式计算后的输出结果汇总被持久化存储和输出。




2.Hadoop的组成

在这里插入图片描述



1.HDFS

HDFS(Hadoop Distributed File System)是一个分布式文件存储系统,几乎是离线存储领域的标准解决方案

hdfs是一个文件系统,用于存储文件,通过目录树 来定位文件;

其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。


2.MAPREDUCE

MapReduce是一个分布式计算框架,是基于Hadoop的数据分析计算的核心框架。

MapReduce处理过程分为两个阶段:Map和Reduce。

Map负责把一个任务分解成多个任务;

Reduce负责把分解后多任务处理的结果汇总。

本质就是一个jar包,做计算逻辑

由于开发难度高 代码量大 维护困难 计算慢,

所以基本不会使用MR,都使用hive sql spark


3.YARN

  Yarn是“Yet Another Resource Negotiator”的缩写,“另一种资源调度器”。


  Hadoop1.x和Hadoop2.x最大的区别就是把yarn解耦,从MR中独立出来。

yarn的发展历程:

  在MapReduce应用程序的启动过程中,最重要的就是要把MapReduce程序分发到大数据集群的服务器上,在Hadoop 1中,这个过程主要是通过TaskTracker和JobTracker通信来完成。

 这种架构方案的主要缺点是,服务器集群资源调度管理和MapReduce执行过程耦合在一起,如果想在当前集群中运行其他计算任务,比如Spark,无法被分配到资源从而无法统一使用集群中的资源了。

  随着大数据技术的发展,各种新的计算框架不断出现,不可能为每一种计算框架部署一个服务器集群,而且就算能部署新集群,数据还是在原来集群的HDFS上。所以我们需要把MapReduce的资源管理和计算框架分开,这也是Hadoop2.x最主要的变化,就是将Yarn从MapReduce中分离出来,成为一个独立的资源调度框架。


yarn的调度:

资源管理作业控制(包括作业监控、容错等),分拆成两个独立的进程。资源管理与具体的应用程序无关,它负责整个集群的资源(内存、CPU、磁盘等)管理,而作业控制进程则是直接与应用程序相关的模块,且每个作业控制进程只负责管理一个作业

 资源管理比如调度第5台机器的内存,使用3个g,2核跑这个机器其中一块的task任务

3.HDFS

3.1 HDFS 1.x

在这里插入图片描述
NameNode

NameNode 负责管理整个分布式系统的元数据,主要包括:

  • 目录树结构;

  • 文件到数据库 Block 的映射关系;

  • Block 副本及其存储位置等管理数据;

  • DataNode 的状态监控,两者通过段时间间隔的心跳来传递管理信息和数据信息,通过这种方式的信息传递,NameNode 可以获知每个 DataNode 保存的 Block 信息、DataNode 的健康状况、命令 DataNode 启动停止等(如果发现某个 DataNode 节点故障,NameNode 会将其负责的 block 在其他 DataNode 上进行备份)。
    这些数据保存在内存中,同时在磁盘保存两个元数据管理文件:fsimage 和 editlog。

  • fsimage:是内存命名空间元数据在外存的镜像文件;保存来最新的元数据检查点,包含来整个hdfs文件系统的所有目录和文件的信息。对于文件来说包括了数据块描述信息,修改时间,访问时间等,对于目录老说包括修改时间,访问权限控制信息(目录所属用户,所在组)等。

  • editlog:则是各种元数据操作的 write-ahead-log 文件,在体现到内存数据变化前首先会将操作记入 editlog 中,以防止数据丢失。主要是在Namenode已经启动情况下对hdfs进行的各种更新操作进行记录,hdfs客户端执行所有的写操作都会被记录到editlog中。
    这两个文件相结合可以构造完整的内存数据。

Secondary NameNode

Secondary NameNode 并不是 NameNode 的热备机,而是定期从 NameNode 拉取 fsimage 和 editlog 文件,并对两个文件进行合并,形成新的 fsimage 文件并传回 NameNode,这样做的目的是减轻 NameNode 的工作压力,本质上 SNN 是一个提供检查点功能服务的服务点。

DataNode

负责数据块的实际存储和读写工作,Block 默认是64MB(HDFS2.0改成了128MB),当客户端上传一个大文件时,HDFS 会自动将其切割成固定大小的 Block,为了保证数据可用性,每个 Block 会以多备份的形式存储,默认是3份。



文件写入过程

在这里插入图片描述
具体过程如下:

  1. Client 调用 DistributedFileSystem 对象的 create 方法,创建一个文件输出流(FSDataOutputStream)对象;
  2. 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,在 HDFS 的 Namespace 中创建一个文件条目(Entry),此时该条目没有任何的 Block,NameNode 会返回该数据每个块需要拷贝的 DataNode 地址信息;
  3. 通过 FSDataOutputStream 对象,开始向 DataNode 写入数据,数据首先被写入 FSDataOutputStream 对象内部的数据队列中,数据队列由 DataStreamer 使用,它通过选择合适的 DataNode 列表来存储副本,从而要求 NameNode 分配新的 block;
  4. DataStreamer 将数据包以流式传输的方式传输到分配的第一个 DataNode 中,该数据流将数据包存储到第一个 DataNode 中并将其转发到第二个 DataNode 中,接着第二个 DataNode 节点会将数据包转发到第三个 DataNode 节点;
  5. DataNode 确认数据传输完成,最后由第一个 DataNode 通知 client 数据写入成功;
  6. 完成向文件写入数据,Client 在文件输出流(FSDataOutputStream)对象上调用 close 方法,完成文件写入;
  7. 调用 DistributedFileSystem 对象的 complete 方法,通知 NameNode 文件写入成功,NameNode 会将相关结果记录到 editlog 中。


文件读取过程

在这里插入图片描述
具体过程如下:

  1. Client 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,获取文件 block 位置信息;
  2. NameNode 返回存储的每个块的 DataNode 列表;
  3. Client 将连接到列表中最近的 DataNode;
  4. Client 开始从 DataNode 并行读取数据;
  5. 一旦 Client 获得了所有必须的 block,它就会将这些 block 组合起来形成一个文件。

在处理 Client 的读取请求时,HDFS 会利用机架感知选举最接近 Client 位置的副本,这将会减少读取延迟和带宽消耗。



Hadoop 1.x存在的问题

HDFS1.x 的架构, NameNode 的单点问题,早期的 HDFS 由于规模较小,有些问题就被隐藏了,但随着数据量的变大,出现了如下问题:

NameNode 的单点问题,Hadoop集群中,NameNode节点存储着HDFS上所有文件和目录的元数据信息。如果NameNode挂了,数据读写都会受到影响,HDFS 整体将变得不可用,这在生产环境中是不可接受的;

为了解决上述问题,Hadoop2.x 提供一个的解决方案:

HA(High Availability 高可用方案):这个是为了解决 NameNode 单点问题;



3.2 HDFS 2.x

在这里插入图片描述

  1. Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务;
    Active NameNode
    接收client的rpc请求并处理,同时自己editlog写一份,也向JN的共享存储上的editlog写一份。
    也同时接收DN的block report,block location updates 和 heartbeat
    Standby NameNode:
    同样会接受到从JN的editlog上读取并执行这些log操作,使自己的NN的元数据和activenn的元数据是同步的,使用说standby是active nn的一个热备。一旦切换为active状态,就能够立即马上对外提供NN角色的服务。也同时接收DN的block report,block location updates 和 heartbeat

  2. ZKFailoverController(主备切换控制器,FC):ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换(当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换);

  3. Zookeeper 集群:为主备切换控制器提供主备选举支持;

  4. 共享存储系统:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和备 NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。

  5. DataNode 节点:因为主 NameNode 和备 NameNode 需要共享 HDFS 的数据块和 DataNode 之间的映射关系,为了使故障切换能够快速进行,DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

  6. FailoverController,FC 最初的目的是为了实现 SNN 和 ANN 之间故障自动切换,FC 是独立与 NN 之外的故障切换控制器,ZKFC 作为 NameNode 机器上一个独立的进程启动 。检测 NameNode 的健康状态,如果检测到 NameNode 的状态发生变化,会用相应方法进行自动的主备选举。



4.Hdfs常用的shell命令

#查看路径下的文件,文件夹
hadoop fs –ls <path>

#递归创建文件或文件夹
hadoop fs –mkdir –p <path>

#查看文件内容
hadoop fs –cat <path>

#移动文件
hadoop fs –mv <path>

#将hdfs的文件下载到本地
hadoop fs –get <path>

#将本地的文件上传到hdfs中
hadoop fs –put <path>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值