第四次

1.用图与自己的话,简要描述Hadoop起源与发展阶段。

从与谷歌系统的关系,关键时间节点,1.x,2.x与3.x的区别,不同公司发行版本等方面来讲。

(1)Hadoop最早起源于lucene下的Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
(2)2003年、2004年谷歌发表的三篇论文为该问题提供了可行的解决方案。
——分布式文件系统(GFS),可用于处理海量网页的存储
——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
——分布式的结构化数据存储系统Bigtable,用来处理海量结构化数据。
(3) Doug Cutting基于这三篇论文完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目(同年,cloudera公司成立),迎来了它的快速发展期。

 

从狭义上来说,Hadoop就是单独指代Hadoop这个软件(HDFS+MAPREDUCE)
从广义上来说,Hadoop指代大数据的一个生态圈(Hadoop生态圈),包括很多其他的软件。

 

 

2.

 

 

 

 

NameNode:名称节点

(1)职责:

管理、维护HDFS;
接收客户端的请求:上传、下载、创建目录等;
维护两个非常重要的文件:edits文件 –> 记录了操作日志;fsimage文件 –> 记录HDFS元信息
(2)HDFS操作日志:edits文件

位置:find . -name edits* (在当前目录下查找以edits打头的文件)

​ 最新的操作日志以edits_inprogress***开头

记录:Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等

都是二进制

HDFS提供了一个工具:edits viewer 日志查看器,可以将操作日志转化为XML格式来查看。命令如下:

hdfs oev 命令将日志(二进制)输出为XML文件 -i表示输入,-o表示输出
hdfs oev -i edits_inprogress_0000000000000000208 -o ~/a.xml
1
2
(3)HDFS的元信息:fsimage文件

位置:和edits文件在一起

记录:fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息(数据块的位置、冗余信息)

也是二进制

HDFS提供了一个工具:image viewer查看器,可以将操作日志转化为文本或者XML格式来查看

hdfs oiv 命令将日志(二进制)输出为文本文件 -i表示输入,-o表示输出
hdfs oiv -i fsimage_0000000000000000207 -o ~/b.txt (文本)
hdfs oiv -i fsimage_0000000000000000207 -o ~/c.xml -p XML(xml文件)

DataNode:数据结点

数据块大小:

1.x版本 64M
2.x笨笨 128M
位置:find . -name blk*(blk是block的简写)

一般原则:数据块的冗余度一般跟数据结点个数一致,最大不要超过3。在生产环境下,至少2个数据结点

blk_*表示数据块

blk_*.meta表示数据块的元信息

SecondaryNameNode:第二名称结点

作用:把edits中最新的状态信息合并到fsimage文件中,即日志合并。合并原理图如下。

 

NameNode和SecondaryNameNode在一起的原因是为了效率问题,因为两者在一起,SecondaryNameNode在合并最新的edits到fsimage中时,只需要执行cp操作即可;在合并后,把最新的fsimage上传回NameNode下的fsimage

什么时候合并?当HDFS发出检查点(checkpoint)的时候。默认会在两种情况下发出检查点:

​ (1)每隔60分钟。可通过修改参数,改变时间

​ (2)当edits文件达到64M。可通过修改参数,改变阈值

补充:Oracle数据库中也有检查点,如果发生检查点,会以最高优先级唤醒数据库写进程(DBWn)把内存中的脏数据写到数据文件上(持久化)

分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。

  • 客户端与HDFS
  • 客户端读
  • 客户端写
  • 数据结点与集群
  • 数据结点与名称结点
  • 名称结点与第二名称结点
  • 数据结点与数据结点
  • 数据冗余
  • 数据存取策略
  • 数据错误与恢复

HDFS结构图:

 

 

Secondary Namenode工作图解:

 

 

HDFS文件读流程:

 

 

 HDFS文件写流程:

7.假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每个Region限制为2GB,通过HBase的三级寻址方式,理论上Hbase的数据表最大有多大?

(-ROOT-表能够寻址的.META.表的Region个数)×(每个.META.表的 Region可以寻址的用户数据表的Region个数)

一个-ROOT-表最多只能有一个Region,也就是最多只能有128MB,按照每行(一个映射条目)占用1KB内存计算,128MB空间可以容纳128MB/1KB=217行,也就是说,一个-ROOT-表可以寻址个.META.表的Region。同理,每个.META.表的 Region可以寻址的用户数据表的Region个数是128MB/1KB=217。最终,三层结构可以保存的Region数目是(128MB/1KB) × (128MB/1KB) = 234个Region

 

8.MapReduce的架构,各部分的功能,以及和集群其他组件的关系。

同HDFS一样,Hadoop MapReduce也采用了Master/Slave(M/S)架构,主要有以下几个组件构成:Client、JobTracker、TaskTracker和Task。

1)Client:
用户编写的Mapreduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)表示Mapreduce程序。一个Mapreduce程序可对应若干个作业,而每个作业会被分解成若干个Mapreduce任务(Task)。
2)JobTracker:
JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,会将 相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。
3)TaskTracker:
TaskTracker会周期性的通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上空闲slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别供Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
4)Task:
Task分为Map Task和Reduce Task两种,均由TaskTracker启动。从上篇HDFS文档中知道,HDFS以固定大小的block为基本单位存储数据,而对于Mapreduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了Map Task的数目,因为每个split会交由一个Map Task处理。
Map Task执行过程:先将对应的split迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition,每个partition 将被一个Reduce Task处理。
Reduce Task执行过程:该过程分为三个阶段①从远程节点上读取Map Task中间结果(称为“Shuffle阶段”);②按照key对key/value对进行排序(称为“Sort阶段”);③依次读取,调用用户自定义的reduce()函数处理,并将最终结果存到HDFS上(称为“Reduce阶段”)。

9.MapReduce的工作过程,用自己词频统计的例子,将split, map, partition,sort,spill,fetch,merge reduce整个过程梳理并用图形表达出来。

Mapper类:

1.将MapTask传给我们的文本内容转成string

2.根据分隔符号将每一行的单词切分

3.将单词输出为 <单词,1> :<hello,1><spring,1><winter,1>......

Redecer类:

1.汇总key个数

2.输出key次数

 

posted @ 2021-10-22 09:33  红灯行  阅读(353)  评论(0)    收藏  举报