Hadoop三种模式安装配置实验报告

2.1. Hadoop分布式文件系统(HDFS)
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

2.2. 简单的一致性模型
HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。Map/Reduce应用或者网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。

2.3. “移动计算比移动数据更划算”
一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比之将数据移动到应用所在显然更好。HDFS为应用提供了将它们自己移动到数据附近的接口。

2.4. 数据复制
HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。HDFS中的文件都是一次性写入的,并且严格要求在任何时候只能有一个写入者。

Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。

2.5. 副本选择
为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。

2.6. 文件系统元数据的持久化
Namenode上保存着HDFS的名字空间。对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为EditLog的事务日志记录下来。例如,在HDFS中创建一个文件,Namenode就会在Editlog中插入一条记录来表示;同样地,修改文件的副本系数也将往Editlog插入一条记录。Namenode在本地操作系统的文件系统中存储这个Editlog。整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。

Namenode在内存中保存着整个文件系统的名字空间和文件数据块映射(Blockmap)的映像。这个关键的元数据结构设计得很紧凑,因而一个有4G内存的Namenode足够支撑大量的文件和目录。当Namenode启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。这个过程称为一个检查点(checkpoint)。在当前实现中,检查点只发生在Namenode启动时,在不久的将来将实现支持周期性的检查点。

Datanode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息。它把每个HDFS数据块存储在本地文件系统的一个单独的文件中。Datanode并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录中创建所有的本地文件并不是最优的选择,这是因为本地文件系统可能无法高效地在单个目录中支持大量的文件。当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。

2.7. 集群均衡
HDFS的架构支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode移动到其他空闲的Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并且同时重新平衡集群中的其他数据。这些均衡策略目前还没有实现。

2.8. 数据完整性
从某个Datanode获取的数据块有可能是损坏的,损坏可能是由Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了对HDFS文件内容的校验和(checksum)检查。当客户端创建一个新的HDFS文件,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。

  1. Hadoop进程简介
    我们在启动Hadoop以后,会启动相应的Hadoop进程,可以通过在终端中输入:jps来查看当前进程,下面来详解介绍这些进程的具体含义及作用。

3.1. Namenode 和 Datanode
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。

Namenode和Datanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统(OS)。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。

3.2. Secondary NameNode
NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的edits操作。然后它将新的HDFS状态写入(fsimage)中,并使用一个空的edits文件开始正常操作。因为NameNode只有在启动阶段才合并fsimage和edits,所以久而久之日志文件可能会变得非常庞大,特别是对大型的集群。日志文件太大的另一个副作用是下一次NameNode启动会花很长时间。

Secondary NameNode定期合并fsimage和edits日志,将edits日志文件大小控制在一个限度下。因为内存需求和NameNode在一个数量级上,所以通常secondary NameNode和NameNode运行在不同的机器上。Secondary NameNode通过bin/start-dfs.sh在conf/masters中指定的节点上启动。

Secondary NameNode的检查点进程启动,是由两个配置参数控制的:

l fs.checkpoint.period,指定连续两次检查点的最大时间间隔,默认值是1小时。

l fs.checkpoint.size定义了edits日志文件的最大值,一旦超过这个值会导致强制执行检查点(即使没到检查点的最大时间间隔)。默认值是64MB。

Secondary NameNode保存最新检查点的目录与NameNode的目录结构相同。 所以NameNode可以在需要的时候读取Secondary NameNode上的检查点镜像。如果NameNode上除了最新的检查点以外,所有的其他的历史镜像和edits文件都丢失了, NameNode可以引入这个最新的检查点。以下操作可以实现这个功能:

l 在配置参数dfs.name.dir指定的位置建立一个空文件夹;

l 把检查点目录的位置赋值给配置参数fs.checkpoint.dir;

l 启动NameNode,并加上-importCheckpoint。

NameNode会从fs.checkpoint.dir目录读取检查点, 并把它保存在dfs.name.dir目录下。 如果dfs.name.dir目录下有合法的镜像文件,NameNode会启动失败。 NameNode会检查fs.checkpoint.dir目录下镜像文件的一致性,但是不会去改动它。

3.3. JobTracker
创建一个InputFormat的实例,调用它的getSplits()方法,把输入目录的文件拆分成FileSplist作为Mapper task 的输入,生成Mapper task加入Queue。

3.4. TaskTracker
向JobTracker索求下一个Map/Reduce。Mapper Task先从InputFormat创建RecordReader,循环读入FileSplits的内容生成Key与Value,传给Mapper函数,处理完后中间结果写成SequenceFile。Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容(33%),Sort/Merge后(66%),执行Reducer函数,最后按照OutputFormat写入结果目录。 TaskTracker 每10秒向JobTracker报告一次运行情况,每完成一个Task10秒后,就会向JobTracker索求下一个Task。

  1. Hadoop Map/Reduce教程
    4.1. 概述
    Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

通常Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。

Map/Reduce框架由一个单独的master JobTracker 和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务。

应用程序至少应该指明输入/输出的位置(路径),并通过实现合适的接口或抽象类提供map和reduce函数。再加上其他作业的参数,就构成了作业配置(job configuration)。然后,Hadoop的 job client提交作业(jar包/可执行程序等)和配置信息给JobTracker,后者负责分发这些软件和配置信息给slave、调度任务并监控它们的执行,同时提供状态和诊断信息给job-client。

虽然Hadoop框架是用JavaTM实现的,但Map/Reduce应用程序则不一定要用 Java来写 。Hadoop Streaming是一种运行作业的实用工具,它允许用户创建和运行任何可执行程序 (例如:Shell工具)来做为mapper和reducer。Hadoop Pipes是一个与SWIG兼容的C++ API(没有基于JNITM技术),它也可用于实现Map/Reduce应用程序。

  1. 输入与输出
    Map/Reduce框架运转在 键值对上,也就是说,框架把作业的输入看为是一组 键值对,同样也产出一组 键值对做为作业的输出,这两组键值对的类型可能不同。框架需要对key和value的类(classes)进行序列化操作,因此,这些类需要实现 Writable接口。另外,为了方便框架执行排序操作,key类必须实现 WritableComparable接口。

一个Map/Reduce 作业的输入和输出类型如下所示:(input) -> map -> -> combine -> -> reduce -> (output)

hadoop安装配置实验报告相关推荐

  1. 计算机网络email服务的配置,计算机网络邮件配置实验报告

    <计算机网络邮件配置实验报告>由会员分享,可在线阅读,更多相关<计算机网络邮件配置实验报告(4页珍藏版)>请在人人文库网上搜索. 1.实验报告实验题目:配置邮件服务器姓名:院系 ...

  2. 六、数据备份软件的配置实验报告

    数据备份软件的配置实验报告 目录 数据备份软件的配置实验报告 一.[实验目的] 二.[实验设备] 三.[实验步骤] 子任务一:安装Veritas NetBackup服务器软件 子任务二:配置net b ...

  3. 虚拟机上ftp服务器安装与配置文件,Linux下ftp服务器安装与配置实验报告_linuxftp服务器配置实验报告,ftp服务器配置的实验报告...

    Linux下ftp服务器安装与配置实验报告,包含实验步骤,实验结果以及总结 GNU nano 2.5.3 File: /etc/vsftpd. conf By default the server w ...

  4. 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...

    <计算机网络>实六 静态路由配置 实验报告 实验报告六 班级:07东方信息 姓名: 学号: 实验时间:10年5月17日 机房:9#205 组号: 机号:A 一.实验题目 静态路由配置 二. ...

  5. ASA基本配置实验报告

    网络运维 ASA基本配置 实验报告 姓名: 李军 班级: NTD1710 日期: 2017 年 12 月 29 日 实验任务 验证R1可以telnet到R2和R3,R3可以telnet到R2但不能te ...

  6. 交换机vlan配置实训心得_交换机VLAN配置实验报告.doc

    交换机VLAN配置实验报告 宁波工程学院电信学院计算机教研室 实验报告 课程名称: 网络管理实验 实验项目: 交换机VLAN配置 实验人员: 班 级: 计科10-4 指导教师: 盛啸涛 实验位置: 网 ...

  7. hadoop服务器系统设置win10,win10系统hadoop安装配置的设置技巧

    win10系统使用久了,好多网友反馈说关于对win10系统hadoop安装配置设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统hadoop安装配置进行设置,有什么好的办法去设置 ...

  8. 交换机vlan配置实训心得_交换机与VLAN的配置实验报告.doc

    交换机与VLAN的配置实验报告 交换机与VLAN的配置实验报告 实验目的 了解VLAN的作用及其分类. 了解VLAN数据帧MAC地址静态登记方式帧标签方式虚连接方式VLAN交换机的互联接入链路中继链路 ...

  9. 计算机网络交换机配实验报告,交换机基本配置实验报告

    你还在为交换机基本配置实验报告而烦恼么?不用担心,接下来是学习啦小编为大家收集的交换机基本配置实验报告,欢迎大家阅读: 交换机基本配置实验报告: <网络通讯基础>实验报告书 班级: 姓名: ...

  10. VMware上安装Hadoop安装配置与教程小白必看

    VMware上安装Hadoop安装配置与教程小白必看 安装Hadoop前准备工作 进入BIOS模式开启虚拟化 安装虚拟机VMware并安装ubuntu Hadoop安装与配置 启动终端 创建新用户并设 ...

最新文章

  1. python性能分析之line_profiler模块-耗时,效率 时间
  2. 安装Eclipse ADT插件时遇到的问题
  3. 1049 Counting Ones (30 分)【难度: 难 / 知识点: 分治 / DP】
  4. 如何查看进程的运行路径
  5. flex 会使div撑满_如何讲清楚Flex弹性盒模型?(中)
  6. .NET正则表达式使用高级技巧之替换类
  7. Tomcat6项目移到Tomcat7 提示 404 解决方案
  8. html5编程技术代码,编程技术—CSS技术
  9. nuxt打包路劲问题_简述Nuxt.js
  10. 调用C++的DLL报错 无法加载 DLL“****.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。...
  11. Jzoj3780 Magical GCD
  12. 油猴脚本(tampermonkey)推荐与下载
  13. vtk-m的安装与配置
  14. 手把手教你搞懂麦克风的技术指标
  15. html5下拉菜单清除样式,如何取消下拉菜单格式
  16. 快递电子运单上,电话应隐藏6位以上,禁止显示这些信息
  17. 手机设备唤醒计算机,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...
  18. 计算机用函数怎么不能求平均值,Excel里怎么求平均数的?函数是什么?
  19. 苹果手机用什么软件测试续航,苹果哪个系统最耗电 iOS10/11/12/13电池续航测试
  20. 代码随想录算法训练营第九天

热门文章

  1. 不能访问共享-The network location cannot be reached
  2. VMware下安装Windows ME
  3. Redhat注册方法
  4. Pulling without specifying how to reconcile divergent branches is hint: discouraged. You can squelch
  5. 纯js 写一个秒表 (精确到毫秒)
  6. 低级鼠标钩子WH MOUSE LL
  7. java drawline_Java Graphics.drawLine方法代码示例
  8. 【第一章:绪论】静态时序分析圣经翻译计划
  9. DBeaver数据库可视化工具
  10. date日期格式化 java,Java日期格式化常用方法