实例讲解Hadoop用法

开发 架构 Hadoop
Hadoop你是否了解,本文通过实例就向大家介绍一下Hadoop方面的知识,希望本文的介绍对你的学习有所帮助,欢迎大家一起来学习Hadoop。

本节和大家一起学习一下Hadoop,通过它的实际应用来向大家展示它的功能,从而使读者更容易了解,希望通过本节的介绍大家对Hadoop有初步的了解。

Hadoop最佳实践

1.简介
Hadoop是Apache自由软件基金会资助的顶级项目,致力于提供基于map-reduce计算模型的高效、可靠、高扩展性分布式计算平台。

2.Map-Reduce应用场景
作为一种受限的分布式计算模型,Map-Reduce计算模型有其擅长的领域,也有其不擅长的方面:

条款1:map-reduce计算模型适用于批处理任务,即在可接受的时间内对整个数据集计算某个特定的查询的结果,该计算模型不适合需要实时反映数据变化状态的计算环境。

条款2:map-reduce计算模型是以“行”为处理单位的,无法回溯已处理过的“行”,故每行日志都必须是一个独立的语义单元,行与行之间不能有语义上的关联。

条款3:相对于传统的关系型数据库管理系统,Map-Reduce计算模型更适合于处理半结构化或无结构话的数据。

因为Map-Reduce计算模型是在处理的时候对数据进行解释的,这就意味着输入的Key和Value可以不是数据本身固有的属性,Key、Value的选择完全取决于分析数据的人。

条款4:Map-Reduce是一个线性可扩展模型,服务器越多,处理时间越短。

以下是同一个任务在不同机器数下获得的测试结果:

 3.任务调度优化
首先对一些术语进行一下说明。Job是一组客服端想要完成的工作,包括输入数据,map-reduce程序以及配置信息,Hadoop通过将Job划分为一些task来执行,task又分为maptask和reducetask。

如何调度Hadoop任务才能充分发挥集群中所有服务器的能力呢?

条款5:每个Job的输入文件不宜过大,也不宜过小。文件过大会造成reduce任务分布不均匀,导致reducetime的不可预知性,而大量的小文件则会严重影响Hadoop的性能。

Hadoop会将Job的输入文件分割成64M固定大小的split,每个split启动一个maptask处理,这个split中的每个record都经过用户定义的map函数处理生成中间结果。若输入文件小于64M,则此文件单独作
为一个split处理。故当输入文件中有大量的小文件时,那么管理这些小文件的开销以及maptask的创建开销会占据绝大多数的Job执行时间。

为了找到Hadoop合适的Job文件大小,我们在一个有50台退役机器组成的集群做了一组性能测试,结果如下表:

我们把一个任务的计算时间分为两部分:reduceshuffletime和reducetime。

lreduceshuffletime是reduce任务把map输出的<key,value>对copy到本地的时间,即reduceshuffletime=map时间+<key,value>对网络传输时间。

lreducetime就是rudece处理这些<key,value>对的时间。

从上表我们可以得出结论:

l各个任务的reduceshuffletime是完全线性的(随着任务量增加,时间线性增加)。

l任务量在300G以内,reducetime基本线性增长,之后随着任务量增加,reducetime呈现随机性加大的趋势。在任务量达到550G后这种随机性更加明显,先后运行同样的任务时间可能会相差一个小时。可以推断,随着任务量增加,reduce任务分布不均匀的机率提高,导致了reducetime的不可预知性。

l上面两个时间的叠加影响下,在300G以内退役机器处理任务的时间是线性增加的。300G以上的任务需要分成若干个小任务串行运行,保证reduce处理在线性可控的区间内。本节关于Hadoop方面的知识没有介绍完毕,请关注下节介绍。

【编辑推荐】

  1. Hadoop初探
  2. 学习笔记 Hadoop是什么?
  3. Hadoop集群与Hadoop性能优化
  4. HadoopHBase实现配置简单的单机环境
  5. 深入剖析Hadoop HBase

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-06-03 18:32:51

Hadoop

2011-04-02 16:37:26

PAT

2010-09-14 17:20:57

2010-11-22 16:22:39

MySQL连接查询

2011-05-23 13:24:01

2009-08-28 16:37:32

C# for循环

2010-03-03 14:05:36

Python实例应用

2010-09-03 10:23:49

PPP Multili

2011-04-01 09:04:09

RIP

2011-04-02 16:33:33

2021-10-14 09:14:50

PyQueryPython网页

2009-06-17 13:57:54

java实例Reflection

2009-06-08 16:52:00

2013-01-10 14:54:48

Android开发组件Intent

2010-06-29 19:08:23

UML建模技术

2009-07-06 13:38:02

2010-06-11 17:44:10

UML对象图

2009-12-21 16:52:52

静态路由设置

2010-07-20 09:45:04

Perl继承

2010-07-16 08:47:53

Perl if语句
点赞
收藏

51CTO技术栈公众号