深入理解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(分布式计算系统),等等. 有些朋友可能 ...
随机推荐
- hihocoder offer收割编程练习赛12 C 矩形分割
思路: 模拟,深搜. 实现: #include <iostream> #include <cstdio> #include <string> using names ...
- ES3之bind方法的实现模拟
扩展Function原型方法,此处用myBind来模拟bind实现 Function.prototype.myBind = function(o /*,args*/){ //闭包无法获取t ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- 掌握Spark机器学习库-07-最小二乘法
1)最小化残差平方和 2)原理,推导过程 3)例子
- Sass的的使用一
sass -v 检测是否安装 Sass 成功 gem update sass 更新 Sass gem uninstall sass 删除/卸载 Sass 的编译有多种方法: 1.命令编译2.GUI工具 ...
- (转)淘淘商城系列——VMware添加已配置好的虚拟机
http://blog.csdn.net/yerenyuan_pku/article/details/72802323 我们有时候会碰到虚拟机环境搭建特别麻烦,很容易出错的问题,而这时我们又刚好有别人 ...
- Jmeter之断言——检查点
Jmeter里的断言相当于lr中的检查点.用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致. 使用断言的目的:在request的返回层面增加一层判断机制:因为re ...
- PHP 中 include() 与 require() 的区别说明
引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); . ...
- sklearn.metrics.roc_curve
官方网址:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics 首先认识单词:metrics: ['mɛ ...
- No-2.注释
01. 注释的作用 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释) 以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到 ...