课程设计(二)--Hadoop分布式文件系统(HDFS)运行测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电 子 科 技 大 学
实
学生姓名: 实验地点: 一、实验室名称:
验
报
告
学号:
指导老师:田文洪 实验时间:2009 年 12 月 15 日
二、实验项目名称:Hadoop 分布式文件系统(HDFS)运行测试 三、实验学时:16 四、实验原理:
在 SIP 项目设计的过程中, 对于它庞大的日志在早先就考虑使用任务分解的 多线程处理模式来分析统计,但是由于统计的内容暂时还是十分简单,所以就采 用 Memcache 作为计数器结合 Mysql 完成了访问控制以及统计的工作。但未来, 对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇莫过于“云 计算” ,在 Open API 日益盛行的今天,互联网应用的数据将会越来越有价值,如 何去分析这些数据,挖掘其内在价值,就需要分布式计算来支撑起海量数据的分 析工作。 回过头来看,早先那种多线程,多任务分解的日志分析设计,其实是分布式 计算的一个单机版缩略,如何将这种单机的工作分拆,变成集群工作协同,其实 就是分布式计算框架设计所涉及的。BEA 和 VMWare 合作采用虚拟机来构建集 群,无非就是希望使得计算机硬件能够类似于应用程序中的资源池中的资源,使 用者无需关心资源的分配情况,最大化了硬件资源的使用价值。分布式计算也是 如此,具体的计算任务交由哪一台机器执行,执行后由谁来汇总,这都由分布式 框架的 Master 来抉择,而使用者只需简单的将待分析内容的提供给分布式计算 系统作为输入,就可以得到分布式计算后的结果。Hadoop 是 Apache 开源组织的 一个分布式计算开源框架,在很多大型网站上都已经得到了应用,亚马逊, Facebook,Yahoo 等等。对于我来说,最近的一个使用点就是服务集成平台的日志 分析,服务集成平台的日志量将会很大,这也正好符合了分布式计算的适用场景 (日志分析,索引建立就是两大应用场景) 。
什么是 Hadoop
Hadoop 框架中最核心设计就是:MapReduce 和 HDFS。MapReduce 的思想 是由 Google 的一篇论文所提及而被广为流传的,简单的一句话解释 MapReduce 就是任务的分解与结果的汇总。HDFS 是 Hadoop 分布式文件系统的缩写,为分 布式计算存储提供了底层支持。 MapReduce 从 它 名 字 上 来 看 就 大 致 可 以 看 出 个 缘 由 , 两 个 动 词 Map,Reduce,Map(展开)就是将一个任务分解成为多个任务,Reduce 就是将
分解后多任务处理的结果汇总起来,得出最后的分析结果。这不是什么新思想, 其实在前面提到了多线程,多任务的设计就可以找到这种思想的影子。不论是现 实社会,还是在程序设计中,一项工作往往可以被拆分成为多个任务,任务之间 的关系可以分为两种:一种是不相关的任务,可以并行执行;另一种是任务之间 有相互的依赖,先后顺序不能够颠倒,这类任务是无法并行处理的。大学老师上 课时让大家去分析关键路径,无非就是找最省时的任务分解执行方式。在分布式 系统中,机器集群就可以看作硬件资源池,将并行的任务拆分交由每一个空闲机 器资源去处理,能够极大地提高计算效率,同时这种资源无关性,对于计算集群 的扩展无疑提供了最好的设计保证。任务分解处理以后,那就需要将处理以后的 结果在汇总起来,这就是 Reduce 要做的工作。
图 1 MapReduce
上图就是 MapReduce 大致的结构图, Map 前还可能会对输入的数据有 split 在 的过程, 保证任务并行效率, Map 之后还会有 shuffle 的过程, 在 对于提高 Reduce 的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细 节。 根据流程图来说一下具体一个任务执行的情况。 1. 在分布式环境中客户端创建任务并提交。 2. InputFormat 做 Map 前的预处理,主要负责以下工作: 1. 验证输入的格式是否符合 JobConfig 的输入定义,这个在实现 Map 和构建 Conf 的时候就会知道, 不定义可以是 Writable 的任意子类。 2. 将 input 的文件切分为逻辑上的输入 InputSplit,其实这就是在 上面提到的在分布式文件系统中 blocksize 是有大小限制的, 因此 大文件会被划分为多个 block。 3. 通过 RecordReader 来再次处理 inputsplit 为一组 records,输出 给 Map。 (inputsplit 只是逻辑切分的第一步,但是如何根据文件 中的信息来切分还需要 RecordReader 来实现,例如最简单的默认 方式就是回车换行的切分)
3. RecordReader 处理后的结果作为 Map 的输入,Map 执行定义的 Map 逻辑, 输出处理后的 key 和 value 对应到临时中间文件。 4. Combiner 可选择配置,主要作用是在每一个 Map 执行完分析以后,在本 地优先作 Reduce 的工作,减少在 Reduce 过程中的数据传输量。 5. Partitioner 可选择配置,主要作用是在多个 Reduce 的情况下,指定 Map 的结果由某一个 Reduce 处理, 每一个 Reduce 都会有单独的输出文件。 后 ( 面的代码实例中有介绍使用场景) 6. Reduce 执行具体的业务逻辑,并且将处理结果输出给 OutputFormat。 7. OutputFormat 的职责是,验证输出目录是否已经存在,同时验证输出结 果类型是否如 Config 中配置,最后输出 Reduce 汇总后的结果。 HDFS 是分布式计算的存储基石, Hadoop 的分布式文件系统和其他分布式文 件系统有很多类似的特质。 分布式文件系统基本的几个特点: 1. 对于整个集群有单一的命名空间。 2. 数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功 创建之前是无法看到文件存在。 3. 文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而 且根据配置会有复制文件块来保证数据的安全性。