天天看点

04 06 07 08 040607hbase

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.伪分布式配置文件

04 06 07 08 040607hbase

7.启动HDFS,启动Hbase

04 06 07 08 040607hbase
04 06 07 08 040607hbase

8.进入shell界面

04 06 07 08 040607hbase

9.停止Hbase,停止HDFS运行

04 06 07 08 040607hbase

1.理解HBase表模型及四维坐标:行键、列族、列限定符和时间戳。

2.启动HDFS,启动HBase,进入HBaseShell命令行。

04 06 07 08 040607hbase
04 06 07 08 040607hbase

3.列出HBase中所有的表信息list

04 06 07 08 040607hbase

4.创建表create

04 06 07 08 040607hbase

5.查看表详情desc

04 06 07 08 040607hbase

6.插入数据put

04 06 07 08 040607hbase

7.查看表数据scan,get

04 06 07 08 040607hbase

08

WordCount程序任务:

程序

WordCount

输入

一个包含大量单词的文本文件

输出

文件中每个单词及其出现次数(频数),

并按照单词字母顺序排序,

每个单词和其频数占一行,单词和频数之间有间隔

1.用你最熟悉的编程环境,编写非分布式的词频统计程序。

读文件

分词(text.split列表)

按单词统计(字典,key单词,value次数)

排序(list.sort列表)

04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase