0


Hadoop

大数据特点:4v

1.Volume大量

2.Velocity高速

3.Variety多样性

4.Value低价值密度

Hadoop是做什么的?

Hadoop是解决的海量数据的存储和海量数据的分析计算问题。

Hadoop优势:

高可靠性:Hadoop底层维护多个数据副本,即使某个计算元素或者存储出现问题,也不会导致数据丢失。

高扩展性:可以在集群间动态的增加服务器。

高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。

高容错性:能够自动将失败的任务重新分配。

Hadoop组成:

HDFS是什么:

是分布式文件系统,负责存储数据的。

1.NameNode 存储文件的元数据。

2.DataNode 在本地文件系统存储文件块数据,以及块数据的校验和。

3.Secondary NameNode 每隔一段时间对NameNode元数据备份。

NameNode记录数据存在什么位置,DataNode存储具体的数据并且保证数据是正确的,Secondary NameNode辅助NameNode工作的,NameNode挂了的话还有Secondary NameNode。

Yarn是什么:

Yarn负责的是资源的调度。

由两个部分组成,Resource Manager和Node Manager。

MapReduce架构概述:

MapReduce负责的是计算。

HDFS,YARN,MapReduce三者关系:

zookeeper管理数据平台配置和调度。

Hadoop的运行模式:

本地:数据存储在linux本地 测试用

伪分布:数据存储在HDFS 缺钱

完全分布式:数据存储在HDFS/多台服务器工作。

安装jdk和hadoop并且配置他们各自的环境变量。

编写集群分发脚本xsync:

scp(secure copy)安全拷贝,实现服务器与服务器之间的数据拷贝。(from server1 to server2)。

基本语法:

scp -r $pdir/$fname $user@host:$pdir/$fname

命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

在hadoop102中可以将hadoop102的数据推到hadoop103中。(需要hadoop103服务器的密码)

在hadoop103中可以将hadoop102的数据拉到hadoop103中。(需要hadoop102服务器的密码)

在hadoop103中可以将hadoop102的数据传到hadoop104中。(需要hadoop102服务器的密码和hadoop104服务器的密码)

rsync远程同步工具:

主要用于备份和镜像,具有速度快,避免复制相同内容和支持符号连接的优点。

如果其中有一个文件改变了,那么就需要重新拷贝,效率太低了,所以要使用远程同步工具。

基本语法:

rsync -av $pdir/$fname $user@$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

-a 对应的是归档拷贝

-v 显示复制过程

rsync相比较scp来说,可以用来更改,修改内容的时候。

xsync集群分发脚本:

需求:循环复制文件到所有节点的相同目录下。

ssh免密登录:

集群配置:

集群部署规划

HDFS:

分布式文件存储的优点:无限扩展,适合存储海量数据。

元数据记录的功能是什么:快速定位文件位置便于查找。

文件分块存储好处是什么:针对块可以进行并行操作,效率更高。

设置副本备份的作用是什么:冗余存储保障数据安全。

hdfs:hadoop distributed file system 分布式文件系统

1.大部分hdfs应用对文件要求的是write-one-read-many访问模型。一个文件一旦创建,写入,关闭之后就不需要修改了。保证了数据一致性问题。

2.移动计算的代价比之移动数据的代价低,一个应用请求的计算,距离它操作的数据越近就越高效,将计算移动到数据附近,相比将数据移动到应用所在显然更好。

3.hdfs被设计为可从一个平台轻松移植到另一个平台,这有助于将hdfs广泛用作大量应用程序的首选平台。

1.主从架构:

HDFS集群是标准的master/slave主从架构集群。

一般一个HDFS集群是有一个NameNode和一定数目的DataNode组成。

NameNode是HDFS主节点,DataNode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

官方架构图中是一主五从模式,其中五个从角色位于两个机架(Rack)的不同服务器上。

2.分块存储:

HDFS中的文件在物理上是分块存储的(block),默认大小是128M(134217728),不足128M则本身就是一块。

块的大小可以通过配置参数来规定,参数位于hdfs—default.xml中:dfs.blocksize。

3.副本机制:

文件的所有block都会有副本,副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。

副本数由参数dfs.replication控制,默认值是3,也就是会额外再复制2份,连同本身总共3份副本。

4.元数据管理:

NameNode管理的元数据有两种类型:

1.文件自身属性信息

文件名称,权限,修改时间,文件大小,复制因子,数据块大小。

2.文件块位置映射信息

记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

5.namespace(命名空间):

HDFS支持传统的层次型文件组织架构。用户可以创建目录,然后将文件保存在这些目录里面,文件系统命名空间的层次结构和大多数现有的文件系统类似:用户可以创建,删除,移动或重命名文件。

NameNode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或者属性的修改都将被NameNode记录下来。

HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。

6.数据块存储:

文件的各个block的具体存储管理由DataNode节点承担。

每一个block都可以在多个DataNode上存储。​​​​​​​

如果有一个客户端请求,告诉NameNode去删除一个数据,那么NameNode只能够删除目录树里面的部分,真正要删除的数据还是要去DataNode中删除,所以这时候NameNode就会去告诉DataNode删除对应的数据。

Shell操作:

命令行界面:command-line interface是指用户通过键盘输入指令,计算机接收到指令后,予以执行一种人际交互方式。

Hadoop提供了文件系统的shell命令行客户端:hadoop fs .......

这样的命令就是代表操作的是hadoop的文件系统。

hadoop fs -put 从当前文件系统上传到hdfs文件系统

hadoop fs -get 下载文件到本地文件系统指定目录

hadoop fs -cat 读取文件,但是读取大文件不太友好,可以使用 -tail命令。

hadoop fs -appendToFile 把xxx文件追加到xxx文件之后,等于就是合并文件。

HDFS集群角色与职责:

角色:

NameNode是访问HDFS的唯一入口。

NameNode内部通过内存和磁盘文件两种方式管理元数据。

其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log(Journal)编辑日志。

这里面需要强调的就是,secondarynamenode其实并不能代替namenode。

职责:

namenode的职责:只是存储hdfs里面的元数据,文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际的数据。namenode是知道所有文件的块列表以及块列表的位置的,比如这个文件有3个块 1,2,3,分别在datanode1 datanode2 datanode3的位置上。根据这个块列表以及每个块的位置就可以构建出整个的文件。但是namenode其实只是知道一个文件有哪些块组成,并不知道这些块分布在哪些datanode上面,namenode不会持久化存储这些块所在的不同的块所在datanode的位置信息,会在每次系统重启的时候,由datanode小弟传达给namenode大哥。

namenode是hadoop集群中的单点故障。

namenode所在的机器通常会配置有大量内存(RAM)。

datanode职责:

datanode负责的是最终数据块block的存储,是集群的从角色,也称为Slave。所以其实datanode才是实际存储数据的角色。当datanode启动的时候,会告诉namenode,说:“大哥,我启动了”,然后将自己负责的文件的块列表,也就是自己管理了哪些文件的哪些块汇报给namenode节点。当datanode关闭的时候,对全局不会有影响的,namenode会将关闭的datanode所管理的文件的块部分都进行副本复制,交给其他的datanode去管理。因为datanode才是实际存储数据的角色,所以datanode所在的机器通常配置有大量的硬盘空间。

HDFS写数据的流程(上传文件):

1.三个概念,分别是管道ACK应答响应默认3副本存储策略

ack的校验是两两校验的。每个两两校验之间都没问题,那就是真的没问题。

一定不能把所有副本都放在一台机器上面,否则就失去了副本机制的意义。

也就是说上传数据的过程中只要有一个副本上传成功了,那么就算上传成功了,因为我可以去找别的机器再进行复制操作。如果一个副本都没有上传成功,那就完蛋咯!真正传输数据的过程中是客户端必须去和datanode进行交互的过程,但是也必须要向大哥,也就是namenode去交流,大哥说了可以了,才能和底下的小弟交互。

MapReduce:

先分再合 分而治之:

将复杂问题拆分成若干个小部分,然后依次解决,得出结果,然后将所有小部分的结果汇总,组成最终结果。

程序员仅需要关心其应用层的具体计算问题,仅需要编写少量的处理应用本身计算问题的业务程序代码。

特点:

1.易于编程

2.良好的扩展性:随节点数目增长保持近似于线性的增长。

3.高容错性:任何一个节点宕机了,都可以把计算任务转移到另一个节点上运行,不影响整个作业任务的完成。

4.适合处理海量数据的离线任务。

局限性:****在以下的场景下效果的实现比较差。

实时计算性能差:MapReduce主要应用于离线作业,无法作到秒级或者是亚秒级得数据响应。

不能进行流式计算:流式计算特点是数据是源源不断得计算,并且数据是动态的,而MapReduce作为一个离线计算框架,主要是针对静态数据集得,数据是不能动态变化的。

MR处理数据的时候,数据必须是固定的。

完整的MapReduce程序在分布式运行时有三类:

MRAppMaster:负责整个MR程序的过程调度以及状态协调。

MapTask:负责map阶段的整个数据处理流程。

ReduceTask:负责reduce阶段的整个数据处理流程。

会以jar包的形式提供给yarn去部署执行。

计算后的结果是交给hdfs去存储的。

shuffle机制:

在maptask中,当数据spill溢出的时候,shuffle也会负责将数据放到本地磁盘当中,在将数据写入磁盘之前也会进行排序,然后也进行merge合并操作,确保一个MapTask最终只产生一个中间数据文件。

然后在reducetask中,也负责将数据copy主动拉取出来,然后再次进行排序。

shuffle机制的弊端:

shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在。但是shuffle也是导致MapReduce相比较于Spark,Flink计算引擎慢的原因,因为shuffle中频繁涉及到了数据在内存,磁盘之间的多次往复。

内->磁->内->磁

YARN:

Yet** Another Resource Negotiator,另一种资源协调者,是一种新的hadoop资源管理器。**

YARN是一个通用资源管理系统和调度平台,可以为上层应用提供统一的资源管理和调度。

它的引入为集群在利用率,资源统一管理和数据共享等方面带来了巨大好处。

YARN的作用:

YARN管理的对象有,内存,cpu。还负责作为调度平台,多个程序同时申请计算资源如何分配,调度的规则(算法)。而且YARN不仅仅支持MapReduce程序,理论上支持各种计算程序,YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还给我。

YARN的角色:

YARN可以被理解为一个分布式的操作系统平台,而MapReduce等计算程序相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需要的资源(内存,CPU等)。Hadoop能有今天这个地位,很大一部分原因是因为YARN,因为有了YARN,才能让更多的计算框架接入到HDFS中,而不仅仅是MapReduce,还有Spark,Flink。

也正是因为YARN,使得HDFS成为了使用最广泛的大数据存储系统,因为YARN跟HDFS是捆绑的,而YARN可以保证任何一个计算程序在自己平台上面运行,因此这些计算程序使用的数据存储系统也一定是HDFS。

一句话概括:

YARN是一个通用的资源管理系统和调度平台。

YARN三大组件:

ResourceManager 和NodeManager 是集群物理层面。

ApplicationMaster(App Mstr) 是App层面。

除了三大组建还有容器:

Container容器(资源的抽象):在一台机器上运行多个程序的保证。

ResourceManager(RM)是集群中的主角色,决定系统中所有应用程序之间资源的最终分配,拥有最终裁决权。

NodeManager(NM)是集群中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器,监视容器的资源使用情况,并且向RM主角色汇报资源使用情况。

ApplicationMaster(AM)

用户提交的每个应用程序均包含一个AM。

应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。

当用户向YARN中提交一个应用程序后,由客户端去申请资源,请求启动运行本次程序的ApplicationMaster(ApplicationMaster是程序的老大)。ApplicationMaster会根据本次程序内部具体情况,再去找RM申请资源,并监控整个应用程序的整个运行过程,直到运行完成。ApplicationMaster启动成功之后,要向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManager查看应用程序的运行状态(处理了百分之多少),用户可以随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。AM还会为本次程序内部的各个Task任务向RM申请资源(比如MapTask,ReduceTask什么的,这种切片),并监控它的运行状态。ApplicationMaster在应用程序运行完成之后,ApplicationMaster会向ResourceManager注销并关闭自己。

所以说ApplicationMaster既负责申请资源,又负责监控内部所有Task的运行状态。

在YARN中,负责给应用分配资源的就是Scheduler,是ResourceManager的核心组件之一,Scheduler完全专用于调度作业,无法跟踪应用程序的状态。

三种调度器:

1.FIFO Scheduler(先进先出调度器)

2.Capacity Scheduler(容量调度器)---------》Apache版本YARN默认使用

3.Fair Scheduler(公平调度器)


本文转载自: https://blog.csdn.net/weixin_53379153/article/details/135993535
版权归原作者 Java战神(转数仓战神ing) 所有, 如有侵权,请联系我们删除。

“Hadoop”的评论:

还没有评论