1 Hadoop是什么?

  Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据;另一篇论文是“Mapreduce:Simplified Data Processing on Large Clusters”,介绍如何对分布式大规模数据进行处理。Doug Cutting在这两篇论文的启发下,基于OSS(Open Source software)的思想实现了这两篇论文中的原理,从而Hadoop诞生了。

  Hadoop是一种开源的适合大数据的分布式存储和处理的平台。作为一种大规模分布式数据处理平台,Hadoop已成为许多程序员的一项重要技能。

2 Hadoop能够做什么?

  以下内容有博友王路情整理。

  大数据时代已经到来,给我们的生活、工作、思维方式都带来变革。如何寻求大数据后面的价值,既是机遇又是挑战。不管是金融数据、还是电商数据、又还是社交数据、游戏数据… … 这些数据的规模、结构、增长的速度都给传统数据存储和处理技术带来巨大的考验。幸运的是,Hadoop的诞生和所构建成的生态系统给大数据的存储、处理和分析带来了曙光。

  不管是国外的著名公司Google、Yahoo!、微软、亚马逊、 EBay、FaceBook、Twitter、LinkedIn等和初创公司Cloudera、Hortonworks等,又还是国内的著名公司中国移动、阿里巴巴、华为、腾讯、百度、网易、京东商城等,都在使用Hadoop及相关技术解决大规模化数据问题,以满足公司需求和创造商业价值。

  例如:Yahoo! 的垃圾邮件识别和过滤、用户特征建模系统;Amazon.com(亚马逊)的协同过滤推荐系统;Facebook的Web日志分析;Twitter、LinkedIn的人脉寻找系统;淘宝商品推荐系统、淘宝搜索中的自定义筛选功能……这些应用都使用到Hadoop及其相关技术。

  “Hadoop能做什么?” ,概括如下:

  1)搜索引擎:这也正是Doug Cutting设计Hadoop的初衷,为了针对大规模的网页快速建立索引;

  2)大数据存储:利用Hadoop的分布式存储能力,例如数据备份、数据仓库等;

  3)大数据处理:利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等;

  4)科学研究:Hadoop是一种分布式的开源框架,对于分布式系统有很大程度地参考价值。

3 Hadoop的三种模式

  Hadoop有三种不同的模式操作,分别为单机模式、伪分布模式和全分布模式。每种模式的详细介绍以及单机模式的安装请阅读我之前的博客:[Hadoop] 在Ubuntu系统上一步步搭建Hadoop(单机模式),伪分布式模式和全分布式模式的相关操作请见王路情的博客

4 Hadoop核心之分布式文件系统HDFS

  Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Hadoop的核心模块之一,它主要解决Hadoop的大数据存储问题,其思想来源与Google的文件系统GFS。HDFS的主要特点:

  • 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
  • 运行在廉价的机器上。
  • 适合大数据的处理。HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。

  HDFS中的两个重要角色:

  [Namenode]

  1)管理文件系统的命名空间。

  2)记录 每个文件数据快在各个Datanode上的位置和副本信息。

  3)协调客户端对文件的访问。

  4)记录命名空间内的改动或者空间本省属性的改动。

  5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。

  从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的作用。

  [Datanode]

  1)负责所在物理节点的存储管理。

  2)一次写入,多次读取(不修改)。

  3)文件由数据库组成,一般情况下,数据块的大小为64MB。

  4)数据尽量散步到各个节点。

  从社会学的角度来看,Datanode是HDFS的工作者,发挥按着Namenode的命令干活,并且把干活的进展和问题反馈到Namenode的作用。

  客户端如何访问HDFS中一个文件呢?具体流程如下:

  1)首先从Namenode获得组成这个文件的数据块位置列表。

  2)接下来根据位置列表知道存储数据块的Datanode。

  3)最后访问Datanode获取数据。

  注意:Namenode并不参与数据实际传输。

  数据存储系统,数据存储的可靠性至关重要。HDFS是如何保证其可靠性呢?它主要采用如下机理:

  1)冗余副本策略,即所有数据都有副本,副本的数目可以在hdfs-site.xml中设置相应的复制因子。

  2)机架策略,即HDFS的“机架感知”,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率。

  3)心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,若是Datanode失效造成副本数量下降,并且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行重新复制。

  4)安全模式,Namenode启动时会先经过一个“安全模式”阶段。

  5)校验和,客户端获取数据通过检查校验和,发现数据块是否损坏,从而确定是否要读取副本。

  6)回收站,删除文件,会先到回收站/trash,其里面文件可以快速回复。

  7)元数据保护,映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本。

  8)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。

  如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。

  NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

  SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

  DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

  热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

  冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

  fsimage:元数据镜像文件(文件系统的目录树。)

  edits:元数据的操作日志(针对文件系统做的修改操作记录)

  namenode内存中存储的是=fsimage+edits。

  SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。

  有关HDFS详细的写操作和读操作请见:老魏的博客

  有关HDFS的优缺点介绍请见:虾皮工作室。 

  有一个关于HDFS工作原理的漫画版本,请见这里:HDFS漫画详解

5 Hadoop核心之MapReduce

  上部分提到Hadoop存储大数据的核心模块HDFS,这一部分介绍Hadoop处理大数据部分的核心模块MapReduce。

  Apache Foundation对MapReduce的介绍:“Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.”

  由此可知,Hadoop核心之MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。因此,对于MapReduce,可以简洁地认为,它是一个软件框架,海量数据是它的“菜”,它在大规模集群上以一种可靠且容错的方式并行地“烹饪这道菜”。

  MapReduce主要是用于解决Hadoop大数据处理的。所谓大数据处理,即以价值为导向,对大数据加工、挖掘和优化等各种处理。

  MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。

  MapReduce的工作机制如图所示:

  MapReduce的整个工作过程如上图所示,它包含如下4个独立的实体:

  1)客户端,用来提交MapReduce作业。

  2)jobtracker,用来协调作业的运行。

  3)tasktracker,用来处理作业划分后的任务。

  4)HDFS,用来在其它实体间共享作业文件。

  MapReduce整个工作过程有序地包含如下工作环节:

  1)作业的提交

  2)作业的初始化

  3)任务的分配

  4)任务的执行

  5)进程和状态的更新

  6)作业的完成

  有关MapReduce的详细工作细节,请见:《Hadoop权威指南(第二版)》第六章MapReduce工作机制。 

6 参考内容

  [1] The Google File System

  [2] MapReduce:Simplified Data Processing on Large Clusters

  [3] Hadoop in Action

  [4] 王路情博客

  [5] 《Hadoop权威指南(第二版)》

[Hadoop] Hadoop学习笔记之Hadoop基础的更多相关文章

  1. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  2. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  3. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  4. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  5. [转帖]hadoop学习笔记:hadoop文件系统浅析

    hadoop学习笔记:hadoop文件系统浅析 https://www.cnblogs.com/sharpxiajun/archive/2013/06/15/3137765.html 1.什么是分布式 ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  8. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  9. 「学习笔记」字符串基础:Hash,KMP与Trie

    「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...

  10. Hadoop入门学习笔记(一)

    Week2 学习笔记 Hadoop核心组件 Hadoop HDFS(分布式文件存储系统):解决海量数据存储 Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度 Hadoop Map ...

随机推荐

  1. WPFTookit Chart 高级进阶

    数据源增加SeriesSource 使用方式 <Charting:Chart x:Name="chart" Helper:ChartHelper.DependentValue ...

  2. MySql错误代码1045的解决方案

    错误代码 1045Access denied for user 'root'@'localhost' (using password:YES) 解决办法是重新设置root用户密码,在Windows平台 ...

  3. BZOJ1878: [SDOI2009]HH的项链[树状数组 离线]

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3486  Solved: 1738[Submit][Statu ...

  4. 深入理解Java之泛型

    原文出处: absfree 1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过 ...

  5. scp 上传文件到多个服务器节点

    参考:scp批量上传文件到多台机器上(升级版) 实测,代码可运行. 1.如果遇到syntax error near unexpected token问题,基本是由于windows环境下编写的shell ...

  6. 开源任务管理平台TaskManagerV2.0介绍及升级说明

    上一篇开源任务管理平台TaskManager介绍发布后,有网友联系我看看能不能做个后台管理界面,方便管理系统中所有的任务.由于时间和技术问题1.0版本的时候,新增了一个3分钟读取配置文件动态修改任务的 ...

  7. LeetCode-62-Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  8. mysql Workbench 执行删除命令

    SET SQL_SAFE_UPDATES = 0;delete from table1; SET SQL_SAFE_UPDATES = 1;

  9. poi导出的excel的数字小数位过多?

    最近在使用Apache的POI组件对Excel进行操作,在对excel导出的时候,导出的数字本来只有两位小数,得到的结果就变成了很多位小数.如下面的图所示: 虽然对单元格使用了setCellStyle ...

  10. 【bzoj4517】 Sdoi2016—排列计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=4517 (题目链接) 题意 求n个数中正好m个数位置不变的排列数. Solution $${错排公式: ...