hadoop基础总结

什么是 Hadoop?

  Hadoop 是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop = 分布式存储+分布式计算 。

Hadoop的四大特性(优点)

  1. 扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计个节点中。
  2. 成本低(Economical):Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。
  3. 高效率(Efficient):通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
  4. 可靠性(Rellable):能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。

 

1.HDFS(分布式文件系统)

  HDFS(Hadoop Distributed File System,Hadoop 分布式文件系统):HDFS 允许你以一种分布式和冗余的方式存储大量数据。

HDFS的设计目标

  • 非常巨大的分布式文件系统
  • 运行在普通廉价的硬件上
  • 易扩展、为用户提供性能不错的文件存储服务

HDFS优点:

  • 数据冗余、硬件容错
  • 适合存储大文件
  • 处理流式的数据访问

HDFS缺点:

  • 低延迟的数据访问
  • 小文件存储

HDFS架构

1Master(NameNode/NN) 带多个Slaves(DataNode/DN)

1个文件会被拆分成多个Block(默认:blocksize = 128M)

130M ==>2个Block:128M和2M

NN:NameNode

1)负责客户端请求响应

2)负责元数据(文件名称,副本系数,Block存放的DN)的管理

DN:DataNode

1)存储用户的文件对应的数据块(Block)

2)要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况

 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是部署在不同的节点上

replication factor:副本系数、副本因子

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

HDFS写流程

HDFS读流程

 

写详细步骤:

  1. 客户端向NameNode发出写文件请求。
  2. 检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。 
  3. client端按128MB的块切分文件
  4. client将NameNode返回的分配的可写的DataNode列表Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。 (注:并不是写好一个块或一整个文件后才向后分发)
  5. 每个DataNode写完一个块后,会返回确认信息。 
    (注:并不是每写完一个packet后就返回确认信息,个人觉得因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)
  6. 写完数据,关闭输输出流。
  7. 发送完成信号给NameNode。 
    (注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)

HDFS读流程

HDFS读流程 
读详细步骤:

  1. client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
  2. 就近挑选一台datanode服务器,请求建立输入流 。
  3. DataNode向输入流中中写数据,以packet为单位来校验。
  4. 关闭输入流

读写过程,数据完整性如何保持?

通过校验和。因为每个chunk中都有一个校验位,一个个chunk构成packet,一个个packet最终形成block,故可在block上求校验和。

HDFS 的client端即实现了对 HDFS 文件内容的校验和 (checksum) 检查。当客户端创建一个新的HDFS文件时候,分块后会计算这个文件每个数据块的校验和,此校验和会以一个隐藏文件形式保存在同一个 HDFS 命名空间下。当client端从HDFS中读取文件内容后,它会检查分块时候计算出的校验和(隐藏文件里)和读取到的文件块中校验和是否匹配,如果不匹配,客户端可以选择从其他 Datanode 获取该数据块的副本。

使用HDFS的注意点: 

(1)流式数据访问,就是一次写入,多次读取。不可以修改数 据,只能删除。 

(2)保证数据块尽量大,这样NameNode的压力会较小。 

(3)由于是磁盘读写,延迟必定会高,做好心理准备,如果你要求实时响应的要求较高,可以使用SPARK。毕竟内存中读取数据比从磁盘读取要快很多。(前提是你有个大内存)

 

2.YARN(资源调度框架)

YARN(Yet Another Resource Nagotiator,又一资源定位器):用于作业调度和集群资源管理的框架。

YARN产生背景:单点故障,节点压力大,不易扩展

MapReduce:Master/Slave 架构,1个JobTracker + 多个TaskTracker

JobTracker:负责资源管理和作业调度

TaskTracker:定期向JT汇报本节点的健康状况、资源使用情况、作业执行情况;接受来自JT的命令:启动任务、杀死任务

 

 

YARN:不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度

XXX on YARN 的好处:与其他计算框架共享资源,安资源需求分配,进而提高集群资源的利用率

XXX可以有:Spark/ MapReduce/ Storm/ Flink

YARN架构:

 

1)ResourceManager:

  • 整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管和调度
  • 处理客户端的请求:提交一个作业、杀死一个作业
  • 监控NM,一旦NM挂了,NM上运行的任务需要告诉AM来如何进行处理

2)NodeManager:NM

  • 整个集群中有多个,负责自己本身节点资源管理和使用
  • 定时向RM汇报本节点的资源使用情况
  • 接收并处理来自RM的各种命令:启动Container‘
  • 处理来自AM的命令

3)ApplicationMaster:AM

  • 每个应用程序对应一个:MR、Spark,负责应用程序的管理
  • 为应用程序向RM申请资源(core、memory),分配给内部的task
  • 需要与NM通信:启动、停止task,task是运行在container里面的,AM也是运行在container里

4)Container

  • 封装了CUP、Memory等资源的一个容器
  • 是一个任务运行环境

5)Client

  • 提交作业查询
  • 作业的运行进度
  • 杀死作业

 

 

3.MapReduce(分布式计算框架)

  MapReduce:一个计算框架。它以分布式和并行的方式处理大量的数据。例如:当你对所有年龄> 18 的用户在上述 1 GB 文件上执行查询时,将会有“8 个映射”函数并行运行,以在其 128 MB 拆分文件中提取年龄> 18 的用户,然后“reduce”函数将运行以将所有单独的输出组合成单个最终结果。

核心概念:

Split:交由MapReduce作业处理数据块,是MapReduce中最小的计算单元

HDFS:blocksize 是HDFS中最小的存储单元 128M

默认情况下:两者是一一对应的,当然我们也可以手工设置他们之间的关系(不建议)

Partitioner: Partitioner决定Map Task输出的数据交由那个Reduce Task处理

默认实现:分发的key的hash值对Reduce Task个数取模

Combiner: 本地的reducer

减少Map Task输出的数据量及网络传输量

MapReduce1.x

1)JobTracker:JT   作业的管理者

  • 将作业分解成一堆任务:Task(MapTask and ReduceTask)
  • 将任务分配给TaskTracker执行
  • 作业的监控、容错处理(task挂了,重启task的机制)
  • 在一定的时间间隔内,JT没有收到TT的心跳信息,TT可能挂了,TT上运行的任务可能会指派到其他TT 上去运行

2)TsakTracker:TT  任务的执行者

  • 在TT上执行Task(MapTask and ReduceTask)
  • 会与JJ进行交互:执行/启动/停止作业,发送心跳信息给JT

3)MapTask

  • 自己开发的map任务交由Task处理
  • 解析每条记录的数据,交给自己的map方法处理
  • 将map的输出结果写到本地磁盘(有些作业仅仅有map没有reduce==>HDFS )

4)ReduceTask

  • 将Map Task输出的数据进行读取
  • 将数据进行分组传给自己编写的reduce方法处理
  • 输出结果文件(和reduce数量一致)写到HDFS

 

4.Hadoop 生态系统

     Hadoop 生态系统,拥有 15 多种框架和工具,如 Sqoop,Flume,Kafka,Pig,Hive,Spark,Impala 等,以便将数据摄入 HDFS,在 HDFS 中转移数据(即变换,丰富,聚合等),并查询来自 HDFS 的数据用于商业智能和分析。某些工具(如 Pig 和 Hive)是 MapReduce 上的抽象层,而 Spark 和 Impala 等其他工具则是来自 MapReduce 的改进架构/设计,用于显著提高的延迟以支持近实时(即 NRT)和实时处理。

 5.常见面试问题

1.运行Hadoop集群需要哪些守护进程?

  DataNode,NameNode,TaskTracker和JobTracker都是运行Hadoop集群需要的守护进程。

2.Hadoop支持哪些操作系统部署?

  Hadoop的主要操作系统是Linux。 但是,通过使用一些额外的软件,也可以在Windows平台上部署,但这种方式不被推荐。

3.添加新datanode后,作为Hadoop管理员需要做什么?

  需要启动平衡器才能在所有节点之间重新平均分配数据,以便Hadoop集群自动查找新的datanode。要优化集群性能,应该重新启动平衡器以在数据节点之间重新分配数据。

4.namenode的重要性是什么?

  namenonde的作用在Hadoop中非常重要。它是Hadoop的大脑,主要负责管理系统上的分配块,还为客户提出请求时的数据提供特定地址。

5.当NameNode关闭时会发生什么?

  如果NameNode关闭,文件系统将脱机。

distcp是什么?

  Distcp是一个Hadoop复制工具,主要用于执行MapReduce作业来复制数据。 Hadoop环境中的主要挑战是在各集群之间复制数据,distcp也将提供多个datanode来并行复制数据。

参考

HDFS读写流程(史上最精炼详细):  https://blog.csdn.net/whdxjbw/article/details/81072207

慕课

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值