深入理解hadoop(一)
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 上。这种文件切割后存储的过程是对用户透明的。
)`DIUFBA~3S[T.png)
)`DIUFBA~3S[T.png)
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(一)的更多相关文章
- 深入理解Hadoop之HDFS架构
Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成本硬件上 ...
- 深入理解hadoop数据倾斜
深入理解hadoop之数据倾斜 1.什么是数据倾斜 我们在用map /reduce程序执行时,有时候会发现reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理 ...
- 深入理解hadoop之HDFS
深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...
- 深入理解hadoop之机架感知
深入理解hadoop之机架感知 机架感知 hadoop的replication为3,机架感知的策略为: 第一个block副本放在和client所在的datanode里(如果client不在集群范围内, ...
- 正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构
转载:http://blog.csdn.net/HADOOP_83425744/article/details/49560583 http://bigdatadecode.club/MapReduce ...
- 深入理解hadoop之排序
MapReduce的排序是默认按照Key排序的,也就是说输出的时候,key会按照大小或字典顺序来输出,比如一个简单的wordcount,出现的结果也会是左侧的字母按照字典顺序排列.下面我们主要聊聊面试 ...
- 理解hadoop的Map-Reduce数据流(data flow)
http://blog.csdn.net/yclzh0522/article/details/6859778 Map-Reduce的处理过程主要涉及以下四个部分: 客户端Client:用于提交Map- ...
- 深入理解Hadoop集群和网络
导读:云计算和Hadoop中网络是讨论得相对比较少的领域.本文原文由Dell企业技术专家Brad Hedlund撰写,他曾在思科工作多年,专长是数据中心.云网络等.文章素材基于作者自己的研究.实验和C ...
- 理解Hadoop脚本hadoop-2.5.0/bin/hadoop
1 #!/usr/bin/env bash 此处为什么不是 #!/bin/bash ? 考虑到程序的可移植性,env的作用就是为了找到正确的脚本解释器(这里就是bash),在不同的Linux ...
- 简单理解Hadoop架构原理
一.前奏 Hadoop是目前大数据领域最主流的一套技术体系,包含了多种技术. 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 有些朋友可能 ...
随机推荐
- 后缀数组 (Suffix Array) 学习笔记
\(\\\) 定义 介绍一些写法和数组的含义,首先要知道 字典序 . \(len\):字符串长度 \(s\):字符串数组,我们的字符串存储在 \(s[0]...s[len-1]\) 中. \(suff ...
- WIN7 x64下java 8的环境变量配置
Oracle官网下载JDK进行安装:我下载的是Java 8 JDK,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...
- 短视频SDK用于旅游行业
超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...
- 一起来学SpringBoot(十七)优雅的参数校验
参数校验在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动方法内代码显得冗长每次要看哪些参数 ...
- 关于TreeView控件的TreeNodeCheckChanged事件无法回发处理
1.在后台设置属性 TreeView1.Attributes.Add("onclick", "postBackByObject()"); 2.在前台页面中间添加 ...
- vue+webpack静态资源路径引用
处理静态资产 你可能已经注意到,在项目结构中我们有两个静态资产目录:src/assets和static/.他们之间有什么区别? 要回答这个问题,我们首先需要了解Webpack如何处理静态资产.在*.v ...
- IIS添加更改默认页面
服务器中打开IIS管理器,选择默认文档,双击即可进入编辑:
- vue 接口统一管理
在外部创建一个API文件夹,然后创建一个API.js 例如 const filmbanner = 'api/billboard/home?__t=1498823077473'; const film ...
- 2018 CCPC 桂林站(upc复现赛)补题
2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...
- linux性能优化cpu-01性能指标
学习性能优化的第一步,一定要了解性能指标. 性能指标是什么? 当我们看到性能指标时一定先想到“高并发”.“响应快”,这个两个指标也对应着性能优化的两个核心指标—— “吞吐率”和“低延迟”. 这两个指标 ...