hadoop 前世今生 

  hadoop最早起源于开源收缩引擎nutch,由dong cutting 贡献,但由于nutch最初的设计不能解决数10亿级别的文件存储和索引而遇到了严重的可扩展性问题,直到2003年google发表了分布式文件系统(GFS)的论文。nutch很快便根据论文实现了NDFS,2004年google 发表了分布式计算框架MapReduce的论文,nutch的开发人员又完成了一个mapReduce 的开源实现,由于mapReduce 和NDFS不仅适用于收索领域,项目组把他移出了nutch,成立了hadoop。

hadoop HDFS

  HDFS 是一个具有高度容错性的分布式文件系统,它能提供高吞吐量的数据访问,HDFS 的架构如图 2-4 所示,总体上采用了 master/slave 架构,主要由以下几个组件组成 :Client、 NameNode、 Secondary NameNode 和 DataNode。下面分别对这几个组件进行介绍。

(1)Client

  Client(代表用户)通过与 NameNode 和 DataNode 交互访问 HDFS 中的文件。Client提供了一个类似 POSIX 的文件系统接口供用户调用。

(2)NameNode

  整个 Hadoop 集群中只有一个 NameNode。它是整个系统的“总管” ,负责管理 HDFS的目录树和相关的文件元数据信息。这些信息是以“fsimage” (HDFS 元数据镜像文件)和 “editlog” (HDFS 文件改动日志)两个文件 形式存放在本地磁盘,当 HDFS 重启时重新构造出来的。此外,NameNode 还负责监控各个 DataNode 的健康状态,一旦发现某个DataNode 宕掉,则将该 DataNode 移出 HDFS 并重新备份其上面的数据。

(3)Secondary NameNode

  Secondary NameNode 最重要的任务并不是为 NameNode 元数据进行热备份,而是定期合并 fsimage 和 edits 日志,并传输给 NameNode。这里需要注意的是,为了减小 NameNode压力,NameNode 自己并不会合并 fsimage 和 edits,并将文件存储到磁盘上,而是交由Secondary NameNode 完成。

(4)DataNode

  一般而言,每个 Slave 节点上安装一个 DataNode,它负责实际的数据存储,并将数据信息定期汇报给 NameNode。DataNode 以固定大小的 block 为基本单位组织文件内容,默认情况下 block 大小为 64MB。当用户上传一个大的文件到 HDFS 上时,该文件会被切分成若干个 block,分别存储到不同的 DataNode ;同时,为了保证数据可靠,会将同一个 block以流水线方式写到若干个(默认是 3,该参数可配置)不同的 DataNode 上。这种文件切割后存储的过程是对用户透明的。

Hadoop MapReduce 

  hadoop mapReduce  的主要设计思想包括简化编程接口、高扩展性、提高系统容错性等,其对外提供了5个标准的可编程接口,InputFormat,Mapper,Partitioner,Reducer,OutputFormat。

  一、mapReduce 编程实例

  mapReduce 能解决的问题往往都有一个共同特征,这类问题能被分解成子任务并行执行,比如top(K) 问题,比如从海量日志中统计词频最高的词,由两个mapReduce完成,一个完成完成分词,一个完成统计。

  二、架构设计  

  Hadoop MapReduce 架构也采用了 Master/Slave(M/S)架构,具体如图 2-5所示。它主要由以下几个组件组成 :Client、JobTracker、 TaskTracker 和 Task。下面分别对这几个组件进行介绍。

  

  三、生命周期

    Hadoop MapReduce处理的数据一般位于底层的分布式文件系统之中,该系统往往将文件分成若干的block存储在不同的节点上。默认情况下,每个task只处理一个block。MapReduce 主要由4个组件组成,分别是Client、JobTracker、Task、TaskTracker,一个MapReduce作业的运行周期是用户通过client将作业提交到jobTracker上,jobTracker会启动若干个task进行监控和调度,而task的运行环境准备和资源消耗情况则是由taskTracker负责,比如启动单独的jvm保障task运行资源的隔离性,而task的执行进度也是由task先汇报给taskTracker 再由taskTracker 通过RPC汇报给jobTracker的。TaskTracker 周期性地通过 Heartbeat 向 JobTracker 汇报本节点的资源使用情况,一旦出现空闲资源,JobTracker 会按照一定的策略选择一个合适的任务使用该空闲资源,这由任务调度器完成。任务调度器是一个可插拔的独立模块,且为双层架构,即首先选择作业,然后从该作业中选择任务,其中,选择任务时需要重点考虑数据本地性。此外,JobTracker 跟踪作业的整个运行过程,并为作业的成功运行提供全方位的保障。首先,TaskTracker 或者Task 失败时,转移计算任务 ;其次,当某个 Task 执行进度远落后于同一作业的其他 Task 时,为之启动一个相同 Task,并选取计算快的 Task 结果作为最终结果。

深入理解hadoop(一)的更多相关文章

  1. 深入理解Hadoop之HDFS架构

    Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成本硬件上 ...

  2. 深入理解hadoop数据倾斜

    深入理解hadoop之数据倾斜 1.什么是数据倾斜 我们在用map /reduce程序执行时,有时候会发现reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理 ...

  3. 深入理解hadoop之HDFS

    深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...

  4. 深入理解hadoop之机架感知

    深入理解hadoop之机架感知 机架感知 hadoop的replication为3,机架感知的策略为: 第一个block副本放在和client所在的datanode里(如果client不在集群范围内, ...

  5. 正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构

    转载:http://blog.csdn.net/HADOOP_83425744/article/details/49560583 http://bigdatadecode.club/MapReduce ...

  6. 深入理解hadoop之排序

    MapReduce的排序是默认按照Key排序的,也就是说输出的时候,key会按照大小或字典顺序来输出,比如一个简单的wordcount,出现的结果也会是左侧的字母按照字典顺序排列.下面我们主要聊聊面试 ...

  7. 理解hadoop的Map-Reduce数据流(data flow)

    http://blog.csdn.net/yclzh0522/article/details/6859778 Map-Reduce的处理过程主要涉及以下四个部分: 客户端Client:用于提交Map- ...

  8. 深入理解Hadoop集群和网络

    导读:云计算和Hadoop中网络是讨论得相对比较少的领域.本文原文由Dell企业技术专家Brad Hedlund撰写,他曾在思科工作多年,专长是数据中心.云网络等.文章素材基于作者自己的研究.实验和C ...

  9. 理解Hadoop脚本hadoop-2.5.0/bin/hadoop

    1 #!/usr/bin/env bash    此处为什么不是  #!/bin/bash  ? 考虑到程序的可移植性,env的作用就是为了找到正确的脚本解释器(这里就是bash),在不同的Linux ...

  10. 简单理解Hadoop架构原理

    一.前奏 Hadoop是目前大数据领域最主流的一套技术体系,包含了多种技术. 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 有些朋友可能 ...

随机推荐

  1. git创建分支及日常使用

    克隆代码 git clone https://github.com/master-dev.git 查看所有分支 git branch --all # 默认只有master分支,所以会看到如下两个分支 ...

  2. spring.net应用

    经过一段时间的调试,终于把spring.net中关于aop的方面给做个了一个比较完整的Demo.包含异常日志和性能日志.spring.net和log4net配置. http://files.cnblo ...

  3. SQL Server 零散笔记

    排序显示行号 select Row_Number() over(order by Code) as RowNumber,ID,Code,Name from CBO_ItemMaster 不排序显示行号 ...

  4. jquery日期控件+时分秒

    因为项目需要,一些时间上的查询要精确的时分.先看下效果图吧. 所需要的js 跟css 文件 jsp://特别注意引入的先后顺序 <link rel="stylesheet" ...

  5. connection timeout 和command timeout

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种: ''' 当从连接池获取一个连接时,碰到超 ...

  6. (转)淘淘商城系列——使用maven tomcat插件启动聚合工程

    http://blog.csdn.net/yerenyuan_pku/article/details/72672389 上文我们一起学习了如何使用maven tomcat插件来启动web工程,本文我们 ...

  7. Go语言 之产生随机数

    package main import ( "fmt" "math/rand" "strconv" "time" ) f ...

  8. iOS Development Sites

    iOS Development Sites   学习iOS开发有一段时间了,虽然还处于迷茫期,但相比以前的小白痴状态,现在还是蛮有改观的.期间接触了一些很好的网站和博客,现在摘录下来,就当建个索引,没 ...

  9. React入门介绍(2)- React Component-React组件

    React Component-React组件 允许用户自由封装组件是React非常突出的特性,用户可将自己创建的组件像普通的HTML标签一样插入页面,React.CreateClass方法就是用来创 ...

  10. mysql通配符进行模糊查询

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...