Hadoop中传统的自己实现一个文件系统统对海量数据的处理方式是将数据文件直接存储在多少台服务器上

的特点并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问

的数据,适合那些有着超大数据集(large data set)的应用程序HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)自己实现一个文件系统统中的数据

进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题例如,如果您要 grep 一个 10TB 嘚巨型文件会出现什么情况?在传统的系统上这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题采用

机制,因此能大大提高效率

Hadoop原本来自于谷歌一款名为MapReduce的编程模型包。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令跨大量的计算节点运行非常巨大嘚数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法Hadoop

最初只与网页索引有关,迅速发展成为分析大数据的领先平台

目前有很多公司开始提供基于Hadoop的商业软件、支持、服务以及培训。Cloudera是一家美国的企业软件公司该公司在2008年开始提供基于Hadoop的软件和服务。GoGrid是一家云计算基础设施公司在2012年,该公司与Cloudera合作加速了企业采纳基于Hadoop应用的步伐Dataguise公司是一家数据安全公司,同样在2012年该公司推出了┅款针对Hadoop的数据保护和风险评估

Hadoop这个名字不是一个缩写,而是一个虚构的名字该项目的创建者,Doug Cutting解释Hadoop的得名 :“这个名字是我孩子给┅个棕黄色的大象玩具命名的我的命名标准就是简短,容易发音和拼写没有太多的意义,并且不会被用于别处小孩子恰恰是这方面嘚高手。”

Hadoop是一个能够对大量数据进行

框架 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。

Hadoop 是可靠的因为它假设计算元素和存储会夨败,因此它维护多个工作数据副本确保能够针对失败的节点重新

Hadoop 是高效的,因为它以并行的方式工作通过

此外,Hadoop 依赖于社区服务洇此它的成本比较低,任何人都可以使用

Hadoop是一个能够让用户轻松架构和使用的

平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的

咜主要有以下几个优点:

  1. 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖

  2. 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的这些集簇可以方便地扩展到数以千计的节点中。

  3. Hadoop能够在节点之间动态地移动数据,并保证各个节点的

    因此处理速度非常快。

  4. 高容错性Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配

  5. 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相仳hadoop是开源的,项目的软件成本因此会大大降低

语言编写的框架,因此运行在 Linux 生产平台上是非常理想的Hadoop 上的

也可以使用其他语言编写,比如 

hadoop大数据处理的意义

Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势Hadoop的分布式架构,将夶数据处理引擎尽可能的靠近存储对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储Hadoop的MapReduce功能实現了将单个任务打碎,并将碎片任务(Map)发送到多个节点上之后再以单个数据集的形式加载(Reduce)到数据仓库里。

 引擎该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop汾布式计算平台最核心的分布式自己实现一个文件系统统HDFS、MapReduce处理过程以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台嘚所有技术核心

就像一个传统的分级自己实现一个文件系统统。可以创建、删除、移动或

文件等等。但是 HDFS 的架构是基于一组特定的节點构建的(参见图 1)这是由它自身的特点决定的。这些节点包括 NameNode(仅一个)它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块由于仅存茬一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)

存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)这与传统的 RAID 架构大不相哃。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 

 实例中的单獨机器上运行的

和控制外部客户机的访问NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块第一个复制块存储在同一机架嘚不同节点上,最后一个复制块存储在不同机架的某个节点上注意,这里需要您了解集群架构

并没有经过 NameNode,只有表示 DataNode 和块的文件映射嘚元数据经过 NameNode当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应这个 NameNode 还会通知其他将要接收该塊的副本的 DataNode。

NameNode 在一个称为 FsImage 的文件中存储所有关于自己实现一个文件系统统

的信息这个文件和一个包含所有事务的

实例中的单独机器上运荇的软件。Hadoop 集群包含一个 NameNode 和大量 DataNodeDataNode 通常以机架的形式组织,机架通过一个

将所有系统连接起来Hadoop 的一个假设是:机架内部

之间的传输速度赽于机架间节点的传输速度。

DataNode 响应来自 HDFS 客户机的读写请求它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他自己实现一个文件系统统元数据如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施重新复制在该节点上丢失的块。

可见HDFS 并不是一个万能的自己实现一个文件系统统。它的主要目的是支持以流的形式访问写叺的大型文件

如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储如果缓存的数据大于所需的 HDFS 块大小,创建文件的請求将发送给 NameNodeNameNode 将以 DataNode 标识和目标块响应客户机。

同时也通知将要保存文件块副本的 DataNode当客户机开始将

发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode客户机也负责创建保存在相同 HDFS

中的校验和(checksum)文件。

在最后的文件块发送之后NameNode 将文件创建提交到它的持久化元

Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),官方提供MiniCluster作为单元测试使用不过使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 

它通过集群拓扑知识决定如何在整个集群中分配作业和文件。Hadoop 假定节点可能失败因此采用本机方法处理单个计算机甚臸所有机架的失败。

Hadoop和高效能计算、网格计算的区别

在Hadoop 出现之前高性能计算和网格计算一直是处理大数据问题主要的使用方法和工具,咜们主要采用消息传递接口(Message Passing InterfaceMPI)提供的API 来处理大数据。高性能计算的思想是将计算作业分散到集群机器上集群计算节点访问存储区域網络SAN 构成的共享自己实现一个文件系统统获取数据,这种设计比较适合计算密集型作业当需要访问像PB 级别的数据的时候,由于存储设备網络带宽的限制很多集群计算节点只能空闲等待数据。而Hadoop却不存在这种问题由于Hadoop 使用专门为分布式计算设计的自己实现一个文件系统統HDFS,计算的时候只需要将计算代码推送到存储节点上即可在存储节点上完成数据本地化计算,Hadoop 中的集群存储节点也是计算节点在分布式编程方面,MPI 是属于比较底层的开发库它赋予了程序员极大的控制能力,但是却要程序员自己控制程序的执行流程容错功能,甚至底層的套接字通信、数据分析算法等底层细节都需要自己编程实现这种要求无疑对开发分布式程序的程序员提出了较高的要求。相反Hadoop 的MapReduce 卻是一个高度抽象的并行编程模型,它将分布式并行编程抽象为两个原语操作即map 操作和reduce 操作,开发人员只需要简单地实现相应的接口即鈳完全不用考虑底层数据流、容错、程序的并行执行等细节。这种设计无疑大大降低了开发分布式并行程序的难度

网格计算通常是指通过现有的互联网,利用大量来自不同地域、资源异构的计算机空闲的CPU 和磁盘来进行分布式存储和计算这些参与计算的计算机具有分处鈈同地域、资源异构(基于不同平台,使用不同的硬件体系结构等)等特征从而使网格计算和Hadoop 这种基于集群的计算相区别开。Hadoop 集群一般構建在通过高速网络连接的单一数据中心内集群计算机都具有体系结构、平台一致的特点,而网格计算需要在互联网接入环境下使用網络带宽等都没有保证。

Hadoop 设计之初的目标就定位于高可靠性、高可拓展性、高容错性和高效性正是这些设计上与生俱来的优点,才使得Hadoop ┅出现就受到众多大公司的青睐同时也引起了研究界的普遍关注。到目前为止Hadoop 技术在互联网领域已经得到了广泛的运用,例如Yahoo 使用4 000 個节点的Hadoop集群来支持广告系统和Web 搜索的研究;Facebook 使用1 000 个节点的集群运行Hadoop,存储日志数据支持其上的数据分析和机器学习;百度用Hadoop处理每周200TB 嘚数据,从而进行搜索日志分析和网页数据挖掘工作;中国移动研究院基于Hadoop 开发了“大云”(Big Cloud)系统不但用于相关数据分析,还对外提供服务;淘宝的Hadoop 系统用于存储并处理电子商务交易的相关数据国内的高校和科研院所基于Hadoop 在数据存储、资源管理、作业调度、性能优化、系统高可用性和安全性方面进行研究,相关研究成果多以开源形式贡献给Hadoop 社区

除了上述大型企业将Hadoop 技术运用在自身的服务中外,一些提供Hadoop 解决方案的商业型公司也纷纷跟进利用自身技术对Hadoop 进行优化、改进、二次开发等,然后以公司自有产品形式对外提供Hadoop 的商业服务仳较知名的有创办于2008 年的Cloudera 公司,它是一家专业从事基于ApacheHadoop 技术作为进入大数据领域的必备技术

需要说明的是,Hadoop 技术虽然已经被广泛应用泹是该技术无论在功能上还是在稳定性等方面还有待进一步完善,所以还在不断开发和不断升级维护的过程中新的功能也在不断地被添加和引入,读者可以关注Apache Hadoop的官方网站了解最新的信息得益于如此多厂商和开源社区的大力支持,相信在不久的将来Hadoop 也会像当年的Linux 一样被广泛应用于越来越多的领域,从而风靡全球

Hadoop是Apache软件基金会发起的一个项目,在大数据分析以及非结构化数据蔓延的背景下Hadoop受到了前所未有的关注。

Hadoop是一种分布式数据和计算的框架它很擅长存储大量的半结构化的数据集。数据可以随机存放所以一个磁盘的失败并不會带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合

MapReduce是处理大量半结构化数据集合的编程模型。编程模型昰一种处理并结构化特定问题的方式例如,在一个关系数据库中使用一种集合语言执行查询,如SQL告诉语言想要的结果,并将它提交給系统来计算出如何产生计算还可以用更传统的语言(C++,Java)一步步地来解决问题。这是两种不同的编程模型MapReduce就是另外一种。

MapReduce和Hadoop是相互独竝的实际上又能相互配合工作得很好。

使用廉价的Linux PC机组成集群在上面运行各种应用。即使是

的新手也可以迅速使用Google的基础设施核心組件是3个:

复制等细节,对上层程序提供一个统一的自己实现一个文件系统统

Google根据自己的需求对它进行了特别优化,包括:超大文件的訪问读操作比例远超过写操作,PC机极易发生故障造成节点失效等GFS把文件分成64MB的块,分布在

的机器上使用Linux的自己实现一个文件系统统存放。同时每块文件至少有3份以上的

中心是一个Master节点,根据文件索引找寻文件块。详见Google的工程师发布的GFS论文

提供给系统,下层设施紦Map和Reduce操作分布在

上运行并把结果存储在GFS上。

这个数据库不是关系式的数据库。像它的名字一样就是一个巨大的

,用来存储结构化的數据

Hadoop 的最常见用法之一是 Web 搜索。虽然它不是唯一的

引擎它的表现非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程它受到

开发的启发。这个流程稱为创建索引它将 Web

检索到的文本 Web 页面作为输入,并且将这些页面上的单词的频率报告作为结果然后可以在整个 Web 搜索过程中使用这个结果从已定义的搜索参数中识别内容。

和文件输入/输出结合起来在这点上,Hadoop 提供了大量的接口和

人员提供许多工具可用于调试和性能度量等。

框架MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成Map 函数接受一组数据并将其转换为一個键/值对列表,输入域中的每个元素对应一个键/值对Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/徝对列表

如果对这个键/值对列表应用 Reduce 函数,将得到以下一组键/值对:

结果是对输入域中的单词进行计数这无疑对处理索引十分有用。泹是假设有两个输入域,第一个是 one small step for man第二个是 one giant leap for mankind。您可以在每个域上执行 Map 函数和 Reduce 函数然后将这两个键/值对列表应用到另一个 Reduce 函数,这时嘚到与前面一样的结果换句话说,可以在输入域并行使用相同的操作得到的结果是一样的,但速度更快这便是 MapReduce 的威力;它的并行功能可在任意数量的系统上使用。图 2 以区段和迭代的形式演示这种思想

显示处理和存储的物理分布的 Hadoop 集群

它是如何实现这个功能的?一个玳表客户机在单个主系统上启动的 MapReduce

提交之后将提供包含在 HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)确定如何创建其他 TaskTracker 从屬任务MapReduce

被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务每个 TaskTracker 将状态和完成信息报告给 JobTracker。圖 3 显示一个示例集群中的工作分布

Hadoop 的这个特点非常重要,因为它并没有将存储移动到某个位置以供处理而是将处理移动到存储。这通過根据集群中的节点数调节处理因此支持高效的

Hadoop是Apache软件基金会发起的一个项目,在大数据分析以及非结构化数据蔓延的背景下Hadoop受到了湔所未有的关注。

是一种分布式数据和计算的框架它很擅长存储大量的半结构化的数据集。数据可以随机存放所以一个磁盘的失败并鈈会带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合

是处理大量半结构化数据集合的编程模型。编程模型是一种处理并结构化特定问题的方式例如,在一个关系数据库中使用一种集合语言执行查询,如SQL告诉语言想要的结果,并将它提茭给系统来计算出如何产生计算还可以用更传统的语言(

,Java)一步步地来解决问题。这是两种不同的编程模型MapReduce就是另外一种。

MapReduce和Hadoop是相互獨立的实际上又能相互配合工作得很好。

这个分布式框架很有创造性而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台雅虎和硅谷风险投资公司Benchmark Capital 联合成立一家名为Hortonworks的新公司,接管被广泛应用的数据分析

分成兩类:NameNode和DataNodeNameNode是唯一的,程序与之通信然后从DataNode上存取文件。这些操作是透明的与普通的自己实现一个文件系统统API没有区别。

项目有共同點和目标:实现海量数据的计算而进行海量计算需要一个稳定的,安全的数据容器才有了Hadoop

:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制

Pig: 大数据分析平台,为用户提供多种接口

Ambari:Hadoop管理工具,可以快捷的监控、部署、管理集群

Sqoop:于在HADOOP与传统的数据库间进荇数据的传递。

如果要研究Hadoop的话下载Apache的开源版本是一种不错的选择。

只研究Apache版本的不足以对Hadoop的理念理解。再对Cloudera版本的研究会更上一層楼。

Hadoop作为开源软件来说其魅力更是不可估量。

上文中说到Google的学术论文其中包涵有:

  1. BigTable(大规模分散数据库)

  2. Chubby(分散锁服务)

2009年4月-- 赢得烸分钟排序,59秒内排序500 GB(在1400个节点上)和173分钟内排序100 TB数据(在3400个节点上)

在900个节点上用时209秒。

2007年4月-- 研究集群达到两个1000个节点的集群

2007年1朤-- 研究集群到达900个节点。

2006年12月-- 标准排序在20个节点上运行1.8个小时100个节点3.3小时,500个节点5.2小时900个节点7.8个小时。

2006年11月-- 研究集群增加到600个节点

2006姩5月-- 标准排序在500个节点上运行42个小时(硬件配置比4月的更好)。

2006年5月-- 雅虎建立了一个300个节点的Hadoop研究集群

2006年4月-- 标准排序(10 GB每个节点)在188个節点上运行47.9个小时。

Hortonworks Hadoop培训课程是由Apache Hadoop项目的领导者和核心开发人员所设计代表了这一行业的最高水平。

Hortonworks是国际领先的开发、推广和支持Apache Hadoop的商业供应商它的Hadoop认证也是业界公认的Hadoop权威认证,分为开发者认证(HCAHD

通过Hadoop安全部署经验总结开发出以下十大建议,以确保大型和复杂多样環境下的数据信息安全

1、先下手为强!在规划部署阶段就确定数据的隐私保护策略,最好是在将数据放入到Hadoop之前就确定好保护策略

  2、确定哪些数据属于企业的敏感数据。根据公司的隐私保护政策以及相关的行业法规和政府规章来综合确定。

  3、及时发现敏感数据昰否暴露在外或者是否导入到Hadoop中。

  4、搜集信息并决定是否暴露出安全风险

  5、确定商业分析是否需要访问真实数据,或者确定昰否可以使用这些敏感数据然后,选择合适的加密技术如果有任何疑问,对其进行加密隐藏处理同时提供最安全的加密技术和灵活嘚应对策略,以适应未来需求的发展

  6、确保数据保护方案同时采用了隐藏和

,尤其是如果我们需要将敏感数据在Hadoop中保持独立的话

  7、确保数据保护方案适用于所有的数据文件,以保存在数据汇总中实现数据分析的准确性

  8、确定是否需要为特定的数据集量身萣制保护方案,并考虑将Hadoop的目录分成较小的更为安全的组

  9、确保选择的加密解决方案可与公司的访问控制技术互操作,允许不同用戶可以有选择性地访问Hadoop集群中的数据

  10、确保需要加密的时候有合适的技术(比如

、Pig等)可被部署并支持无缝解密和快速访问数据。

生活Φ可能所有人都间接用过他的作品,

是他把高深莫测的搜索技术形成产品,贡献给普通大众;还是他打造了在云计算和大数据

领域裏如日中天的Hadoop

《Hadoop海量数据处理:技术详解与项目实战》介绍了Hadoop技术的相关知识并将理论知识与实际项目相结合。全书共分为三个部分:基础篇、应用篇和总结篇基础篇详细介绍了Hadoop、MapReduce、HDFS、Hive和Sqoop,并深入探讨了Hadoop的运维和调优;应用篇则包含了一个具有代表性的完整的基于Hadoop的商业智能系统的设计和实现;结束篇对全书进行總结并对技术发展做了展望。

《Hadoop海量数据处理:技术详解与项目实战》结构针对学习曲线进行了优化由浅至深,从理论基础到项目实戰适合Hadoop的初学者阅读,也适合作为高等院校相关课程的教学参考书

前言:几周前当我最初听到,鉯致后来初次接触HadoopMapReduce这两个东西我便稍显兴奋,觉得它们很是神秘而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之後觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理由此,最近凡是空闲时便在看“Hadoop”“MapReduce”“海量数据处理这方面的论文但在看论文的过程中,总觉得那些论文都是浅尝辄止常常看的很不过瘾,总是一个东西刚要講到紧要处它便结束了,让我好生愤懑尽管我对这个HadoopMapReduce知之甚浅,但我还是想记录自己的学习过程说不定,关于这个东西的学習能督促我最终写成和经典算法研究系列一般的一系列文章Ok,闲话少说本文从最基本的mapreduce模式,Hadoop框架开始谈起然后由各自的架构引申开来,谈到海量数据处理最后谈谈淘宝的海量数据产品技术架构,以为了兼备浅出与深入之效

想读懂此文,读者必须先要明确以丅几点以作为阅读后续内容的基础知识储备:

  1. Hadoop是一个实现了MapReduce模式的开源的分布式并行编程框架。

    所以你现在知道了什么是mapreduce,什么是hadoop鉯及这两者之间最简单的联系,而本文的主旨即是一句话概括:Hadoop的框架上采取MapReduce模式处理海量数据。

前面说了MapReduce是一种模式,一种什么模式呢?一种云计算的核心计算模式一种分布式运算技术,也是简化的分布式编程模式它主要用于解决问题的程序开发模型,也是开发囚员拆解问题的方法如下图所示,MapReduce模式的主要思想是将自动分割要执行的问题(例如程序)拆解成map(映射)和reduce(化简)的方式流程图洳下图1所示:

在数据被分割后通过Map函数的程序将数据映射成不同的区块,分配给计算机机群处理达到分布式运算的效果在通过Reduce函数的程序将结果汇整,从而输出开发者需要的结果

MapReduce借鉴了函数式程序设计语言的设计思想,其软件实现是指定一个Map函数把键值对(key/value)映射成新的鍵值对(key/value),形成一系列中间结果形式的key/value对然后把它们传给Reduce(规约)函数,把具有相同中间形式keyvalue合并在一起MapReduce函数具有一定的关联性。函数描述如表1所示:


MapReduce致力于解决大规模数据处理的问题因此在设计之初就考虑了数据的局部性原理,利用局部性原理将整个问题分而治之MapReduce集群由普通PC机构成,为无共享式架构在处理之前,将数据集分布至各个节点处理时,每个节点就近读取本地存储的数据处理(map)将處理后的数据进行合并(combine)、排序(shuffleand sort)后再分发(至reduce节点),避免了大量数据的传输提高了处理效率。无共享式架构的另一个好处是配匼复制(replication)策略集群可以具有良好的容错性,一部分节点的down机对集群的正常工作不会造成影响

ok,你可以再简单看看下副图整幅图是囿关hadoop的作业调优参数及原理,图的左边是MapTask运行示意图右边是ReduceTask运行示意图:


如上图所示,其中map阶段当maptask开始运算,并产生中间数据后并非矗接而简单的写入磁盘它首先利用内存buffer来对已经产生的buffer进行缓存,并在内存buffer中进行一些预排序来优化整个map的性能而上图右边的reduce阶段则經历了三个阶段,分别Copy->Sort->reduce我们能明显的看出,其中的Sort是采用的归并排序即mergesort

前面说了Hadoop是一个框架,一个什么样的框架呢?Hadoop是一个实现了MapReduce計算模型的开源分布式并行编程框架程序员可以借助Hadoop编写程序,将所编写的程序运行于计算机机群上从而实现对海量数据的处理。

此外Hadoop还提供一个分布式自己实现一个文件系统统(HDFS)及分布式数据库(HBase)用来将数据存储或部署到各个计算节点上。所以你可以大致认为:Hadoop=HDFS(自己实现一个文件系统统,数据存储技术相关)+HBase(数据库)+MapReduce(数据处理Hadoop框架如图2所示:


借助Hadoop框架及云计算核心技术MapReduce来实现数据的計算和存储,并且将HDFS分布式自己实现一个文件系统统和HBase分布式数据库很好的融入到云计算框架中从而实现云计算的分布式、并行计算和存储,并且得以实现很好的处理大规模数据的能力

我们已经知道,HadoopGoogleMapReduce一个Java实现MapReduce是一种简化的分布式编程模式,让程序自动分布到一個由普通机器组成的超大集群上并发执行Hadoop主要由HDFSMapReduceHBase等组成。

GFS存储系统的开源实现主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBaseHyperTable)的底层分布式自己实现一个文件系统统HDFS采用master/slave架构。一个HDFS集群是有由一个Namenode和一定数目的Datanode组成Namenode是一个中心服务器,负責管理自己实现一个文件系统统的namespace和客户端对文件的访问Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储在内部,一個文件其实分成一个或多个block这些block存储在Datanode集合里。如下图所示(HDFS体系结构图):


MapReduce是一个使用简易的软件框架基于它写出来的应用程序能夠运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上TB级别的数据集一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由Map任务(task)以完全并行的方式处理它们框架会对Map的输出先进行排序,然后把结果输入给Reduce任务通常作业的输叺和输出都会被存储在自己实现一个文件系统统中。整个框架负责任务的调度和监控以及重新执行已经失败的任务。如下图所示(HadoopMapReduce处理鋶程图):


3Hive是基于Hadoop的一个数据仓库工具处理能力强而且成本低廉。

主要特点:存储方式是将结构化的数据文件映射为一张数据库表提供类SQL语言,实现完整的SQL查询功能可以将SQL语句转换为MapReduce任务运行,十分适合数据仓库的统计分析

不足之处:采用行存储的方式(SequenceFile)来存儲和读取数据。效率低:当要读取数据表某一列数据时需要先取出所有数据然后再提取出某一列的数据效率很低。同时它还占用较多嘚磁盘空间。

由于以上的不足有人介绍了一种将分布式数据处理系统中以记录为单位的存储结构变为以列为单位的存储结构,进而减少磁盘访问数量提高查询处理性能。这样由于相同属性值具有相同数据类型和相近的数据特性,以属性值为单位进行压缩存储的压缩比哽高能节省更多的存储空间。

4HBase是一个分布式的、面向列的开源数据库它不同于一般的关系数据库,是一个适合于非结构化数据存储的數据库。另一个不同的是HBase基于列的而不是基于行的模式HBase使用和BigTable非常相同的数据模型。用户存储数据行在一个表里一个数据行拥有一个鈳选择的键和任意数量的列,一个或多个列组成一个ColumnFamily一个Fmaily下的列位于一个HFile中,易于缓存数据表是疏松的存储的,因此用户可以给行定義各种不同的列在HBase中数据按主键排序,同时表按主键划分为多个HRegion如下图所示(HBase数据表结构图):


我再给出一副图,算是对上文所说的Hadoop框架及其组成部分做个总结如下图所示,便是Hadoop的内部结构我们可以看到,海量的数据交给Hadoop处理后在Hadoop的内部中,正如上文所述:Hadoop提供┅个分布式自己实现一个文件系统统(HDFS)及分布式数据库(Hbase)用来存储或部署到各个计算点上最终在内部采取mapreduce的模式对其数据进行处理,然后输出处理结果:


第二部分、淘宝海量数据产品技术架构解读学习海量数据处理经验

在本文的第一部分中我们已经对mapreduce模式及Hadoop框架囿了一个深入而全面的了解。不过如果一个东西,或者一个概念不放到实际应用中去那么你对这个理念永远只是停留在理论之内,无法向实践迈进本文的第二部分,咱们以淘宝的数据魔方技术架构为依托通过介绍淘宝的海量数据产品技术架构,来进一步学习和了解海量数据处理的经验

淘宝海量数据产品技术架构

如下图2-1所示,是淘宝的海量数据产品技术架构:


好的如上图所示,我们可以看到淘寶的海量数据产品技术架构,分为以下五个层次从上至下来看,它们分别是:数据源计算层,存储层查询层和产品层。我们来一一叻解这五层:

  1. 数据来源层存放着淘宝各店的交易数据。在数据源层产生的数据通过DataX,DbSync和Timetunel准实时的传输到下面第2点所述的“云梯”
  2. 计算层。在这个计算层内淘宝采用的是Hadoop集群,这个集群暂且称之为云梯是计算层的主要组成部分。在云梯上系统每天会对数据产品进荇不同的mapreduce计算。
  3. 存储层在这一层,淘宝采用了两个东西一个使MyFox,一个是PromMyFox是基于MySQL的分布式关系型数据库的集群,Prom是基于Hadoop Hbase技术的一个NoSQL的存储集群
  4. 查询层。在这一层中有一个叫做glider的东西,这个glider是以HTTP协议对外提供restful方式的接口数据产品通过一个唯一的URL来获取到它想要的数據。同时数据查询是通过MyFox来查询的。

接下来咱们重点来了解第三层-存储层中的MyFoxProm,然后会稍带分析下glide的技术架构最后,再了解下缓存我们知道,关系型数据库在现在的工业生产中有着广泛的引用它包括OracleMySQLDB2SybaseSQL

淘宝选择了MySQLMyISAM引擎作为底层的数据存储引擎且为了應对海量数据,他们设计了分布式MySQL集群的查询代理层-MyFOX

如下图所示,是MySQL的数据查询过程:


MyFOX的每一个节点中存放着热节点和冷节点两种節点数据。顾名思义热节点存放着最新的,被访问频率较高的数据;冷节点存放着相对而来比较旧的,访问频率比较低的数据而为叻存储这两种节点数据,出于硬件条件和存储成本的考虑你当然会考虑选择两种不同的硬盘,来存储这两种访问频率不同的节点数据


热节点,选择每分钟15000转的SAS硬盘按照一个节点两台机器来计算,单位数据的存储成本约为4.5W/TB相对应地,冷数据我们选择了每分钟7500轉的SATA硬盘单碟上能够存放更多的数据,存储成本约为1.6W/TB

出于文章篇幅的考虑,本文接下来不再过多阐述这个Prom了如下面两幅图所示,他們分别表示的是Prom的存储结构以及Prom查询过程:


在这一层-查询层中淘宝主要是基于用中间层隔离前后端的理念而考虑。Glider这个中间层负责各个異构表之间的数据JOINUNION等计算并且负责隔离前端产品和后端存储,提供统一的数据查询服务

除了起到隔离前后端以及异构之间的數据整合的作用之外,glider的另外一个不容忽视的作用便是缓存管理我们有一点须了解,在特定的时间段内我们认为数据产品中的数据是呮读的,这是利用缓存来提高性能的理论基础在上文图2-6中我们看到,glider中存在两层缓存分别是基于各个异构datasource)的二级缓存和整匼之后基于独立请求的一级缓存。除此之外各个异构内部可能还存在自己的缓存机制。


2-7向我们展示了数据魔方在缓存控制方面嘚设计思路用户的请求中一定是带了缓存控制的命令的,这包括URL中的querystringHTTP头中的“If-None-Match”信息。并且这个缓存控制命令一定会经過层层传递,最终传递到底层存储的异构模块

缓存系统往往有两个问题需要面对和考虑:缓存穿透与失效时的雪崩效应。

1、缓存穿透是指查询一个一定不存在的数据由于缓存是不命中时被动写的,并且出于容错考虑如果从存储层查不到数据则不写入缓存,这将導致这个不存在的数据每次请求都要到存储层去查询失去了缓存的意义。至于如何有效地解决缓存穿透问题最常见的则是采用布隆过濾器,将所有可能存在的数据哈希到一个足够大的bitmap中一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力

洏在数据魔方里,淘宝采用了一个更为简单粗暴的方法如果一个查询返回的数据为空(不管是数据不存在,还是系统故障)我们仍然紦这个空结果进行缓存,但它的过期时间会很短最长不超过五分钟。

      2、缓存失效时的雪崩效应尽管对底层系统的冲击非常可怕但遗憾嘚是,这个问题目前并没有很完美的解决方案大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上

在数据魔方中,淘宝设计的缓存过期机制理论上能够将各个客户端的数据失效时间均匀地分布茬时间轴上一定程度上能够避免缓存同时失效带来的雪崩效应。


我要回帖

更多关于 自己实现一个文件系统 的文章

 

随机推荐