Hadoop(MapReduce&HDFS)

1.学习目的(前言)

  在从业了六年IT生涯里,做个实施顾问、业务顾问、BA需求分析师、项目经理,现在重新定位自己,在新公司做起了开发顾问,虽然经历过很多转折、跨度也有点大。但是抓住了机会,开始接触大数据行业了。虽然目前工作中的都是使用Hive SQL进行开发,没有涉及太多真正大数据的东西,但是觉得学习大数据还是很有必要,所以利用项目的空余时间对Hadoop进行了学习整理,内容可能对于现在的Hadoop来说已经有点过时了,但是我觉得老知识还是根基,于是便有了以下的文章,用于以后自己备忘和要学习Hadoop的小伙伴一起学习进步。

2.Hadoop核心思想

  Hadoop是在分布式服务器集群上存储海量数据并运行分布式分析应用的一个平台,其核心部件是HDFS与MapReduce

  HDFS是一个分布式文件系统:传统文件系统的硬盘寻址慢,通过引入存放文件信息的服务器Namenode和实际存放数据的服务器Datanode进行串接。对数据系统进行分布式储存读取。

  MapReduce是一个计算框架:MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算\Reduce计算)再根据任务调度器(JobTracker)对任务进行分布式计算。

3.HDFS文件系统和MapReduce计算框架在Hadoop生态圈中的应用

  HDFS负责Hadoop生态圈的数据存取工作

  MapReduce负责Hadoop生态圈的数据运算工作

  Hadoop生态圈使用HDFS文件系统进行存取数据,数据被分散的保存在集群的各个服务器上,在计算数据时使用MapReduce结合HDFS进行逻辑运算取出数据。

4.Master/Slave的架构理念

  Hadoop使用(Master/Slave)主从架构进行分布式储存和分布式计算。Master负责分配和管理任务,Slave负责实际执行任务。

  MapReduce中装载有JobTracker的服务器负责进行Master任务,装载有TaskTracker的服务器负责进行Slave任务。

  HDFS中装载有Namenode的服务器负责进行Master任务,装载有Datanode的服务器负责进行Slave任务。

5.HDFS&MapReduce的设计思路

  HDFS:

    将文件进行切块处理,再通过文件信息服务器Namenode存放切块的文件信息存放地址,实际存放数据的服务器Datanode存在切块后的数据。

    系统默认:每个片块大小为64M,以保证寻址速度;数据会写入3个Datanode中,以保证更高的容错性;

    HDFS还设计了Secondary Namenode来更新Namenode,以避免日志文件过大

    HDFS Client帮助Namenode对写入读取数据进行预处理,进行文件的分块与发送读取操作。Namenode负责为数据任务寻址

  MapReduce:

    通过JobClient生成任务运行文件,并在JobTracker进行调度指派TaskTracker完成任务。

    JobTracker分为把任务文件进行分解并派送到TaskTracker的程序JobinProgress和执行调度器的TaskScheduler

    JobinProgress把作业分解成Map计算和Reduce计算并放置到TaskTracker服务器中

6.HDFS&MapReduce组件介绍

  HDFS:

    Namenode(Master):管理着每个文件中各个块所在的数据节点的位置信息

    Namespace image:记录每个文件的存在位置信息

    Edit log:记录每个文件的位置移动信息

    Datanode(Slave):记录着服务器内所储存的数据块的列表

    Secondary Namenode:更新并备份Namenode

    HDFS Client:进行文件的分块与文件的发送读取

  MapReduce:

    JobClient:用于把用户的作业任务生成Job的运行包,并存放到HDFS中。

    JobinProgress:把Job运行包分解成MapTask和ReduceTask并存放于TaskTracker中

    JobTracker(Master):进行调度管理TaskTracker执行任务

    TaskTracker(Slave):执行分配下来的Map计算或Reduce计算任务

7.Hadoop运行机制

  HDFS:

    Namenode使用镜像文件(Namespace image)和操作日志文件(edit log)对数据进行记录。(保存在缓存和磁盘中)

    Secondary Namenode进行更新时的操作:

      1.在Namenode创建一个新的操作日志,将新的操作记录写入到新的操作日志中;

      2.将Namenode的镜像文件和操作日志拷贝到Secondary Namenode中;

      3.在Secondary Namenode中读取镜像文件到内存,并执行日志文件中的所有操作,生产新的镜像文件;

      4.把Secondary Namenode中创建的镜像文件拷贝到Namenode中;

      5.Namenode中使用新的镜像文件和操作日志替代原来的文件;

  存数据:

      1.HDFS Client对文件分块并向Namenode发送写数据请求

      2.Namenode把block信息记录下来,并返回可写入的Datanode

      3.HDFS Client向指定的Datanode传送数据

      4.传送成功后,Datanode会向Namenode和HDFS Client发送成功通知

  读数据:

      1.HDFS Client从Namenode中获取文件块的位置

      2.HDFS Client根据Namenode返回的文件信息去Datanode相关位置中读取

  MapReduce:

    通过JobClient把用户的作业任务转换成job.xml、job.jar、job.split,适合JobTracker执行的文件

      1.job.xml文件记录了Job的详细配置信息

      2.job.jar保存了用户定义的关于job的map、reduce操纵

      3.job.split保存了job任务的切片信息

    JobClient会为作业向JobTracker申请Jobid,并以Jobid命名把xml、jar、split文件放置进HDFS中

    JobinProgress会把JobClient创建的Job拷贝到JobTracker本地文件系统,并创建JobStatus和Job的mapTask、reduceTask队列来跟踪Job的状态信息。

    JobTracker默认执行一下调度法则

      1.先进先出:集群内的资源统一进行使用,执行先进队列先执行的原则。

      2.公平调度:按用户分配集群内的资源,每个用户只能在指定的资源内运行调度。

      3.队列调度:可以设置多个队列,每个队列都可以进行置顶的资源调度

    TaskTracker向JobTracker发送心跳报告及执行命令

8.MapReduce集群的配置

服务器     守护进程                 说明

server1    namenode           namenode节点

server2    jobtracker                     任务主节点

server3    secondary namenode     secondary namenode

dserver1    datanode tasktracker     数据节点

dserver2    datanode tasktracker     数据节点

dsdrver3    datanode tasktracker     数据节点

后感:

  在写这篇文章的时候,知识点不断在更新(ps:甚至大v们对同一个事情的理解也有不太一致的地方,再ps:上述文章内容完全是小粉的个人理解),甚至连文章架构也改了很多次。但是对于学习来说,我觉得这个是一件好事儿,建议也在学习hadoop的小伙伴也可以对自己的知识进行整理学习,有自己的理解。

参考网址:

MapReduce:

http://www.linuxidc.com/Linux/2014-03/99153.htm

http://blog.csdn.net/zhouleilei/article/details/21955009

http://www.aboutyun.com/thread-7778-1-1.html

http://www.tuicool.com/articles/uamYJre

http://blog.csdn.net/Androidlushangderen/article/details/41408517

HDFS:

http://www.cnblogs.com/laov/p/3434917.html

http://www.2cto.com/kf/201311/260826.html

Hadoop是什么?一句话理解的更多相关文章

  1. 一句话理解字符编码(Unicode ,UTF8,UTF16)

    Unicode和ASCII码属于同一级别的,都是字符集,字符集规定从1到这个字符集的最大范围每个序号都各表示什么意思.比如ASCII字符集中序号65表示"A". 那接下来的UTF8 ...

  2. 【repost】让你一句话理解闭包(简单易懂)

    接触javascript很久了,每次理解闭包都似是而非,最近在找Web前端的工作,所以需要把基础夯实一下. 本文是参照了joy_lee的博客 闭包 在她这篇博客的基础上以批注的形式力争把我的理解阐述出 ...

  3. 对hadoop之RPC的理解

    因为公司hadoop集群出现了一些瓶颈,在机器不增加的情况下需要进行优化,不管是存储还是处理性能,更合理的利用现有集群的资源,所以来学习了一波hadoop的rpc相关的知识和hdfs方面的知识,以及y ...

  4. hadoop各个名词的理解

    Hadoop家族的各个成员 hadoop这个词已经流行好多年了,一提到大数据就会想到hadoop,那么hadoop的作用是什么呢? 官方定义:hadoop是一个开发和运行处理大规模数据的软件平台.核心 ...

  5. Hadoop 对MapReduce的理解

    对MapReduce的理解 客户端启动一个作业 向JobTraker请求一个JobId 将资源文件复制到HDFS上,包括Jar文件,配置文件,输入划分信息等 接收作业后,进入作业队列,根据输入划分信息 ...

  6. 《一句话理解Vue核心内容》阅读笔记

    Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架. 在解释什么是渐进式框架之前,有必要了解一下什么是框架 在最初的前端开发中,我们利用JS获取HTML中的DOM元素 ...

  7. hadoop以及相关组件介绍以及个人理解

    前言 本人是由java后端转型大数据方向,目前也有近一年半时间了,不过我平时的开发平台是阿里云的Maxcompute,通过这么长时间的开发,对数据仓库也有了一定的理解,ETL这些经验还算比较丰富.但是 ...

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

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

  9. hadoop运行原理之Job运行(二) Job提交及初始化

    本篇主要介绍Job从客户端提交到JobTracker及其被初始化的过程. 以WordCount为例,以前的程序都是通过JobClient.runJob()方法来提交Job,但是现在大多用Job.wai ...

随机推荐

  1. MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

    注:该MySql系列博客仅为个人学习笔记. 同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作 ...

  2. 前端面试题之Html和CSS

    又到了毕业季,很多小伙伴们都到了找工作的时候了,好多小伙伴问我有前端的面试题么?答:没有. 呃呃… … 小伙伴本宝宝真的没有骗你们,我从毕业到现在一直在一家公司没有换过,所以手里压根没有面试题.我们公 ...

  3. Angular js 之一些简单的js操作

    1.<div ng-if()> </div> 括号里面是布尔值  如果是false那么你ng-if的那个dom就会不显示.(感觉这是angular js中最给力的一点) 一般会 ...

  4. Hibernate1

    计应134(实验班) 杨伟 Hibernate的核心接口一共有6个,分别为:Session.SessionFactory.Transaction.Query.Criteria和Configuratio ...

  5. 封装pyMysql

    #!/usr/bin/python import MySQLdb class SpiderPDO: def __init__(self): db_host = '127.0.0.1' db_user ...

  6. 手把手教你在ubuntu上安装apache和mysql和php

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  7. JSP之->初识JSP

    JSP 引用百度百科的介绍: JSP(Java Server Pages)是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP技术有点类似ASP技术,它是在 ...

  8. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  9. hihoCoder#1051

    刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己 ...

  10. js实现当前导航菜单高亮显示

    为了增加用户体验度,增加网页的易用性和美观度,往往需要把当前导航菜单以特殊方式显示,通常是高亮显示或有不同于其它菜单的背景,有两种方法可以实现,第一种是用纯css来实现,二是用js辅助css来实现,两 ...