1.用图与自己的话,简要描述Hadoop起源与发展阶段。(作业3中剪过来)
Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。一个是分布式文件系统(GFS),可用于处理海量网页的存储,另一个是分布式计算框MAPREDUCE,可用于处理海量网页的索引计算问题。
Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,从此Hadoop演变成多个软件的生态圈。
2006年Google发表了论文是关于BigTable的,这促使了后来的Hbase的发展。
因此,Hadoop及其生态圈的发展离不开Google的贡献。
总而言之,狭义上来说,hadoop就是单独指代hadoop这个软件,广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件。
(2)Hadoop不同版本1.x,2.x与3.x的区别
1.x版本系列:hadoop版本的第二代开源版本,主要修复0.x版本的一些bug等
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性
3.x版本系列:对HDFS、MapReduce、YARN都有较大升级,还新增了Ozone key-value存储。
(3)不同公司发行版本
1.免费开源版本apache:
优点:拥有全世界的开源贡献者,代码更新迭代版本快。
缺点:版本的升级、维护、兼容性、补丁都可能考虑不太周到,学习可以用,不适合实际生产工作。
2.免费开源版本hortonWorks:
hortonworks主要是雅虎主导Hadoop开发的副总裁,带领二十几个核心成员成立Hortonworks,核心产品软件HDP(ambari),HDF免费开源,并且提供一整套的web管理界面,让使用者可以通过web界面管理自己的集群状态。
3.软件收费版本ClouderaManager:
cloudera主要是美国一家大数据公司在apache开源hadoop的版本上,通过自己公司内部的各种补丁,实现版本之间的稳定运行,大数据生态圈的各个版本的软件都提供了对应的版本,解决了版本的升级困难,版本兼容性等各种问题,最适合实际生产环境。
2.用图与自己的话,简要描述名称节点、数据节点的主要功能及相互关系、名称节点的工作机制。
(1)描述HDFS名称节点、数据节点的主要功能
在HDFS中,节点分为两类:名称节点、数据节点;
名称节点:名称节点负责管理分布式文件系统的命名空间,它保存了两个核心的数据结构——FsImage、EditLog;
HDFS命名空间:目录、文件、块。
HDFS命名空间的管理,是指对HDFS中目录、文件、块做类似文件系统的创建、修改、删除等基本操作。
FsImage:维护文件系统树 以及 文件树中的文件和文件夹的元数据;
EditLog:记录针对文件的创建、删除、重命名等这样的更新操作;
FsImage、EditLog工作原理:
名称节点运行期间,HDFS内的更新操作被写入到EditLog文件中,随着更新操作的不断发生,EditLog也将不断变大。
名称节点在每次重启时,将FsImage加载到内存中,再逐条执行EditLog中的记录,使FsImage保持最新状态。
存在问题:EditLog过大时
名称节点在启动过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。当启动过程结束之后,系统将退出安全模式,对外提供正常的读写操作。但是,若EditLog很大会使得启动过程运行很慢,名称节点长期处于安全模式下,无法对外提供写操作。
解决问题:第二名称节点SecondaryNameNode
SecondaryNameNode有两个主要功能,针对此问题,它的功能主要是——完成EditLog与FsImage的合并操作,减小EditLog的文件大小,以缩短名称节点启动时间。
每隔一段时间,SecondaryNameNode会与NameNode进行通信,请求NameNode停止使用EditLog文件,让NameNode将这之后新到达的写操作写入到一个新的文件EditLog.new中;然后SecondaryNameNode将EditLog、FsImage拉回至本地,加载到内存中——即将FsImage加载到内存中,再逐条执行EditLog中的记录,使FsImage保持最新。
以上,便是EditLog与FsImage的合并过程,合并完成之后,SecondaryNameNode将已经更新的FsImage文件发送到NameNode,NameNode收到后,就用这个最新的FsImage文件替换掉旧的FsImage,同时用EditLog.new文件去替换EditLog文件,这样一替换,同时也减小的EditLog文件的大小。
SecondaryNameNode的第二个功能:作为名称节点的检查点
从以上“合并过程”能看出,SecondaryNameNode会定期与NameNode通信,获取旧文件合并后得到一个FsImage的新文件。SecondaryNameNode周期性的备份NameNode中的元数据信息,当NameNode发生故障时,可用SecondaryNameNode中记录的元数据信息进行恢复。
但是,在合并、文件替换期间的更新操作并没有被写到新的FsImage文件中去,所以如果在这回期间发生故障,系统会丢失部分元数据信息。
总而言之,SecondaryNameNode和NameNode内存需求相同,两者是运行在不同的机器上的。
数据节点:是HDFS的工作节点,负责数据的存储和读取。
客户端从HDFS读取数据过程:在HDFS内部,一个文件是被分片成了若干个数据块了的,这些数据块被分布的存储到若干个数据节点上。
客户端要获取HDFS内的数据时,首先将文件名发送给名称节点;名称节点根据文件名找到对应数据块信息,再根据数据块信息,找到存储了这些块的数据节点位置信息。
找到数据节点位置信息后将这些信息发送给客户端,客户端据此直接访问数据节点,并获取数据。
在以上所述的访问过程中,名称节点并不参与数据的传输,它只是实现了类似索引的功能。
(2)描述HDFS相互关系、名称节点的工作机制
(1)第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志(edits)和镜像文件(fsimage)到内存
(2)客户端对元数据进行增删改的请求
(3)namenode记录操作日志,更新滚动日志
(4)namenode在内存中对数据进行增删改查
(1)Secondary NameNode询问namenode是否需要checkpoint。直接带回namenode是否检查结果。
(2)Secondary NameNode请求执行checkpoint。
(3)namenode滚动正在写的edits日志
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint
(7)拷贝fsimage.chkpoint到namenode
(8)namenode将fsimage.chkpoint重新命名成fsimage
(1) 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳;
(2) DataNode 启动后向 NameNode 注册,通过后,周期性(1小时)的向 NameNode 上报所有的块信息;
(3) 心跳是每3秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个 DataNode 的心跳,则认为该节点不可用;
(4) 集群运行中可以安全加入和退出一些机器。
3.分别从以下这些方面,梳理清楚HDFS的 结构与运行流程,以图的形式描述。
客户端与HDFS
客户端读
客户端写
数据结点与集群
数据结点与名称结点
名称结点与第二名称结点
数据结点与数据结点
数据冗余
数据存取策略
数据错误与恢复
4.简述HBase与传统数据库的主要区别
①数据类型:Hbase只有简单的数据类型,只保留字符串;传统数据库有丰富的数据类型。
②数据操作:Hbase只有简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系;传统数据库通常有各式各样的函数和连接操作。
③存储模式:Hbase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,这样的好处是数据即是索引,访问查询涉及的列大量降低系统的I/O,并且每一列由一个线索来处理,可以实现查询的并发处理;传统数据库是基于表格结构和行存储,其没有建立索引将耗费大量的I/O并且建立索引和物化试图需要耗费大量的时间和资源。
④数据维护:Hbase的更新实际上是插入了新的数据;传统数据库只是替换和修改。
⑤可伸缩性:Hbase可以轻松的增加或减少硬件的数目,并且对错误的兼容性比较高;传统数据库需要增加中间层才能实现这样的功能。
⑥事务:Hbase只可以实现单行的事务性,意味着行与行之间、表与表之前不必满足事务性;传统数据库是可以实现跨行的事务性。
5.梳理HBase的结构与运行流程,以用图与自己的话进行简要描述,图中包括以下内容:
Master主服务器的功能
Region服务器的功能
Zookeeper协同的功能
Client客户端的请求流程
四者之间的相系关系
与HDFS的关联
6.完整描述Hbase表与Region的关系,三级寻址原理。
四者之间的相系关系:
①Hbase集群有两种服务器:一个Master服务器和多个RegionServer服务器。
②Master服务负责维护表结构信息和各种协调工作,比如建表、删表、移动region、合并等操作。
③客户端获取数据是由客户端直连RegionServer的,所以Master服务挂掉之后依然可以查询、存储、删除数据,就是不能建新表了。
④RegionServer非常依赖Zookeeper服务,Zookeeper管理Hbase所有的RegionServer信息,包括具体的数据段存放在那个RegionServer上。
⑤客户端每次与Hbase连接,其实都是先于Zookeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer;客户端从Zookeeper获取了RegionServer的地址后,会直接从RegionServer获取数据。
与HDFS的关联:
RegionServer保存的数据直接存储在Hadoop的HDFS上。
1.下载压缩文件
2.解压
3.修改文件夹名
4.修改文件夹权限
5.配置环境变量
6.伪分布式配置文件

7.启动HDFS,启动Hbase
8.进入shell界面
9.停止Hbase,停止HDFS运行
1.理解HBase表模型及四维坐标:行键、列族、列限定符和时间戳。
2.启动HDFS,启动HBase,进入HBaseShell命令行。
3.列出HBase中所有的表信息list
4.创建表create
5.查看表详情desc
6.插入数据put
7.查看表数据scan,get
08
WordCount程序任务:
程序
WordCount
输入
一个包含大量单词的文本文件
输出
文件中每个单词及其出现次数(频数),
并按照单词字母顺序排序,
每个单词和其频数占一行,单词和频数之间有间隔
1.用你最熟悉的编程环境,编写非分布式的词频统计程序。
读文件
分词(text.split列表)
按单词统计(字典,key单词,value次数)
排序(list.sort列表)
