第四次
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。
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次数

浙公网安备 33010602011771号