Hadoop简单介绍

毕业前就听说了Hadoop,今天突然想了解一下。在网上搜集一些关于Hadoop的介绍,顺便把它整理一下,发在博客上和网友分享,高手勿喷。



       一个分布式系统基础架构。由Apache基金会开发。用户能够在不了解分布式底层细节的情况下。开发分布式程序。充分利用集群的威力快速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System)。简称HDFS。HDFS有着高容错性的特点。并且设计用来部署在低廉的(low-cost)硬件上。

并且它提供高传输率(high throughput)来訪问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求






展开

名字起源

Hadoop[1]这个名字不是一个缩写,它是一个虚构的名字。该项目的创建者,Doug Cutting解释Hadoop的得名:“这个名字是我孩子给一个棕黄色的大象玩具命名的。

我的命名标准就是简短。easy发音和拼写,没有太多的意义。而且不会被用于别处。

小孩子恰恰是这方面的高手。”

Hadoop的发音是 [hædu:p][2]

Hadoop[1]由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子
hadoop logo

  hadoop logo

项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启示。

2006 年 3 月份。Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。

Hadoop 是最受欢迎的在 Internet 上对搜索keyword进行内容分类的工具。但它也能够解决很多要求极大伸缩性的问题。比如。假设您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将须要非常长的时间。可是 Hadoop 在设计时就考虑到这些问题。採用并行运行机制,因此能大大提高效率。

诸多长处

Hadoop[1]是一个可以对大量数据进行分布式处理软件框架。

可是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。

Hadoop 是可靠的。由于它如果计算元素和存储会失败,因此它维护多个工作数据副本,确保可以针对失败的节点又一次分布处理。Hadoop 是高效的。由于它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,可以处理 PB 级数据。此外。Hadoop 依赖于社区server,因此它的成本比較低,不论什么人都可以使用。

Hadoop是一个可以让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和执行处理海量数据的应用程序

它主要有下面几个长处:

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

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

⒊高效性。

Hadoop可以在节点之间动态地移动数据,并保证各个节点的动态平衡。因此处理速度很快。

⒋高容错性。

Hadoop可以自己主动保存数据的多个副本。而且可以自己主动将失败的任务又一次分配。

Hadoop带实用 Java 语言编写的框架,因此执行在 Linux 生产平台上是很理想的。Hadoop 上的应用程序也能够使用其它语言编写。比方 C++。

编辑本段架构

Hadoop 由很多元素构成。

其最底部是 Hadoop Distributed File Syst

Hadoop 集群的简化视图

  Hadoop 集群的简化视图

em[3](HDFS),它存储 Hadoop 集群中全部存储节点上的文件。HDFS(对于本文)的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。

HDFS

对外部客户机而言。HDFS 就像一个传统的分级文件系统。能够创建、删除、移动或重命名文件,等等。

可是 HDFS 的架构是基于一组特定的节点构建的(參见图 1)。这是由它自身的特点决定的。这些节点包含 NameNode(仅一个)。它在 HDFS 内部提供元数据服务;DataNode。它为 HDFS 提供存储块。

因为仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。

存储在 HDFS 中的文件被分成块,然后将这些块拷贝到多个计算机中(DataNode)。

这与传统的 RAID 架构大不同样。

块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 能够控制全部文件操作。HDFS 内部的全部通信都基于标准的 TCP/IP 协议。

NameNode

NameNode 是一个通常在 HDFS 实例中的单独机器上执行的软件。它负责管理文件系统名称空间和控制外部客户机的訪问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里须要您了解集群架构。

实际的 I/O事务并没有经过 NameNode。仅仅有表示 DataNode 和块的文件映射的元数据经过 NameNode。

当外部客户机发送请求要求创建文件时。NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其它将要接收该块的副本的 DataNode。

NameNode 在一个称为 FsImage 的文件里存储全部关于文件系统名称空间的信息。

这个文件和一个包括全部事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也须要复制副本,以防文件损坏或 NameNode 系统丢失。

NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决问题。眼下仅仅有通过Hadoop Non-stop namenode才干实现100% uptime可用时间。[4]

DataNode

DataNode 也是一个通常在 HDFS 实例中的单独机器上执行的软件。Hadoop 集群包括一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将全部系统连接起来。Hadoop 的一个如果是:机架内部节点之间的传输速度快于机架间节点的传输速度。

DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每一个 DataNode 的定期心跳(heartbeat)消息。每条消息都包括一个块报告,NameNode 能够依据这个报告验证块映射和其它文件系统元数据。假设 DataNode 不能发送心跳消息,NameNode 将採取修复措施,又一次复制在该节点上丢失的块。

文件操作

可见。HDFS 并非一个万能的文件系统。它的主要目的是支持以流的形式訪问写入的大型文件。

假设客户机想将文件写到 HDFS 上,首先须要将该文件缓存到本地的暂时存储。假设缓存的数据大于所需的 HDFS 块大小。创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。同一时候也通知将要保存文件块副本的 DataNode。当客户机開始将暂时文件发送给第一个 DataNode 时,将马上通过管道方式将块内容转发给副本 DataNode。

客户机也负责创建保存在同样 HDFS名称空间中的校验和(checksum)文件。在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件)。

Linux 集群

Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),可是使用存放在机架上的商业server才干发挥它的力量。

这些机架组成一个 Hadoop 集群。它通过集群拓扑知识决定怎样在整个集群中分配作业和文件。

Hadoop 假定节点可能失败,因此採用本机方法处理单个计算机甚至全部机架的失败。

集群系统

Google的数据中心使用便宜的Linux PC机组成集群,在上面执行各种应用。即使是分布式开发的新手也能够迅速使用Google的基础设施。

核心组件是3个:

⒈GFS(Google File System)。一个分布式文件系统。隐藏下层负载均衡冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google依据自己的需求对它进行了特别优化,包含:超大文件的訪问。读操作比例远超过写操作,PC机极易发生问题造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。

同一时候每块文件至少有3份以上的冗余。中心是一个Master节点,依据文件索引,找寻文件块。

详见Google的project师公布的GFS论文。

⒉MapReduce。Google发现大多数分布式运算能够抽象为MapReduce操作。

Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成终于输出Output。这两个函数由程序猿提供给系统,下层设施把Map和Reduce操作分布在集群上执行,并把结果存储在GFS上。

⒊BigTable。一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格。用来存储结构化的数据。
以上三个设施Google均有论文发表。

应用程序

Hadoop 的最常见使用方法之中的一个是 Web 搜索。尽管它不是惟一的软件框架应用程序。但作为一个并行数据处理引擎,它的表现很突出。Hadoop 最有趣的方面之中的一个是 Map and Reduce 流程,它受到Google开发的启示。这个流程称为创建索引,它将 Web爬行器检索到的文本 Web 页面作为输入,而且将这些页面上的单词的频率报告作为结果。

然后能够在整个 Web 搜索过程中使用这个结果从已定义的搜索參数中识别内容。

最简单的 MapReduce应用程序至少包括 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。

main 函数将作业控制和文件输入/输出结合起来。在这点上。Hadoop 提供了大量的接口和抽象类,从而为 Hadoop应用程序开发人员提供很多工具,可用于调试和性能度量等。

MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包括有很多实例(很多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每一个元素相应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后依据它们的键(为每一个键生成一个键/值对)缩小键/值对列表。
这里提供一个演示样例。帮助您理解它。如果输入域是 one small step for man,one giant leap for mankind。

在这个域上执行 Map 函数将得出下面的键/值对列表:

(one,1) (small,1) (step,1) (for,1) (man,1)
MapReduce 流程的概念流

  MapReduce 流程的概念流

(one,1) (giant,1) (leap,1) (for,1) (mankind,1)
假设对这个键/值对列表应用 Reduce 函数,将得到下面一组键/值对:
(one,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)
结果是对输入域中的单词进行计数,这无疑对处理索引十分实用。

可是,假

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

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

设有两个输入域,第一个是 one small step for man,第二个是 one giant leap for mankind。您能够在每一个域上运行 Map 函数和 Reduce 函数,然后将这两个键/值对列表应用到还有一个 Reduce 函数,这时得到与前面一样的结果。

换句话说,能够在输入域并行使用同样的操作。得到的结果是一样的,但速度更快。这便是 MapReduce 的威力。它的并行功能可在随意数量的系统上使用。图 2 以区段和迭代的形式演示这样的思想。

回到 Hadoop 上。它是怎样实现这个功能的?一个代表客户机在单个主系统上启动的 MapReduce应用程序称为 JobTracker。类似于 NameNode,它是 Hadoop 集群中惟一负责控制 MapReduce应用程序的系统。在应用程序提交之后,将提供包括在 HDFS 中的输入和输出文件夹。

JobTracker 使用文件块信息(物理量和位置)确定怎样创建其它 TaskTracker 从属任务。

MapReduce应用程序被拷贝到每一个出现输入文件块的节点。将为特定节点上的每一个文件块创建一个惟一的从属任务。每一个 TaskTracker 将状态和完毕信息报告给 JobTracker。图 3 显示一个演示样例集群中的工作分布。

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

开源实现

Hadoop是项目的总称[5]。主要是由HDFS和MapReduce组成。
HDFS是Google File System(GFS)的开源实现。

MapReduce是Google MapReduce的开源实现。
这个分布式框架非常有创造性。并且有极大的扩展性,使得Google在系统吞吐量上有非常大的竞争力。因此Apache基金会用Java实现了一个开源版本号。支持Fedora、Ubuntu等Linux平台。

雅虎和硅谷风险投资公司Benchmark Capital 6月28日联合宣布,他们将联合成立一家名为Hortonworks的新公司,接管被广泛应用的数据分析软件Hadoop的开发工作。

Hadoop实现了HDFS文件系统和MapRecue。

用户仅仅要继承MapReduceBase,提供分别实现Map和Reduce的两个类,并注冊Job就可以自己主动分布式执行。

眼下Beta版本号是2.0.3,稳定版本号是1.1.2
HDFS把节点分成两类:NameNode和DataNode。NameNode是唯一的,程序与之通信。然后从DataNode上存取文件。

这些操作是透明的,与普通的文件系统API没有差别。

MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。

HDFS和MapReduce实现是全然分离的。并非没有HDFS就不能MapReduce运算。
Hadoop也跟其它云计算项目有共同点和目标:实现海量数据的计算。

而进行海量计算须要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS。Hadoop Distributed File System)。

HDFS通信部分使用org.apache.hadoop.ipc,能够非常快使用RPC.Server.start()构造一个节点,详细业务功能还需自己实现。针对HDFS的业务则为数据流的读写。NameNode/DataNode的通信等。
MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完毕节点通信(能够不是hadoop通信接口)。就能进行MapReduce运算。

Hadoop的发音音标 [hædu:p]

子项目

Hadoop Common: 在0.20及曾经的版本号中,包括HDFS、MapReduce和其它项目公共内容,从0.21開始HDFS和MapReduce被分离为独立的子项目。其余内容为Hadoop Common
HDFS: Hadoop分布式文件系统(Distributed File System) - HDFS (Hadoop Distributed File System)
MapReduce并行计算框架,0.20前使用 org.apache.hadoop.mapred 旧接口。0.20版本号開始引入org.apache.hadoop.mapreduce的新API
HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBaseAvro已经于2010年5月成为顶级 Apache 项目)
Hive:数据仓库工具,由Facebook贡献。
Zookeeper:分布式锁设施,提供类似Google Chubby的功能。由Facebook贡献。

Avro:新的数据序列化格式与传输工具,将逐步代替Hadoop原有的IPC机制。
Pig:大数据分析平台,为用户提供多种接口。

Ambari[6]:Hadoop管理工具,能够快捷的监控、部署、管理集群。
Sqoop:于在HADOOP与传统的数据库间进行数据的传递。

研究

Hadoop是原Yahoo的Doug Cutting依据Google公布的学术论文研究而来。

Doug Cutting给这个Project起了个名字,就叫Hadoop。

如今。Doug Cutting在Cloudera公司。Cloudera的Hadoop是商用版。不同于Apache的开源版。

假设要研究Hadoop的话,下载Apache的开源版本号是一种不错的选择。
仅仅研究Apache版本号的。不足以对Hadoop的理念理解。再对Cloudera版本号的研究。会更上一层楼。
如今美国的AsterData,也是Hadoop的一个商用版,AsterData的MPP理念。Applications Within理念等等,也都是值得研究。

Google的成功已经说明了RDB的下一代就是Nosql(Not Only SQL),比方说GFS。Hadoop等等。

Hadoop作为开源软件来说,其魅力更是不可估量。
上文中说到Google的学术论文,当中包涵有:
Google File System(大规模分散文件系统)
MapReduce (大规模分散FrameWork)
BigTable(大规模分散数据库)
Chubby(分散锁服务)
这四大基础技术的介绍。

大事记

2013年2月,Wandisco推出了世界第一款可用于实际业务环境的Apache Hadoop 2 -WANdisco Distro(WDD)。[7]
2011年12月27日--1.0.0版本号释出。标志着Hadoop已经初具生产规模[8]
2009年4月-- 赢得每分钟排序。59秒内排序500 GB(在1400个节点上)和173分钟内排序100 TB数据(在3400个节点上)。
2009年3月-- 17个集群总共24 000台机器。
2008年10月-- 研究集群每天装载10 TB的数据。
2008年4月-- 赢得世界最快1 TB数据排序在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个小时。
2006年2月-- 雅虎的网格计算团队採用Hadoop。

2006年2月-- Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。
2006年1月-- Doug Cutting增加雅虎。
2005年12月-- Nutch移植到新的框架,Hadoop在20个节点上稳定执行。
2004年-- 最初的版本号(如今称为HDFS和MapReduce)由Doug Cutting和Mike Cafarella開始实施。

EasyHadoop

EasyHadoop开源社区让hadoop更易用、更easy 。
Easyhadoop开源社区由国内第一个获得美国Cloudera公司认证的Apache Hadoop开发project师童小军,向磊等发起创建,汇聚了一群来自各大公司的一线hadoop开发爱好者。如百度、阿里、暴风、蓝讯、淘宝、人民搜索、随视、亿赞普、福禄克等公司。
EasyHadoop是国内最早专注于Hadoop开发、应用、推广的机构组织。
2012年1月7日開始建设EasyHadoop开源社区,并在国内普及Hadoop技术应用,致力于让Hadoop大数据分析更简单。
2012年1月18日推出EasyHadoop高速安装脚本,大大简化Apache 社区Hadoop版本号的安装和部署工作。
2012年2月25日- 至今持续建设EasyHadoop开源社区行业技术论坛,带领团队成功组织五次Hadoop技术分享活动,分享Hadoop使用技能。

活动受到来自百度、腾讯、新浪、阿里巴巴、蓝讯等的上百位Hadoopproject师广泛參与和支持。

2012年7月 開始编写EasyHadoop 实战操作手冊,为Hadoop零基础入门读物。
EasyHadoop专注于hadoop的研发、应用和普及。获得了众多的第一
国内最大规模的hadoop开发人员QQ群之中的一个 ,差点儿汇聚国内各大公司做hadoop一线开发的project师

认证

Cloudera

Cloudera公司眼下主要提供Apache Hadoop开发project师认证(Cloudera CertifiedDeveloper for Apache Hadoop ,CCDH[9])和Apache Hadoop管理project师认证(Cloudera CertifiedAdministrator for Apache Hadoop ,CCAH),很多其它相关信息。请參阅Cloudera公司官方站点。

Hortonworks

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

Hortonworks是国际率先的开发、推广和支持Apache Hadoop的商业供应商,它的Hadoop认证也是业界公认的Hadoop权威认证,分为开发人员认证(HCAHD[10], Hortonworks Certified Apache HadoopDeveloper)和管理员认证(HCAHA, Hortonwork Certified Apache HadoopAdministrator)。

天云趋势是国内第一家,也是现阶段唯一一家提供 Hortonworks官方授权及认证的Apache Hadoop培训课程的企业。[11]

Hadoop信息安全

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

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


  2、确定哪些数据属于企业的敏感数据。依据公司的隐私保护政策。以及相关的行业法规和政府规章来综合确定。
  3、及时发现敏感数据是否暴露在外,或者是否导入到Hadoop中。


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


  5、确定商业分析是否须要訪问真实数据。或者确定能否够使用这些敏感数据。然后,选择合适的加密技术。假设有不论什么疑问,对其进行加密隐藏处理,同一时候提供最安全的加密技术和灵活的应对策略,以适应未来需求的发展。
  6、确保数据保护方案同一时候採用了隐藏和加密技术,尤其是假设我们须要将敏感数据在Hadoop中保持独立的话。


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


  8、确定是否须要为特定的数据集量身定制保护方案,并考虑将Hadoop的文件夹分成较小的更为安全的组。


  9、确保选择的加密解决方式可与公司的訪问控制技术互操作。同意不同用户能够有选择性地訪问Hadoop集群中的数据。


  10、确保须要加密的时候有合适的技术(比方Java、Pig等)可被部署并支持无缝解密和高速訪问数据。

posted @ 2017-07-31 14:12  yxysuanfa  阅读(484)  评论(0编辑  收藏  举报