`

HADOOP HDFS/MR计算框架

 
阅读更多
1.Hadoop两大核心: HDFS/MapReduce
  HDFS(Hadoop Distributed File System) :是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。
  MapReduce :为分布式计算框架,包含map(映射)和 reduce(归约)过程,负责在 HDFS 上进行计算。
2.Hadoop 是一个能够让用户轻松架构和使用的分布式计算的平台。用户可以轻松地在 Hadoop发布和运行处理海量数据的应用程序。其优点主要有以下几个:
 (1) 高可靠性: Hadoop 按位存储和处理数据的能力值得人们信赖。 
 (2) 高扩展性: Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以干计的节点中。
 (3) 高效性: Hadoop能够在节点之间动态地移动数据, 并保证各个节点的动态平衡,因此处理速度非常快。
 (4) 高容错性: Hadoop能够自动保存数据的多个副本, 并且能够自动将失败的任务重新分发。
 (5) 低成本: 与一体机、商用数据仓库以及 QlikView、 Yonghong Z- Suites 等数据集市相比,Hadoop 是开源的,项目的软件成本因此会大大降低。
 (6) Hadoop 带有用Java语言编写的框架,因此运行在 linux 生产平台上是非常理想的, Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。
3. NameNode 作用:
  管理文件系统的命名空间
  记录每个文件数据块在各个DataNode的位置和副本
  协调客户端对文件的访问
  记录命名空间内的改动或空间本身属性的改动
  HDFS 2.x 解决了HDFS单点NameNode故障和内存受限问题, 支持多个NameNode, 所有NameNode共享所有DataNode存储资源.
4. DataNode
  负责所在物理节点的存储管理
  一次写入,多次读取
  文件由数据块组成, 典型的块大小是64MB
5.YARN
  Hadoop 2.x 资源调度管理系统, 在Hadoop1.x中资源管理和作业管理均是由JobTracker实现的。
  作业管理由ApplicationMaster实现,资源由新增系统YARN完成。
6.HDFS设计目标
  存储非常大的文件
  采用流失的数据访问方式
  运行于商业硬件上
7.HDFS不适合的应用类型
  低延时的数据访问
  大量小文件
  多方读写, 需要任意的文件修改
  (HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)。)
8.HDFS核心概念
  8.1 Blocks
  物理磁盘中有块的概念,磁盘的物理Block是磁盘操作最小的单元,读写操作均以Block为最小单元,一般为512 Byte。
  文件系统在物理Block之上抽象了另一层概念,  文件系统Block物理磁盘Block的整数倍。通常为几KB。
  HDFS的Block块比一般单机文件系统大得多, 默认为128M。HDFS的文件被拆分成block-sized的chunk,
  chunk作为独立单元存储。比Block小的文件不会占用整个Block,只会占据实际大小
  8.2 HDFS的Block为什么这么大?
  是为了最小化查找(seek)时间,控制定位文件与传输文件所用的时间比例
  8.3 Block抽象的好处 
  block的拆分使得单个文件大小可以大于整个磁盘的容量,构成文件的Block可以分布在整个集群
  Block的抽象也简化了存储系统,对于Block,无需关注其权限,所有者等内容(这些内容都在文件级别上进行控制)。 
  Block作为容错和高可用机制中的副本单元,即以Block为单位进行复制。
9.HDFS Federation
  HDFS Federation提供了一种横向扩展NameNode的方式。在Federation模式中, 每个NameNode管理命名空间的一部分,
  例如一个NameNode管理/user目录下的文件, 另一个NameNode管理/share目录下的文件
  
10.HDFS 命令行接口
  HDFS提供了各种交互方式,例如通过Java API、HTTP、shell命令行的。命令行的交互主要通过hadoop fs来操作。例如:
  hadoop fs -copyFromLocal // 从本地复制文件到HDFS
  hadoop fs mkdir // 创建目录
  hadoop fs -ls  // 列出文件列表

  Hadoop中,文件和目录的权限类似于POSIX模型,包括读、写、执行3种权限:
  读权限(r):用于读取文件或者列出目录中的内容
  写权限(w):对于文件,就是文件的写权限。目录的写权限指在该目录下创建或者删除文件(目录)的权限。
  执行权限(x):文件没有所谓的执行权限,被忽略。对于目录,执行权限用于访问器目录下的内容。
  每个文件或目录都有owner,group,mode三个属性,owner指文件的所有者,group为权限组。
  mode由所有者权限、文件所属的组中组员的权限、非所有者非组员的权限组成。
  
  hadoop fs -ls  // 列出文件列表
  drwxr-xr-x  2 root supergroup 1410 2016-07-14 21:09 hdfs-site.xml
  返回结果类似于Unix系统下的ls命令, 第一栏为文件的mode, d表示目录, 紧接着三种权限9位。第二栏是指文件的副本数, 
  这个数量是通过dfs.replication配置, 目录使用-则表示没有副本一说。其他诸如所有者、组、更新时间、文件大小跟Unix系统中ls命令一致。
  说明, 文件权限是否开启通过dfs.permissions.enabled属性来控制,这个属性默认为false,没有打开安全限制,
  因此不会对客户端做授权校验,如果开启安全限制,会对操作文件的用户做权限校验

11.HDFS 文件系统
  Local: 本地文件系统的抽象
  HDFS:  Hadoop的分布式文件系统, 被设计用来高效的MapReduce处理 
  WebHDFS/swebhdfs: 通过HTTP协议认证读/写访问HDFS
  har: 压缩文件, 当文件多时压缩成一个大文件, 有效减少元数据的数量.
  FTP: FTP协议实现, 对文件的操作转化为ftp协议.
  Viewfs: 客户端使用mount table将文件路径映射到NameNode, 用来在客户端屏蔽多个NameNode的底层细节.
12.剖析文件写入
  客户端通过DistributedFileSystem对象调用create()新建文件,DistributedFileSystem对namenode创建一个RPC调用,
  namenode执行各种检查包括文件是否已存在及是否由权限。
  客户的写入数据时,DFSOutputStream将数据分成一个个数据包,并写入内部队列,DataStreamer处理数据队列,
  它的责任是挑选适合存储数据副本的一组datenode,并要求namenode分配新的数据块。
  这一组datanode构成一个管线,假设有三个节点,DataStreamer将数据包流式传输到管线中的第一个datanode,
  第一个datanode存储并将它发送到第二个datanode,第二个datanode存储并将它发送给第三个datanode。
  同时DFSOutputStream维护一个内部数据包队列等待datanode的收到确认回执,收到所有datanode确认信息后,
  该数据包才会从确认队列中删除。

  剖析文件读取
  DistributedFileSystem通过远程调用RPC来调用namenod,以确定文件起始快位置,对于每一个块,namenode返回存有该块副本
  的datanode地址,这些datanode根据它们与客户端的距离来排序,如果客户端本身就是一个datanode,该客户端将会从保存
  有相应数据块副本的本地datanode读取数据。
  DistributedFileSystem对象返回一个FSDataInputStream对象(支持文件定位的输入流)给客户端以便读取数据,
  FSDataInputStream类封装DFSInputStream对象,该对象管理datanode和namenode的I/O。
  客户端对这个输入流调用read()方法,存储着文件起始几个数据块的datanode地址的DFSInputStream随机连接距离
  最近的文件第一个块所在datanode。
  通过对数据流反复调用read方法,可以将数据从datanode传输到客户端,到达块末端时,DFSInputStream关闭与该datanode
  的连接,然后寻找下一个块的最佳datanode。
MAP-REDUCE
1. 分片: 
   Hadoop将MapReduce的输入数据划分等长的小数据块, 成为输入分片(input split)。Hadoop为每个分片构建一个Map任务,
   并由该任务来运行用户自定义的Map函数处理分片中的每条数据。
   一般情况下,一个合理的分片大小趋向于HDFS的一个块大小,默认是128MB,不过可以针对集群调整这个默认值,
   或在每个文件创建时指定。如果分片跨越两个数据块,那么对于任何一个HDFS节点,基本上都不可能同时存储这两个数据块,
   因此分片中的数据要通过网络传输到Map任务运行节点。
   InputSplit是一个Java类,它会计算出块中第一个完整记录的开始位置和最后一个记录的结束位置。在最后一个记录不完整的情况下,
   InputSplit 包括下一个块的位置信息和完成该记录所需的数据的字节偏移。
2. 数据本地化优化:
   Hadoop在存储有输入数据的节点上运行Map任务,可以获得最佳性能,因为它无需使用宝贵的集群带宽资源。这就是所谓的
   "数据本地化优化"。但有时候对于一个Map任务的输入分片来说,存储该分片的HDFS数据复本的所有节点可能正在运行
   其他Map任务,此时作业调度需要从某一数据块所在机架中的一个节点寻找一个空闲的Map槽(slot)来运行该map任务分片。
   非常偶然情况下,会使用其他机架中的节点运行该Map任务,这将导致机架与机架之间的网络传输。
3. MAP任务: 
   输入KEY参数为每行所在文件的偏移量,输入VALUE参数为每个内容。此步骤主要是做数据的预处理,挑选出需要处理的数据。 
   输出Key/Value。
   Map任务将输出写入本地硬盘,而非HDFS,因为Map的输出是中间结果,该中间结果由reduce任务处理后才产生最终输出结果,
   一旦作业完成,map输出结果就可以删除。
4. COMBINER: 减少MAP节点到REDUCER节点的传输数据量,而在MAP之后进行的分片内的数据计算处理
5. REDUCER: 输入参数为MAP的输出参数,对数据进行加工处理。 
   Reduce任务不具备数据本地化优势,单个reduce任务输入通常来自于所有mapper输出,排过序的map输出需要通过网络传输
   发送到运行reduce任务的节点,数据在reduce端合并,然后由用户自定义reduce函数处理。
   对于reduce输出的每个HDFS快,第一个副本存储在本地节点,其他副本出于可靠性考虑存储在其他机架的节点中。
   因此,将reduce的输出写入HDFS确实需要占用网络带宽,这与正常的HDFS管线写入的消耗一样。
6.partition分区
  reduce任务的数据量并非由输入数据的大小决定的,相反是独立指定的。
  若有多个reduce任务,每个Map任务就会针对输出进行分区(partition),即为每个reduce任务建一个分区,每个分区
  有许多key及value值,但每个key对应的key-value对记录都在同一分区中。
  分区可由用户自定义class类控制,通常用默认的哈希函数(key)来分区,很高效。
7.shuffle过程
  MapReduce确保每个reducer的输入都是按key排序的,系统执行排序、将map输出作为输入传给reducer的过程
  成为shuffle。分为Map端和Reduce端
 Map端:
  Map输出时,并不是简单将它写到磁盘,它利用缓冲方式写到内存并基于效率的考虑进行与排序,
  一旦缓冲区(默认100MB,mapreduce.task.io.sort.mb)达到阀值(默认80%,mapreduce.map.sort.spill.percent),一个
  后台线程开始把内容溢出到磁盘,溢出写过程按轮询方式将缓冲区内容写到mapreduce.cluster.local.dir属性指定目录。
  在写磁盘前,线程首先根据最终要传的reducer把数据划分相应的分区(partition)。在每个分区中,后台线程在内存中
  排序,如果有一个combiner函数,它就在排序后的输出上运行。
reduce端:
  reduce任务需要集群上若干个map任务的map输出作为分区文件,每个map任务完成时间不同,因此在每个任务完成时,
  reduce任务就开始复制其输出。随着磁盘上副本增多,后台线程会将它们合并成更大的,排好序的文件。
  复制完所有map输出后,reduce任务将合并map输出,维持其排序顺序。
  此阶段的输出直接写入HDFS文件系统。

 

分享到:
评论

相关推荐

    HadoopHDFS架构概述推荐系统框架图

    Hadoop HDFS 架构概述推荐系统框架图 Hadoop 是什么?Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题。Hadoop 通常是指一个更广泛的概念——Hadoop ...

    Hadoop hdfs文件操作,mr demo,topN demo

    在大数据处理领域,Hadoop是不可或缺的开源框架,它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。本篇文章将详细讲解Hadoop HDFS文件操作、MapReduce(MR)示例以及如何实现TopN问题。 首先...

    Hadoop之mr分布式计算机框架

    Hadoop 分布式计算框架 1.MapReduce设计理念 何为分布式计算 移动计算,而不是移动数据 2.计算机框架MR 从HDFS存储的数据/文件作为输入(MR的数据来源) 对于这些数据首先要处理成一个个片段 split 每个片段都有个map...

    hadoop分布式云平台基础视频.zip

    目录网盘文件永久链接 01_hadoop_hdfs1分布式文件...14mr分布式计算框架_理论1.mp4 15mr分布式计算框架_理论2.mp4 16mr分布式计算框架_理论3.mp4 17mr分布式计算框架_理论4.mp4 18mr分布式计算框架_理论5.mp4 ......

    MR处理HDFS日志样例

    2. **MapReduce**:MapReduce是Hadoop用于并行处理和分析存储在HDFS中的大型数据集的计算框架。它包含两个主要阶段:Map阶段和Reduce阶段。Map阶段将输入数据切分成键值对,然后对每个键进行局部处理;Reduce阶段...

    hadoop详细视频教程

    14_mr分布式计算框架_理论1 15_mr分布式计算框架_理论2 16_mr分布式计算框架_理论3 17_mr分布式计算框架_理论4 18_mr分布式计算框架_理论5 19_mr分布式计算框架_理论6 20_mr分布式计算框架_install01 21_mr分布式...

    hadoop技术内幕mr_hdfs_yarn PDF 3本全

    MapReduce是Hadoop处理大数据的主要计算框架,它借鉴了Google的MapReduce编程模型。MapReduce将大规模数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段。 1. **Map阶段**:原始数据被切分成小块(split),...

    eclipse运行mr插件hadoop-eclipse-plugin-2.6.0.jar

    Hadoop是由Apache基金会开发的一个分布式计算框架,它允许在廉价硬件上存储和处理大规模数据集。主要由两个核心组件构成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供高容错性的分布式存储,而...

    hadoop mr程序0.20之后版本所需jar包

    在MapReduce程序中,它支持与HDFS(Hadoop Distributed File System)的交互,数据输入/输出,以及节点间的通信。 2. **hadoop-mapreduce-client-core-2.0.5-alpha.jar**:这个JAR文件包含了Hadoop MapReduce客户端...

    大数据之路选择Hadoop还是MaxCompute?Hadoop开源与MaxCompute对比材料

    - **Hadoop MR**:MapReduce是Hadoop的核心计算模型。 - **MaxCompute MR**:MaxCompute提供的MapReduce计算服务。 MaxCompute的MR服务在实现上更加优化,提高了计算效率。 ##### 5.5 Hive SQL -> MaxCompute SQL ...

    Hadoop搭建及mr程序示例.docx

    Hadoop是一种开源分布式计算框架,由Apache基金会维护,它允许在廉价硬件上处理大量数据,实现了数据的分布式存储和计算。本文档将详细介绍如何搭建一个Hadoop集群,并演示如何在Windows环境下利用Eclipse开发...

    Hadoop学习笔记

    YARN将资源管理和应用程序管理分离,使得Hadoop可以支持多种计算框架,如MapReduce、Spark等。ResourceManager是YARN的全局资源调度器,接收并分配应用程序的资源请求。NodeManager是每个节点上的代理,负责管理该...

    hadoop编写MR和运行测试共12页.pdf.zip

    在这个“hadoop编写MR和运行测试共12页.pdf.zip”的压缩包中,我们可以预见到包含的内容将围绕Hadoop MapReduce(MR)的编程和测试展开,这是Hadoop生态系统中的关键部分。 MapReduce是Hadoop处理大规模数据的主要...

    hadoopmr课程的实现基于MR的贝叶斯分类器.zip

    在IT行业中,Hadoop是一个广泛使用的分布式计算框架,尤其在处理大数据分析任务时表现突出。本课程关注的是如何在Hadoop MapReduce(MR)平台上实现一个基于MR的贝叶斯分类器,这是机器学习领域中一种简单而有效的...

    Hadoop从入门到上手企业开发

    020 结合WordCount实例讲解Hadoop的数据存储和数据计算 021 Hadoop 五大服务与配置文件中的对应关系 022 分析Hadoop 三种启动停止方式的Shell 脚本 023 去除警告【Warning$HADOOP HOME is deprecated。】 024 Hadoop...

    Hadoop在相似度计算中的优化_林述民

    Hadoop作为一种分布式计算框架,在处理大规模数据集方面表现出色。本文将探讨Hadoop如何应用于相似度计算,并通过具体的案例分析来展示其优化策略。 #### 二、背景与动机 在互联网广告行业中,为了防止广告作弊,...

    数据科学导论实验报告 实验1:常用Linux操作和 Hadoop操作

    数据科学领域常常涉及对大规模数据的处理,而这通常需要对操作系统和分布式计算框架有深入理解。本实验报告主要涵盖了两个核心部分:Linux操作系统的基本操作和Hadoop分布式文件系统的使用。 在Linux部分,实验旨在...

    MR.rar_hadoop_mapReduce_paidabk

    4. **Hadoop相关JAR包**:描述中提到的“hadoop相关jar包”可能包括Hadoop Common、Hadoop HDFS、Hadoop MapReduce Client等组件的JAR文件,这些是运行MapReduce作业所必需的依赖库,它们提供了Hadoop框架的API和...

    Windows依赖:hadoop-3.1.0

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。本文将深入探讨Windows环境下使用Hadoop 3.1.0版本的相关知识点,包括Hadoop的概述、HDFS Java API的配置以及如何在Windows上运行...

Global site tag (gtag.js) - Google Analytics