Hadoop发展过程.docx

上传人:b****0 文档编号:18332705 上传时间:2023-08-15 格式:DOCX 页数:13 大小:335.18KB
下载 相关 举报
Hadoop发展过程.docx_第1页
第1页 / 共13页
Hadoop发展过程.docx_第2页
第2页 / 共13页
Hadoop发展过程.docx_第3页
第3页 / 共13页
Hadoop发展过程.docx_第4页
第4页 / 共13页
Hadoop发展过程.docx_第5页
第5页 / 共13页
Hadoop发展过程.docx_第6页
第6页 / 共13页
Hadoop发展过程.docx_第7页
第7页 / 共13页
Hadoop发展过程.docx_第8页
第8页 / 共13页
Hadoop发展过程.docx_第9页
第9页 / 共13页
Hadoop发展过程.docx_第10页
第10页 / 共13页
Hadoop发展过程.docx_第11页
第11页 / 共13页
Hadoop发展过程.docx_第12页
第12页 / 共13页
Hadoop发展过程.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Hadoop发展过程.docx

《Hadoop发展过程.docx》由会员分享,可在线阅读,更多相关《Hadoop发展过程.docx(13页珍藏版)》请在冰点文库上搜索。

Hadoop发展过程.docx

Hadoop发展过程

1.Hadoop版本演化

总体说来,Hadoop当前存在两种发行版,分别是闭源发行版和开源发行版,其中,Intel发行版、华为发行版、IBM发行版等商业公司发行的版本都属于闭源发行版,这几个公司在开源Hadoop基础上进行了若干的改进和优化,提出了自己的发行版,并打包到硬件中出售,目前intel和华为发行版买的不错,在此不细谈闭源发行版,主要谈开源发行版。

目前主要有三大非常有名的开源发行版,分别是apache、hortonworks、cloudera,第一个是一个开源公益组织,后两个是开源公司,

由于Hadoop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼。

本文总结了ApacheHadoop和ClouderaHadoop的版本衍化过程,并给出了选择Hadoop版本的一些建议。

apachehadoop和clouderahadoop的版本的演化.

apachehadoop官方给出的版本说明是:

下图可以简单说明apachehadoop和clouderahadoop版本之间的变化关系

0.20.x版本最后演化成了现在的1.0.x版本

0.23.x版本最后演化成了现在的2.x版本

hadoop1.0指的是1.x(0.20.x),0.21,0.22

hadoop2.0指的是2.x,0.23.x

CDH3,CDH4分别对应了hadoop1.0hadoop2.0

1ApacheHadoop版本衍化

截至2012年12月23日,ApacheHadoop版本分为两代,我们将第一代Hadoop称为Hadoop1.0,第二代Hadoop称为Hadoop2.0。

第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则NameNodeHA等新的重大特性。

第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于Hadoop1.0,是一套全新的架构,均包含HDFSFederation和YARN两个系统,相比于0.23.x,2.x增加了NameNodeHA和Wire-compatibility两个重大特性。

经过上面的大体解释,大家可能明白了Hadoop以重大特性区分各个版本的,总结起来,用于区分Hadoop版本的特性有以下几个:

(1)Append支持文件追加功能,如果想使用HBase,需要这个特性。

(2)RAID在保证数据可靠的前提下,通过引入校验码较少数据块数目。

详细链接:

https:

//issues.apache.org/jira/browse/HDFS/component/12313080

(3)Symlink支持HDFS文件链接,具体可参考:

https:

//issues.apache.org/jira/browse/HDFS-245

(4)SecurityHadoop安全,具体可参考:

https:

//issues.apache.org/jira/browse/HADOOP-4487

(5) NameNodeHA具体可参考:

https:

//issues.apache.org/jira/browse/HDFS-1064

(6) HDFSFederation和YARN

需要注意的是,Hadoop2.0主要由Yahoo独立出来的hortonworks公司主持开发。

2ClouderaHadoop(CDH)版本衍化

Apache当前的版本管理是比较混乱的,各种版本层出不穷,让很多初学者不知所措,相比之下,Cloudera公司的Hadoop版本管理的要很多。

我们知道,Hadoop遵从Apache开源协议,用户可以免费地任意使用和修改Hadoop,也正因此,市面上出现了很多Hadoop版本,其中比较出名的一是Cloudera公司的发行版,我们将该版本称为CDH(ClouderaDistributionHadoop)。

截至目前为止,CDH共有4个版本,其中,前两个已经不再更新,最近的两个,分别是CDH3(在ApacheHadoop0.20.2版本基础上演化而来的)和CDH4在ApacheHadoop2.0.0版本基础上演化而来的),分别对应Apache的Hadoop1.0和Hadoop2.0,它们每隔一段时间便会更新一次。

Cloudera以patchlevel划分小版本,比如patchlevel为923.142表示在原生态ApacheHadoop0.20.2基础上添加了1065个patch(这些patch是各个公司或者个人贡献的,在Hadoopjira上均有记录),其中923个是最后一个beta版本添加的patch,而142个是稳定版发行后新添加的patch。

由此可见,patchlevel越高,功能越完备且解决的bug越多。

Cloudera版本层次更加清晰,且它提供了适用于各种操作系统的Hadoop安装包,可直接使用apt-get或者yum命令进行安装,更加省事。

3Hortonworks(HDP)发行版

Hortonworks这个公司是从yahoo分出来的,yahoo是hadoop的提出者和主要贡献者,而hortonworks从一成立就成为apachehadoop的主要贡献者,他目前推出自己的版本HDP(hortonworksDataPlatform),目前刚刚发布了HDP2,是基于最新的apacheHadoop2.20开发的。

4如何选择Hadoop版本

当前Hadoop版本比较混乱,让很多用户不知所措。

实际上,当前Hadoop只有两个版本:

Hadoop1.0和Hadoop2.0,其中,Hadoop1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成,而Hadoop2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。

相比于Hadoop1.0,Hadoop2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。

当我们决定是否采用某个软件用于开源环境时,通常需要考虑以下几个因素:

(1)是否为开源软件,即是否免费。

(2)是否有稳定版,这个一般软件官方网站会给出说明。

(3)是否经实践验证,这个可通过检查是否有一些大点的公司已经在生产环境中使用知道。

(4)是否有强大的社区支持,当出现一个问题时,能够通过社区、论坛等网络资源快速获取解决方法。

考虑到以上几个因素,我们分析一下开源软件Hadoop。

对于Hadoop2.0而言,目前尚不稳定,无法用于生产环境,因此,如果当前你正准备使用Hadoop,那么只能从Hadoop1.0中选择一个版本,而目截至目前(2012年12月23日),Apache和Cloudera最新的稳定版分别是Hadoop1.0.4和CDH3U4,因此,你可以从中任选一个使用。

如今Hadoop2.0已经发布了最新的稳定版2.2.0,推荐使用该版本,具体介绍可阅读:

“Hadoop2.0稳定版本2.2.0新特性剖析”,升级方法可参考:

“Hadoop升级方案

(二):

从Hadoop1.0升级到2.0

(1)”。

2.安Hadoop配套项目HBase和Hive版本关系

1.Habse版本

……以前老版本

●hbase-0.90.0

●hbase-0.92.0

●hbase-0.94.0

●hbase-0.94.6.1oldstable

●hbase-0.94.7oldstable

●hbase-0.94.12stableversion

●hbase-0.95currentdevelop

官网镜像文件列表,目前最新稳定版本是habse-0.94.16

选择Hadoop版本对HBase部署很关键。

下表显示不同HBase支持的Hadoop版本信息。

基于HBase版本,应该选择合适的Hadoop版本

HBase-0.92.x

HBase-0.94.x

HBase-0.96

Hadoop-0.20.205

S

X

X

Hadoop-0.22.x

S

X

X

Hadoop-1.0.x

S

S

S

Hadoop-1.1.x

NT

S

S

Hadoop-0.23.x

X

S

NT

Hadoop-2.x

X

S

S

S=supportedandtested,

X=notsupported,

NT=itshouldrun,butnottestedenough.

2.Hive版本

官网镜像文件列表,目前稳定版本为hive-0.11.0

3.hadoop、hbase、hive版本匹配问题

hadoop由于快速发展,版本更新很快,已经由hadoop0.x发展到hadoop2.x,目前hadoop2.x还处于beta测试,但是hadoop0.x--hadoop1.2都是稳定版的。

由hadoop的相关项目,hbase、hive、pig、zookeeper等,他们依托于hadoop,但是开发和版本又不完全统一,就导致在学习和应用的过程中,经常出现由于版本不一致,导致莫名奇秒的错误。

下面是网上一些版本问题的经验性总结

   hadoop1.2+hbase0.95.0 没问题

   hadoop1.2+hbase0.94.9 没问题

   hadoop1.2+hbase0.95.0+hive0.11.0会产生hbase+hive的不兼容,创建hive+hbase的关联表就会报pair对异常。

   hadoop1.2+hbase0.94.9+hive0.10.0没问题,解决了上个版本的不兼容问题。

Hadoop0.20.203+hbase-0.09.3+hive-0.71没有问题。

3.Hadoop相关问题及解决

1.Habse和hive整合后,hive中使用select*和selectfiled的区别

在hive中创建分区的表与hbase整合后,使用

Select*fromhbase_test;命令无法看到表中的记录,使用selectid,namefromhbase_test;可以看到记录

分析原因:

select*在普通表中直接读取HDFS文件,在这里是直接从Habse进行查询,应该是查询成功了,但是hive并不会显示。

2.Hive、habse数据映射

Hive与Habse整合后,进行数据映射的方法:

3.Hive中插入数据,habse查询不到

问题描述:

在Hbase中有一张表TB_1

FNAME:

"C1

随后,在Hive中创建了一张映射表TB_1

当HBASE的数据发生改变时,Hive可以读取到

但我往HIVE里插入新数据后,HBASE里却看不到,求解~~

分析原因:

HIVE的映射表无法更新HBASE中已存在的数据表

创建映射表,同时创建HBASE对接表

--Hive SHELL

--创建HIVE和HBASE表单

CREATE TABLE hbase_table(key int, value string)  

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":

key,_0:

val")  

TBLPROPERTIES ("hbase.table.name" = "hive_table");

 

--插入测试数据 

insert overwrite table hbase_table select key as key,'00' as Test from OtherHivetb;

 

--HBASE SHELL

scan 'hive_table',{LIMIT=>1};

4.Hbase数据版本管理

按照官方文档说明HBase的操作(包含版本操作),如下

4.1.Get

默认情况下,如果你没有指定版本,当你使用Get操作的时候,会返回最近版本的Cell(该Cell可能是最新写入的,但不能保证)。

默认的操作可以这样修改:

∙如果想要返回返回两个以上的把版本,参见Get.setMaxVersions()

∙如果想要返回的版本不只是最近的,参见Get.setTimeRange()

要向查询的最新版本要小于或等于给定的这个值,这就意味着给定的'最近'的值可以是某一个时间点。

可以使用0到你想要的时间来设置,还要把maxversions设置为1.

1)默认Get例子

下面的Get操作会只获得最新的一个版本。

Getget=newGet(Bytes.toBytes("row1"));

Resultr=htable.get(get);

byte[]b=r.getValue(Bytes.toBytes("cf"),Bytes.toBytes("attr"));

//returnscurrentversionofvalue

2)含有的版本的Get例子

下面的Get操作会获得最近的3个版本。

Getget=newGet(Bytes.toBytes("row1"));

get.setMaxVersions(3);//willreturnlast3versionsofrow

Resultr=htable.get(get);

byte[]b=r.getValue(Bytes.toBytes("cf"),Bytes.toBytes("attr"));//returnscurrentversionofvalue

Listkv=r.getColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));//returnsallversionsofthiscolumn

4.2. Put

一个Put操作会给一个cell,创建一个版本,默认使用当前时间戳,当然你也可以自己设置时间戳。

这就意味着你可以把时间设置在过去或者未来,或者随意使用一个Long值。

要想覆盖一个现有的值,就意味着你的row,column和版本必须完全相等。

1)不指明版本的例子

下面的Put操作不指明版本,所以HBase会用当前时间作为版本。

Putput=newPut(Bytes.toBytes(row));

put.add(Bytes.toBytes("cf"),Bytes.toBytes("attr1"),Bytes.toBytes(data));

htable.put(put);

2)指明版本的例子

下面的Put操作,指明了版本。

Putput=newPut(Bytes.toBytes(row));

longexplicitTimeInMs=555;//justanexample

put.add(Bytes.toBytes("cf"),Bytes.toBytes("attr1"),explicitTimeInMs,Bytes.toBytes(data));

htable.put(put);

4.3.Delete

有三种不同类型的内部删除标记

∙Delete:

删除列的指定版本.

∙Deletecolumn:

删除列的所有版本.

∙Deletefamily:

删除特定列族所有列

当删除一行,HBase将内部对每个列族创建墓碑(非每个单独列)。

删除操作的实现是创建一个墓碑标记。

例如,我们想要删除一个版本,或者默认是currentTimeMillis。

就意味着“删除比这个版本更早的所有版本”.HBase不会去改那些数据,数据不会立即从文件中删除。

他使用删除标记来屏蔽掉这些值。

若你知道的版本比数据中的版本晚,就意味着这一行中的所有数据都会被删除。

4.4.控制版本数量

hbase为了避免数据存在过多版本造成的的管理(包括存贮和索引)负担,hbase提供了两种数据版本回收方式。

一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。

用户可以针对每个列族进行设置。

Ø最大版本数

行的版本的数量是HColumnDescriptor设置的,每个列族可以单独设置,默认是3。

这个设置是很重要的,因为HBase是不会去覆盖一个值的,他只会在后面在追加写,用时间戳来区分、过早的版本会在执行主紧缩的时候删除。

这个版本的值可以根据具体的应用增加减少。

不推荐将版本最大值设到一个很高的水平(如,成百或更多),除非老数据对你很重要。

因为这会导致存储文件变得极大。

Ø最小版本数

和行的最大版本数一样,最小版本数也是通过HColumnDescriptor 在每个列族中设置的。

最小版本数缺省值是0,表示该特性禁用。

最小版本数参数和存活时间一起使用,允许配置如“保存最后T秒有价值数据,最多N个版本,但最少约M个版本”(M是最小版本数,M

该参数仅在存活时间对列族启用,且必须小于行版本数

4.知识点解释

1HDFSFederation

HDFSFederation是Hadoop最新发布版本Hadoop-0.23.0中为解决HDFS单点故障而提出的namenode水平扩展方案。

该方案允许HDFS创建多个namespace以提高集群的扩展性和隔离性。

但HDFSFederation并没有完全解决单点故障问题。

虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障:

如果某个namenode挂掉了,其管理的相应的文件便不可以访问。

Federation中每个namenode仍然像之前HDFS上实现一样,配有一个secondarynamenode,以便主namenode挂掉一下,用于还原元数据信息。

2YARN

Hadoop2.0由三个子系统组成,分别是HDFS、YARN和MapReduce,其中,YARN是一个崭新的资源管理系统,而MapReduce则只是运行在YARN上的一个应用,如果把YARN看成一个云操作系统,那么MapReduce可认为是运行在这个操作系统上的App

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2