为了满足大数据处理的需要,Hadoop大数据软件平台应运而生。Hadoop作为当下最 具有代表性的大数据分布式存储和分布式并行计算的软件框架,在业界已经得到广泛的应 用。在Hadoop基础上,很多企业推出了各自的大数据商业解决方案。因此,Hadoop已经 成为企业大数据应用的事实标准。本章首先介绍大数据常用的几种架构和解决方案,然后 介绍Hadoop的生态系统及其各个组件,最后系统介绍Hadoop的安装和配置。 3.大数据架构 1 1.大数据架构概述 3.1 大数据可以通过许多方式来存储、获取、处理和分析。大数据的数据来源也有不同的特 征,包括数据的类型、频率、量、速度以及真实性等。在对大数据进行处理和存储时,会涉及 更多维度的考虑,如治理、安全性和策略等。选择一种大数据架构并构建合适的大数据解决 方案极具挑战,因为需要考虑非常多的因素。 本书讲的大数据架构主要基于Hadoop体系的架构。当前,Hadoop架构技术的成熟和 生态的完备使其成为大数据平台架构的标准配置。通过不同组件的搭建,构建从底层数据 源、数据接入、数据预处理、分布式数据存储、分布式资源管理、分布式计算、数据建模和共享 分发等一套完善的大数据处理架构。 近年,以Hadoop体系为首的大数据分析平台逐渐表现出优异性,围绕Hadoop体系的 生态圈也不断变大,很多企业推出了各种大数据的解决方案,从根本上解决了传统数据仓库 的瓶颈问题。基于大数据架构的数据平台可以重点从以下3方面去解决传统数据仓库做数 据分析面临的瓶颈问题。 (1)分布式计算。分布式计算的思路是让多个节点并行计算,并且强调数据本地性,尽 可能减少数据的传输,例如Spark通过RDD 的形式来表现数据的计算逻辑,可以在RDD 上 做一系列的优化,来减少数据的传输。 (2)分布式存储。所谓分布式存储,指的是将一个大文件拆成 N 份,每一份独立地放 到一台机器上,这里就涉及文件的副本、分片,以及管理等操作,涵盖了分布式存储主要的优 化动作。 (3)检索和存储的结合。在早期的大数据组件中,存储和计算相对较单一,但是目前更 多的方向是在存储上做更多的工作,让查询和计算更加高效。对于计算来说,高效不外乎就 是查找数据快,读取数据快,所以目前的存储不仅存储数据内容,同时会添加很多元信息,例 第3章大数据架构与Hadoop 41 如索引信息。 1.数据类型 3.2 从数据的结构特点来看,可以将数据分为结构化数据、非结构化数据以及半结构化 数据三类。在现有大数据的存储中,仅有15%左右的数据为结构化数据,剩下的数据为 半结构化和非结构化数据。当今,全球每年非结构化和半结构化数据的增长速度已经远 远超过了结构化数据的增长速度,随着大数据的飞速发展,非结构化数据比例还会不断 提高。 1.结构化数据 简单来说,结构化数据就是行数据,就是被存储在关系数据库里的数据,可以用二维表 结构来逻辑表达实现的数据。所有的关系数据库,如Oracle、DB2 、MySQL 、SQLServer中 的数据都是结构化数据。在日常生活中,常见的有企业计划系统(EnterpriseResource Planning,ERP )、财务系统、医院医疗信息系统(HospitalInformationSystem,HIS )、教育一 卡通以及其他核心数据库等。这些应用需要包括高速存储应用需求、数据备份需求、数据共 享需求以及数据容灾需求。 2.非结构化数据 随着Web2.0时代的到来,在淘宝、微信、Twiter等平台上,每时每刻都在产生大量的 非结构化数据,非结构化数据的数据量与日俱增,基于二维表的传统数据库已经不能有效存 储这些海量的非结构化数据,因此,非结构化数据库应运而生。 非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重 复的子字段构成的数据库,用它不仅可以处理结构化数据,如数字、符号等信息,而且更适合 处理非结构化数据,如图像、图片、声音、文本、影视、超媒体等。 不能用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文 档、文本、图片、标准通用标记语言下的子集XML 、HTML 、各类报表、图像和音频/视频信 息等。此类数据不仅不容易收集和管理,而且还不能直接进行查询和分析。 3.半结构化数据 所谓半结构化数据,就是介于完全结构化数据和完全无结构的数据之间的数据,如 HTML文档、报表、XML 、JSON 、日志数据文件等就属于半结构化数据。此种数据中的每 一条记录可能会有预定义的规范,但是包含的信息可能具有不同的字段数、字段名,甚至包 含着不同的嵌套格式,此类数据的输出形式一般为纯文本形式,方便管理和维护,如图3-1 的XML文档。它一般是自描述的,数据的结构和内容混在一起,没有明显的区别。 4.各类数据的区别 可以从以下3方面来区分结构化数据、半结构化数据、非结构化数据的不同。 1)数据模型 各类数据的数据模型和基本特征如下。 42 大数据概论 图3- 1 XML文档 (1)结构化数据:二维表(关系型)。 (2)半结构化数据:树、图。 (3)非结构化数据:无 。 2)关系数据库系统(RMDBS)的数据模 型 RMDBS的数据模型包括网状数据模型、层次数据模型和关系模型 。 3)不同类型数据的形成过 程 (1)结构化数据:先有结构,再有数据。 (2)半结构化数据:先有数据,再有结构。 1.大数据架构及数据解决方案 3.3 1.几种常用的大数据架构 目前,基于Hadoop体系的大数据架构有以下几种。 1)传统大数据架构 之所以叫传统大数据架构,是因为其定位是为了解决传统商业智能(Busines Inteligence,BI)的问题,简单来说,数据分析的业务没有发生任何变化,但是因为数据量、性 能等问题导致系统无法正常使用,需要进行升级改造,那么此类架构便是为了解决这个问 题。其依然保留了抽取、转换、装载(Extract-Transformation-Load,ETL)的动作,将数据经 过ETL动作进入数据存储。 (1)优点:简单,易懂。对于BI系统来说,基本思想没有发生变化,变化的仅仅是技术 选型,用大数据架构替换BI的组件。 (2)缺点:对于大数据来说,没有BI下如此完备的Cube架构,虽然目前有Kylin,但是 Kylin的局限性非常明显,远远没有BI下的Cube的灵活度和稳定度,因此对业务支撑的灵 活度不够,所以对于存在大量报表,或者复杂的、钻取的场景,需要太多的手工定制化,同时 该架构依旧以批处理为主,缺乏实时的支撑。 (3)适用场景:数据分析需求依旧以BI场景为主,但是因为数据量、性能等问题无法满 足日常使用。 2)流式架构 在传统大数据架构的基础上,流式架构非常激进,直接去掉了批处理,数据全程以流的 形式处理,所以在数据接入端没有了ETL,转而替换为数据通道。经过流处理加工后的数 第3章大数据架构与Hadoop 43 据,以消息的形式直接推送给消费者。虽然有存储部分,但是该存储更多的是以窗口的形式 进行存储,所以该存储并非发生在数据湖,而是在外围系统。 (1)优点:没有臃肿的ETL 过程,数据的实效性非常高。 (2)缺点:对于流式架构来说,不存在批处理,因此对于数据的重播和历史统计无法很 好地支撑。对于离线分析仅支撑窗口之内的分析。 (3)适用场景:预警,监控,对数据有有效期要求的情况。 3)Lambda架构 Lambda架构是大数据系统里面举足轻重的架构,大多数架构基本都是Lambda架构 或者基于其变种的架构。Lambda的数据通道分为两条分支:实时流和离线。实时流依照 流式架构,保障了其实时性;离线则以批处理方式为主,保障了最终一致性。流式处理为保 障数据的实效性,更多的是处理实时增量数据流;批处理层则对数据进行全量运算,保障其 最终的一致性,因此,Lambda最外层有一个实时层和离线层合并的动作,此动作是Lambda 中非常重要的一个动作。 (1)优点:既有实时又有离线,对于数据分析场景涵盖得非常到位。 (2)缺点:离线层和实时流虽然面临的场景不相同,但是其内部处理的逻辑却是相同 的,因此有大量冗余和重复的模块存在。 (3)适用场景:同时存在实时和离线需求的情况。 4)Kappa架构 Kappa架构在Lambda的基础上进行了优化,删除了批处理系统的架构,数据只需通过 流式传输系统快速提供。因此,对于Kappa架构来说,依旧以流处理为主,但是数据却在数 据湖层面进行了存储,当需要进行离线分析或者再次计算时,将数据湖的数据再次经过消息 队列重播一次则可。 (1)优点:Kappa架构解决了Lambda架构里面的冗余部分,以数据可重播的超凡脱俗 的思想进行了设计,整个架构非常简洁。 (2)缺点:虽然Kappa架构看起来简洁,但实施难度相对较高,尤其是对于数据重播 部分。 (3)适用场景:和Lambda类似,该架构是针对Lambda的优化。 5)Unifield架构 以上架构都是围绕海量数据处理为主,Unifield架构则更激进,将机器学习和数据处理 融为一体,从核心上来说,Unifield依旧以Lambda为主,不过对其进行了改造,在流处理层 新增了机器学习层。数据在经过数据通道进入数据湖后,新增了模型训练部分,并且将其在 流式层进行使用。同时流式层不单使用模型,也包含着对模型的持续训练。 (1)优点:Unifield架构提供了一套数据分析和机器学习结合的架构方案,非常好地解 决了机器学习如何与数据平台进行结合的问题。 (2)缺点:Unifield架构实施复杂度更高,对于机器学习架构来说,从软件包到硬件部 署都和数据分析平台有着非常大的差别,因此在实施过程中的难度系数更高。 (3)适用场景:有着大量数据需要分析,同时对机器学习方面又有着非常大的需求。 以上几种大数据架构为目前数据处理领域使用比较多的架构,当然还有很多其他架构, 不过其思想都或多或少地类似。数据领域和机器学习领域会持续发展,以上几种思想或许 44 大数据概论 终究也会过时。 2.大数据解决方案 Hadoop在大数据领域的应用前景广泛,不过因为其是开源技术,因此在实际应用过程 中存在很多问题,于是很多企业推出了各种大数据的解决方案,常用的大数据解决方案有 Cloudera、Hortonworks、MapR和FusionInsight等。 1)Cloudera Cloudera成立于2008年,是由分别来自Facebook、谷歌和雅虎的前工程师杰夫·哈默 巴切(JefHammerbacher)、克里斯托弗·比塞格利亚(ChristopheBisciglia)、埃姆·阿瓦达 拉(AmrAwadalah),以及曾任CEO的甲骨文前高管迈克·奥尔森(MikeOlson)共同创 建的。 在Hadoop生态系统中,Cloudera是规模最大、知名度最高的公司。Cloudera代表 Hadoop的一种解决方案,可以为开源Hadoop提供技术支持。Cloudera可以将数据处理框 架覆盖到整个企业数据中心,既可以作为管理企业所有数据的中心点,又可以作为目标数据 仓库、高效的数据平台或现有数据仓库的ETL来源。因此,Cloudera提供了一个可伸缩、 稳定、综合的企业级数据管理平台,用于管理快速增长的数据,使用户可以快速部署和管理 Hadoop及相关大数据处理框架,操作、分析企业级数据,并保证数据的安全性。 2)Hortonworks Hortonworks这个名字源自儿童书中一只叫Horton的大象,是由雅虎公司和 BenchmarkCapital于2011年7月联合创建的,出身于“名门”雅虎公司。它是一款基于 ApacheHadoop的开源数据平台,提供了大数据云存储,大数据处理和分析等服务。该平 台专门用来应对多来源和多格式的数据,并使其处理起来更简单、更有成本效益。 Hortonworks拥有许多Hadoop架构师和源代码贡献者,这些源代码贡献者以前均效 力于雅虎公司,而且已经为ApacheHadoop项目贡献了超过80%的源代码。 Hortonworks有两款核心产品:HDP和HDF 。Hortonworks没有对产品收费,而是 将这两款产品完全开放,将核心技术放在Hadoop开源社区中,每个人都可以看到并使用这 两款产品。 Hortonworks数据管理解决方案使组织可以实施下一代现代化数据架构。无论是静 态数据还是动态数据,Hortonworks都可以从云的边缘以及内部来对这些数据资产进行管 理。通过Hortonworks数据平面服务可以比较容易地操作和配置分布式数据系统,如数据 仓储优化、数据科学分析、自助服务分析等。由于Hortonworks是免费的,因此, HortonworksDPS用户可以轻松访问防火墙、公有云背后的可信数据,这使得组织能够获 得从源到目标的信任。此外,HortonworksDataFlow能够收集、整理和传送来自点击流、日 志文件、传感器、设备等的实时数据。 3)MapR MapR是MapRTechnologiesInc的产品,号称下一代Hadoop,是一个比现有Hadoop 分布式文件系统还要快3倍的产品,并且(.) 也是开源的。MapR配备了快照,并号称不会出现 SPOF单节点故障,且与现有HDFS的API兼容,因此非常容易替换原有的系统。MapR 使Hadoop变为一个速度更快、可靠性更高、更易于管理、使用更加方便的分布式计算服务 第3章大数据架构与Hadoop 45 和存储平台,同时性能也不断提高。它极大地扩大了Hadoop的使用范围和方式。它包含 了开源社区的许多流行的工具和功能,例如Hbase、Hive。它能够为客户节约一半的硬件资 源消耗,使更多的组织能够利用海量数据分析的力量提高竞争优势。 4)FusionInsight FusionInsight是在Hadoop集群上又封装了一层,类似于开源的CDH 、HDP等大数据 平台,是完全开放的大数据平台,可运行在任意标准的x86服务器上,无须任何专用的硬件 或存储,并针对金融、运营商等数据密集型行业的运行维护、应用开发等需求打造了高可靠、 高安全、易使用的运行维护系统和全量数据建模中间件,让企业可以更快、更准、更稳地从各 类繁杂无序的海量数据中发现价值。 华为FusionInsight是基于开源社区软件Hadoop进行功能增强,提供企业级大数据存 储、查询和分析的统一平台,帮助企业快速构建海量数据信息处理系统。通过对各类海量 数据信息进行实时和非实时的分析和挖掘,帮助企业从海量数据信息中获取真正的价值,及 时洞察和决策新的机会与风险。FusionInsightHadoop发行版紧随开源社区的最新技术, 快速集成最新组件,并在可靠性、安全性、管理性方面进行了企业级的增强和持续改进,始终 保持技术领先。而且FusionInsightHadoop保持了100%的开放性,决不使用私有架构和 组件。 FusionInsight解决方案由4个子产品(FusionInsightHD 、FusionInsightMPPDB 、 FusionInsightMiner、FusionInsightFarmer)和1个操作运维系统(FusionInsight Manager)构成。 (1)FusionInsightHD:企业级的大数据处理环境,是一个分布式数据处理系统,对外 提供大容量的数据存储、分析查询和实时流式数据处理分析能力。 (2)FusionInsightMPPDB:企业级的大规模并行处理关系数据库。FusionInsight MPPDB采用MPP(MasiveParalelProcesing)架构,支持行存储和列存储,提供PB (Petabyte,250字节)级别数据量的处理能力。 (3)FusionInsightMiner:企业级的数据分析平台,基于华为FusionInsightHD的分 布式存储和并行计算技术,提供从海量数据中挖掘出价值信息的平台。 (4)FusionInsightFarmer:企业级的大数据应用容器,为企业业务提供统一开发、运 行和管理的平台。 (5)FusionInsightManager:企业级大数据的操作运维系统,提供高可靠、安全、容错、 易用的集群管理能力,支持大规模集群的安装部署、监控、报警、用户管理、权限管理、审计、 服务管理、健康检查、问题定位、升级和补丁等功能。 中国有一半以上的金融、保险、银行以及全球Top50运营商中的25%都用了华为的大 数据平台;中国的平安城市建设有30%的客户选择了华为。华为在全球的项目及合作伙伴 数量相当可观。 迄今为止,FusionInsightHD已经交付了700多个项目,产生了300多个合作伙伴和客 户;这些项目覆盖到金融、公共安全、交通、政务、电信、电力、石油等各个行业。选择 FusionInsightHD作为大数据的承载平台和处理平台,可以尽可能地将大数据价值发挥到 极致。 另外,还有以阿里云和亚马逊云为代表的云上大数据解决方案。该方案提供了涵盖大 46 大数据概论 数据基础设施和大数据应用在内的丰富产品及服务,助力客户快速构建企业级数据架构,获 取数据时代的核心竞争优势。 3.2 Hadop概述 3.1 Hdop简介 2.ao Hadoop就是一个更容易开发和运行、处理大数据的软件平台。Hadoop是由Apache 基金会所开发的分布式系统基础架构,能够运行于大规模集群上的分布式计算平台。 Hadoop是基于Java语言开发的一款完全免费的开源程序,有着很好的跨平台性,无须购买 昂贵的软硬件平台,可以直接部署在廉价的计算机集群上,该计算机集群可以由一台商用 PC开始,后期可以根据需要任意增加PC 。Hadoop的两大核心是HDFS和MapReduce。 HDFS是Hadoop分布式文件系统,英文全称是HadoopDistributedFileSystem,用来存储 海量数据,是对谷歌文件系统GFS(GoogleFileSystem)的开源实现,是适合部署在低廉的 硬件环境上的分布式文件系统,具有很好的容错性、易扩展性以及较高的读写速度,有效保 证了数据存储的安全性。MapReduce是谷歌MapReduce的开源实现,可以使用户在不了 解分布式底层细节的情况下开发分布式程序,充分利用MapReduce来为海量数据进行高速 计算。因此,用户可以使用Hadoop搭建属于自己的分布式计算平台,轻松编写分布式程 序,完成海量数据的存储和计算。 Hadoop是被行业公认的大数据标准开源软件。目前,有很多公司都围绕Hadoop进行 工具开发、开源软件、商业化工具和技术服务,如微软、谷歌、淘宝、雅虎等。 3.2.2 Hadoop的发展历程 Hadoop(见图3-2)这个名称的由来,其实并没有太大的意义,是DougCuting在一次 机缘巧合之下,以自己孩子玩具大象的名字来命名的。在后来的Hadoop子模块和项目中, 都沿用了这种命名风格,如Hive和Pig等。 2002年,Hadoop起源于Nutch,Nutch是由ApacheLucene项 目的创始人DougCuting开发的一个开源的网络搜索引擎,是 Lucene项目的一个子项目。Nutch的设计目的就是构建一个大型的 图3- 2 Hadop标志 全网搜索引擎,然而随着抓取网页数量的急剧增加,该搜索引擎不能 解决数十亿网页的存储和索引问题。 在2003年,谷歌公司发布了谷歌文件系统(GFS)论文,文中描述 了可以解决海量数据的存储问题。但由于谷歌公司未开放源代码,于是2004年,Nutch项 目也模仿GFS开发了自己的分布式文件系统NDFS(NutchDistributedFileSystem),也就 是HDFS的前身。 在2004年,谷歌公司又发表了另一篇MapReduce论文,描述了MapReduce分布式计 算框架,可以用于处理海量网页的索引问题。同样由于谷歌公司未开放源代码,2005年, Nutch开源实现了谷歌公司的MapReduce。接下来,DougCuting意识到NDFS和 MapReduce不仅可以解决网络搜索引擎问题,还能具有多种用途。于是,在2006年2月, 第3章大数据架构与Hadoop 47 基于NDFS和MapReduce,独立处理海量数据的新项目被创建,成为Lucene项目的一个子 项目,这就是起初的Hadoop项目,同时,DougCuting加盟雅虎公司。在2007年,Hadoop 完成1TB磁盘数据的排序仅需要297s,2008年1月,Hadoop正式成为Apache顶级项目, Hadoop也逐渐开始被雅虎之外的其他公司使用。2008年4月,Hadoop采用一个由910个 节点构成的集群对1TB数据进行排序运算,时间只需207s。到了2009年5月,Hadoop更 是把1TB数据排序时间缩短到62s。Hadoop从此名声大振,迅速发展成为大数据时代最 具影响力的开源分布式开发平台,并成为公认的大数据处理标准。 3.2.3 Hadoop的特点 Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在 Hadoop开发和运行处理海量数据的应用程序。其特点主要有以下几个。 (1)可靠性高:Hadoop能自动地维护数据的多份副本,即使一个副本发生故障,其他 副本也能维持整个系统的正常工作。 (2)高扩展性:Hadoop是架构在廉价的计算机集群上,可以动态地增加存储与计算节 点,也可以替换,因此,可以方便地扩展到数以千计的计算机节点中。 (3)高效性:Hadoop由于采用分布式存储和分布式处理两大核心技术,所以,它能够 在节点之间动态地移动数据,能够高效地处理PB级数据。 (4)高容错性:Hadoop采取数据冗余的方式自动地存储数据的多个副本,并且能够自 动重新分配失败的任务。 (5)低成本:Hadoop采用廉价的计算机集群,硬件成本比较低,加上Hadoop是开源 的,项目的软件成本也是比较低的。因此,普通用户也可以搭建自己的Hadoop环境。 (6)Hadoop是基于Java语言开发的,可以很好地运行在Linux平台上。 (7)Hadoop支持多种编程语言,如Java、C++等。 3.2.4 Hadoop应用现状 Hadoop因其突出的优势,不仅在云计算领域用途广泛,还可以应用于搜索引擎服务, 此外,还在机器学习、海量数据处理和挖掘、科学计算等领域越来越受到青睐。下面简单介 绍Hadoop在几个知名公司的应用现状。 1.雅虎 2007年,雅虎在Sunnyval5PB容量的 e总部建立了一个包含了4000个处理器和1. Hadoop集群系统。雅虎是Hadoop的最大支持者,截至2012年,雅虎的Hadoop机器总节 点数目超过42000个,有超过10万的核心CPU在运行Hadoop。最大的一个单Master节 点集群有4500个节点。总的集群存储容量大于350PB,每月提交的作业数目超过1000万 个,在Pig中超过60%的Hadoop作业是使用Pig编写提交的。 目前,雅虎拥有全球最大的Hadoop集群,主要用于支持广告系统、Web搜索、个性化推 荐、用户行为分析等。 48 大数据概论 2.Facebook Facebook作为全球知名的社交网站,每天拥有3亿多的活跃用户,其中,每天都有几千 万的用户在上传海量的照片和视频,因此,Facebook使用Hadoop存储内部日志与多维数 据。目前,Hadoop集群的机器节点超过1400 台,共计11200 个核心CPU,超过15PB 原始 存储容量,每个商用机器节点配置了8核CPU,12TB 数据存储,主要使用StreamingAPI 和 JavaAPI 编程接口。Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等 方面。 3. 百度 百度作为全球最大的中文搜索引擎公司,每天需要高效地存储和处理海量的数据,因 此,百度选择了Hadoop平台,主要用于网页的聚类、日志的存储和统计、网页数据的分析和 挖掘、商业分析、在线数据反馈等。2012 年,百度的Hadoop集群规模达到十余个,单集群 超过2800 台机器节点,Hadoop机器总数有上万台,总的存储容量超过100PB,已经使用的 超过74PB,每天提交的作业数目有数千个之多,每天的输入数据量已经超过7500TB,输出 超过1700TB 。百度的Hadoop集群为整个公司的数据团队、大搜索团队、社区产品团队、广 告团队,以及LBS 团队提供统一的计算和存储服务,主要应用包括数据挖掘与分析、日志分 析平台、数据仓库系统、推荐引擎系统、用户行为分析系统等。同时,百度在Hadoop的基础 上还开发了自己的日志分析平台、数据仓库系统,以及统一的C++编程接口,并对Hadoop 进行深度改造,开发了HadoopC++扩展HCE 系统。 4. 腾讯 腾讯是使用Hadoop最早的中国互联网公司之一,截至2012 年年底,腾讯的Hadoop 集群机器总量超过5000 台,最大单集群约为2000 个节点,并利用Hadoop-Hive构建了自 己的数据仓库系统(TDW), 同时还开发了自己的TDW-IDE 基础开发环境。腾讯的 Hadoop为腾讯各个产品线提供基础云计算和云存储服务,其主要应用包括腾讯社交广告 平台、搜搜(SOSO )、腾讯微博、QQ 会员、QQ 空间、手机QQ 、QQ 音乐等。 5. 华为 华为是Hadoop的使用者,也是Hadoop技术的重要推动者。由雅虎成立的Hadoop 公司Hortonworks曾经发布一份报告,用来说明各个公司对Hadoop发展的贡献。其中, 华为公司在Hadoop重要贡献公司名单内,排在谷歌利思科公司的前面,说明华为公司也在 积极参与开源社区贡献。这里值得一提的是,华为的FusionInsight大数据平台,它是集 Hadoop生态发行版、大规模并行处理数据库、大数据云服务于一体的融合数据处理与服务 平台,拥有端到端全生命周期的解决方案能力。华为FusionInsight大数据平台已在40 多 个国家,总计700 多个项目中成功实现了商用。客户包括中国石油、一汽集团、中国商飞、工 商银行、招商银行、中国移动、西班牙电信等众多世界500 强企业。同时,华为公司在全球建 成了13 个开放实验室,在这里,华为与各国200 多家合作伙伴进行大数据方案的联合创新, 包括SAP 、埃森哲、IBM 、宇信科技、中软国际等,共同推动大数据技术在各行各业的应用。 第3章大数据架构与Hadoop 49 6.中国移动 中国移动于2010年5月正式推出大云(0),集群节点达到了1024个。中国 BigCloud1. 移动的大云基于Hadoop的MapReduce实现了分布式计算,并利用了HDFS来实现分布式 存储,并开发了基于Hadoop的数据仓库系统(HugeTable),并行数据挖掘工具集(BCPDM),以及并行数据抽取转化(BC-ETL),对象存储系统(BC-ONestd)等系统,并开源了自 己的BC-Hadoop版本。 除了百度、腾讯、华为、中国移动,国内采用Hadoop的公司还有淘宝、网易等,其中,淘 宝的Hadoop集群比较大。 3.5 Hdop的版本 2.ao 由于Hadoop版本比较混乱,因此,对于很多初学者来说,如何选择合适的Hadoop版 本,一直是比较困惑的事情。 1.免费开源的ApacheHadoop版本 免费开源的Hadoop版本分为两代,如图3-3所示。 图3- 3 Hadop版本 (0。将第一代Hadp称为Had0,包含3个大版本,分别是0.x, 1)Hadoop1.oooop1.20. 0.x和0.x, 0.x最后演化成1.x, op1.而0.x和 21.22.其中,20.0.变成了Hado0的稳定版, 21. 0.x则增加了HDFSHA等新的重大特性。 22. (2)Hado0。Hado0就是Apcoop的第二代版本, 分 op2.op2.aheHad包含两个版本, 别是0.x和2.x,它们完全不同于Had0,是一套全新的架构,均包含HDFS 23.oop1. Federation和YARN两个系统。 op3.p2.目前,Hadoop已经升级到了第三代,即Hado0,它在Hadoo0的基础上集成了 许多重要的增强功能,从而提高了平台的效率。但是,对于Hadoop3.一方面它的安 0而言, 装、运行环境不能低于JDK1.另一方面,在目前的实际使用过程中,Had0的稳定性 比Had0差。 8, oop3. oop2. 2.Hadoop的发行版 2009年,Cloudera推出了第一个Hadoop发行版,称为CDH,此后很多公司都加入 50 大数据概论 Hadoop产品化的行列,如Hortonworks发行版、Intel发行版、华为发行版、MapR等,所有 这些发行版均是基于ApacheHadoop衍生出来的,但前者更好用、功能更多。国内大多数 公司的发行版是收费的,如华为发行版等。不收费的Hadoop版本主要有国外的4个,分别 是Apache基金会的Hadoop、ClouderaHadoop(CDH )、HortonworksDataPlatform (HDP)和MapR。这里简单介绍ClouderaHadoop和HortonworksDataPlatform 。 ClouderaHadoop:Cloudera版本层次更加清晰,且它提供了适用于各种操作系统的 Hadoop安装包,可直接使用apt-get或者yum命令进行安装,更加省事。 HortonworksDataPlatform:它是Hortonworks的主打产品,也同样是100%开源的 产品,HDP除了常见的项目外还包含了Ambari———一款开源的安装和管理系统。 HCatalog是一个元数据管理系统,现已集成到Facebook开源的Hive中。Hortonworks的 Stinger开创性地、极大地优化了Hive项目。Hortonworks为入门提供了一个非常好的、易 于使用的沙盒。Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括WindowsServer和WindowsAzure在内的MicrosoftWindows平台 上本地运行。 3.如何选择版本 对初学者而言,这里建议选用Apcop的2.可以去Apce官网直接下 aheHado0版本, ah 载,下载地址为htps://haop.pceog/rlae.tl,如图3-4所示。 doaah.reesshm 图3- 4 ApacheHadop下载版本 3.3 Hadop的生态系统概述 3.1 Hdop的生态系统 3.ao 2006年项目开始以来,Hadp系统就得到不断完善和改进,Had0在Had oooop2.oop 0的基础上新增了HDFSHA和YARN等一些重要的新组件,已经形成一个丰富的 p生态系统,图35所示的Had0中有多个功能组件。 1. Hadoo-oop2. Hadoop2.educ 0的核心功能组件有3个,分别是HDFS(分布式文件系统)、MapRe(分 第3章大数据架构与Hadoop 51 图3-Hd0生态系统 5 aop2. 布式运算编程框架)和YARN(运算资源调度系统),此外,还包括Hive、Pig、ZooKeper、 HBase、Mahout、Sqoop、Flume 、Ambari等功能组件。 3.3.2 Hadoop的组成介绍 1节介绍了Hadp的生态系统,本节简单介绍Hadp各组件的功能和作用。 3.3.oooo 1.HDFS HDFS(HadoopDistributedFileSystem),即Hadoop分布式文件系统,源自谷歌公司 的GFS论文,发表于2003年10月,HDFS是GFS的开源实现。HDFS是Hadoop两个核 心技术之一,位于Hadoop生态系统的最底层,其他组件都是在HDFS的基础上组合或者使 用的,负责整个分布式文件的存储,也就是使用廉价的商用服务器来完成大量数据的存储, 数据只能一次性写入,可以多次读取数据,用于数据分析。HDFS在设计上把硬件出错作为 一种常态来对待,即使部分硬件(机器节点)发生故障时整个文件系统还是可以正常运行的, 因此,它具有高容错性、高可靠性的优点。此外,HDFS通过流式数据访问应用程序数据时, 具有很高的吞吐量,非常适合用来解决带有大型数据集的应用程序的数据存储问题。 2.YARN YARN(YeohrRsucsNegtao即运算资源调度系统, op2. tAnteeoreoitr), 是Hado0中 的资源管理系统,位于HDFS的上层。YARN的基本思想是将MRv1中的JobTracker的 资源管理和作业调度/监控两个主要功能拆分成两个独立的服务,一个是全局的资源调度器 ResourceManager(RM)和若干针对应用程序的应用程序管理器ApplicationMaster(AM), 该调度器是一个“纯调度器”,不再参与任何与具体应用程序逻辑相关的工作,而仅根据各个 52 大数据概论 应用程序的资源需求进行分配,资源分配的单位用一个资源抽象概念Container表示, Container封装了内存和CPU 。通过HDFS存储数据后,在对数据处理之前,必须要有相关 的框架去调度计算底层资源,底层这么多资源主要靠YARN框架去调度,YARN专门负责 调度内存、CPU和带宽等计算机资源。YARN的引入为Hadoop集群在利用率、资源统一 管理和数据共享等方面带来了巨大的好处。 3.MapReduce MapReduce源自谷歌公司发表于2004年12月的MapReduce论文,文中讲的 MapReduce是指HadoopMapReduce,它是谷歌公司MapReduce的开源实现。MapReduce 是继HDFS之后的Hadoop的另一个核心技术,是一个用于分布式并行数据处理的编程模 型,用于大规模数据集(大于1TB)的并行运算,它将作业分为Map和Reduce两个阶段。开 发人员为Hadoop编写MapReduce作业,并使用HDFS中存储的数据,Hadoop以并行的 方式将处理过程移向数据,从而实现海量数据的快速处理。简单地讲,MapReduce就是采 取“分而治之”的策略来实现对海量数据的处理,它把输入的数据集拆分成为多个独立的数 据块,然后分发给对应主节点下的各个分节点来共同并行完成,最后,整合各个节点的中间 结果得到最终结果。 此外,MapReduce不适合做实时计算,是专门做批处理和离线计算的,因此,做实时计 算时不要用MapReduce。 4.Spark Spark是由加州大学伯克利分校AMP实验室开发的通用内存并行计算框架,是一个实 现快速通用的集群计算平台。Spark扩展了MapReduce的计算模型,而且高效地支持更多 的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是非常重要的。 Spark的逻辑和MapReduce是一样的,也是用Map和Reduce函数去做数据处理,但是它 又不同于MapReduce。Spark是基于内存的计算,而MapReduce是基于磁盘的计算, MapReduce处理数据时,是先把数据写入磁盘中,待数据处理结束后,还要把数据写到分布 式文件系统中,而Spark对数据的全部处理都是在内存中执行的。因此,Spark要比 MapReduce更加高效,所以,现在很多企业都在用Spark,原来用MapReduce的企业也在逐 渐将其替换为Spark。 5.Tez Tez是Apache开源的、支持DAG(有向无环图)作业的计算框架,它直接源于 MapReduce框架。Tez的核心思想是把很多Map和Reduce作业进行进一步拆分,即Map 被拆分成Input、Procesor、Sort、Merge和Output,Reduce被拆分成Input、Shufle、Sort、 Merge、Procesor和Output等,经过分析和优化处理,形成一个大的DAG作业,从而提高 MapReduce作业的处理效率,它会分清哪些工作先做,哪些后做,哪些不需要重复做,这是 Tez的功能。Tez已被Hortonworks用于Hive引擎的优化,经测试,性能提升约100倍。 第3章大数据架构与Hadoop 53 6.Hive Hive是数据仓库工具,是由Facebook开源实现的,最初用于解决海量结构化的日志数 据统计问题的ETL工具。所谓数据仓库就是把大量的数据保存起来,对这些数据进行挖 掘,分析出有价值的数据信息,从而提供给企业来做决策分析。然而,相对于今天海量数据 的存储,沿用传统的数据仓库来存储数据是不能满足要求的,这时可以借助Hadoop平台实 现海量数据的存储,所以,现在很多数据仓库技术都已经转化到Hadoop平台去了,Hive就 是架构在Hadoop平台上的一个数据仓库,是完成批量数据处理的。它支持SQL语句,可 以用SQL语句去完成各种分析,虽然写的是SQL语句,但是Hive会把SQL语句转化为一 堆MapReduce作业后再去执行,所以说Hive就是基于Hadoop的一个数据仓库工具,是为 简化MapReduce编程而生的,非常适合数据仓库的统计分析,通过解析SQL转化成 MapReduce,组成一个DAG来执行。简言之,Hive的设计目标就是用传统SQL操作 Hadoop上的数据,让熟悉SQL的程序员也会使用Hadoop。 7.Pig Pig(ad-hoc脚本)由雅虎公司开源,其设计动机是提供一种基于MapReduce的ad-hoc (计算在query时发生)数据分析工具,是一种编程语言。Pig定义了一种数据流语言——— PigLatin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析 Hadoop数据集的脚本语言(PigLatin)。其编译器将PigLatin翻译成MapReduc 程序序 列,将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析。简单地说, Pig简化了Hadoop常见的工作任务,是实现流数据处理的,与Hive有所不同,属于轻量级 的分析。可以在Hadoop平台上,通过Pig组件写出类似SQL的语句,然后逐一执行,也可 以把Pig写出来的多条语句嵌套到大型应用程序中执行,就像SQL语句可以嵌套到C#中 执行一样,所以它是一个轻量级的编程语言。相对于MapReduce来说,它的代码更简单,虽 然MapReduce屏蔽了非常多的复杂性,但是它的编程仍然有点复杂,哪怕一个简单的作业 都要写一个完整的代码段,而Pig不用,就像SQL语句一样,可以写一条执行一条,马上就 可以出结果,所以说很多程序员都在用Pig,就是因为它比MapReduce编程要简单得多,它 是轻量级的编程语言。 8.Oozie Oozie是作业流调度系统,即Hadoop的工作流管理系统,用于协调多个MapReduce作 业的执行。Oozie能够处理大量的复杂数据,基于外部事件(包括定时和所需数据是否存 在)来管理执行任务。现实中,在进行应用程序开发时,一个完整的工作可能需要把它分解 成很多个工作环节,和不同应用程序去配合完成一个工作,这个时候需要工作流系统来定 义。在Hadoop平台上,有一个专门的工作流管理系统工具,就是Oozie。 9.ZooKeeper ZooKeper(分布式协作服务)源自谷歌公司的Chubby论文,发表于2006年11月, 54 大数据概论 ZooKeper是Chubby的实现版。ZooKeper的主要目标是解决分布式环境下的数据管理 问题,如统一命名、状态同步、集群管理、配置同步等。Hadoop的许多组件依赖于 ZooKeper,它运行在计算机集群上,用于管理Hadoop操作。 ZooKeper就是动物园管理员,它是用来管大象(Hadoop)、蜜蜂(Hive)和小猪(Pig) 的管理员,是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统。 ZooKeper是提供分布式协调一致性服务的,如一些分布式锁或集群管理等都是通过 ZooKeper实现的。在HBase集群中有很多机器,要把哪个机器选出来作为管家去管理其 他的机器呢? 不用操心,ZooKeper会帮你把它选出来,所以说,ZooKeper相当于一个大 管家,很多Hadoop组件都依赖它。 10.HBase HBase即分布式列存数据库,是构建在HDFS之上的非关系型分布式数据库,是面向 列存储的数据库。HDFS是按照顺序进行逐一读写的,而HBase采用了BigTable的数据 模型对大量数据进行快速的读写,可以支持几十亿行、上百万列数据的超大型数据库,提供 了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来 处理,它将数据存储和并行计算完美地结合在一起。HBase将ZooKeper用于自身的管 理,以保证其所有组件处于运行中。 11.Flume Flume是专门用来做日志收集的,是一个高可用、高可靠的分布式的、海量日志采集、聚 合和传输的系统,用于从单独的机器上将大量数据通过采集、聚合并移动到HDFS中。因 此,通常在做很多流式数据分析的时候,如用户访问京东、淘宝时形成的用户点击流数据,这 些数据都是实时生成的,如果想对这些实时的流数据进行实时分析,就需要用Flume工具 来帮忙做日志相关收集,如在美团系统中,就是采用Flume工具进行日志收集。 12.Sqoop Sqoop是一个数据同步工具,主要用来实现在传统数据库(指关系数据库)与Hadoop 之间的数据传递。大数据时代,很多原来传统的数据库随着数据量的增加,需要用到 Hadoop平台上的技术去做数据分析,这时,就需要把原来这些关系数据库(如MySQL 、 Oracle等)中的有关数据直接导入Hadoop平台的HDFS 、HBase、Hive中的任意一个里面, 而无须重新编写程序。当然,也可以使用Sqoop工具把Hadoop上的数据导入关系数据库 中。因此,Sqoop工具可以实现传统数据库与Hadoop之间数据的转换。 13.Ambari 最顶端的是Ambari工具,它是一种基于Web的工具,致力于简化Hadoop的管理,是 一个集群安装部署的工具,是Hadoop快速部署工具,支持ApacheHadoop集群的创建、管 理和监控,会非常智能化地部署和管理一整套Hadoop平台上的各个组件。 第3章大数据架构与Hadoop 55 3.4 Hadop的安装 在开始具体安装之前,首先需要选择一个合适的操作系统。尽管Hadoop本身可以运 行在Linux、Windows以及其他一些UNIX系统(如FreBSD 、OpenBSD 、Solaris等)之上, 但是Hadoop官方真正支持的作业平台只有Linux。这就导致其他平台在运行Hadoop 时,往往需要安装很多其他的包来提供一些Linux操作系统的功能,以配合Hadoop的执 行。这里选择Linux作为系统平台,演示在计算机上如何安装Hadoop、运行程序并得到最 终结果。当然,其他平台仍然可以作为开发平台使用。对于正在使用Windows操作系统 的用户,可以通过在Windows操作系统中安装Linux虚拟机的方式完成实验。在Linux 发行版的选择上,倾向于使用企业级的、稳定的操作系统作为实验的系统环境,同时,考虑到 易用性以及是否免费等方面的问题,最终选择免费的Ubuntu发行版作为推荐的操作系统。 3.1 安装前的准备 4. 1.Linux版本的考虑 当前Linux发行版比较多,常用的有Ubuntu、CentOS 、LinuxMint和PCLinuxOS等 都是它的主流版本。为了学习需要,选择最易使用的Ubuntu作为Hadoop的操作系统。 此外,这里还要考虑安装32位还是64位,如果机器内存低于2GB,建议安装32位的 Linux系统。 2.安装双系统还是安装虚拟机 计算机配置比较低、内存小于4GB,建议安装双操作系统,一般先安装Windows系统 , 再安装Ubuntu 。 计算机配置比较好、内存在4GB以上,可以选择安装虚拟机。在配置低的计算机上 运 行Linux虚拟机,运行速度很慢,一般的学生机和学校机房的计算机,应选择安装双操 作 系统 。 3.Hadoop安装选择 Hadoop主要有如下3种安装模式。 (1)单机模式,是Hadoop的默认模式,完全运行在本地计算机上,不是分布式模式,无 须进行其他配置。该模式主要用于开发、调试MapReduce程序的应用逻辑。 (2)伪分布式模式,是指在一台机器上模拟一个小的集群来运行Hadoop,但是集群中 只有一个节点,该节点既作为名称节点(NameNode),也作为数据节点(DataNode),同时, 读 oest.l和hdsst. 取的是HDFS中的文件。安装时,需要先修改cr-iexmf-iexml两个配置文 件,Hadoop可以在单节点上以伪分布式的方式运行。 (3)分布式模式:实现完全分布式的安装,使用多个节点构成集群环境来运行 Hadoop。NameNode和DataNode是分布在不同机器上的,这是真正的分布式。 每种模式都有其优点和缺点。完全分布式模式显然是唯一一种可以将Hadoop扩展到 56 大数据概论 机器集群的方式,但它需要更多的配置工作,更不用提所需要的机器集群。单机或伪分布式 模式的设置工作是最简单的,但它与用户的交互方式不同于全分布式模式的交互方式。 4.Linux的一些常识操作 接下来介绍Linux的几项常识操作。 (1)Shel 是一个命令解析器,它接收用户命令,然后调用相应的应用程序,类似于DOS 下的command命令。 (2)sudo命令,是Ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执 行一些需要root权限执行的操作。当使用sudo命令时,需要输入当前用户的密码。 (3)输入密码,在Linux的终端中输入密码,终端不会显示任何当前输入的密码,也不 会提示已经输入了多少字符密码。因此不要误以为键盘没有响应。 3.2 安装VitaBx 4.rulo VirtualBox是由德国Innotek公司开发,由SunMicrosystems公司出品的软件,使用 Qt编写,在Sun被Oracle收购后正式更名成OracleVMVirtualBox。目前,常用的虚拟机 软件有VirtualBox和VMware,VirtualBox是一款开源的虚拟机软件,而VMware是商业 软件,需要付费。此外,VirtualBox号称是免费虚拟机软件中最强的,拥有丰富的特色和出 色的性能,在虚拟安装中程序体积小。相对于同类产品VMware400~500MB的体积, VirtualBox只有约120MB,非常小巧。VirtualBox的功能简单实用,克隆系统、共享文件、虚拟 化等功能一样不缺。因此,本书选用的是VirtualBox软件,VirtualBox下载地址为htp// s: www.itabx.rg/, -rulonos上。 vruloo如图36所示。下载VitaBx虚拟机软件安装在Widw 图3- 6 VirtualBox网站 然后,单击Down0,会跳转到如图37所示的页面。下载图37中标 注的两个包(一个是VirtualBox安装包,另一个是VirtualBox扩展包),安装包根据计算机 的操作系统下载合适的版本,安装路径建议不选C盘。 这里需要特别注意的是,如果安装的是64位的Ubuntu系统,则在安装VirtualBox前, 要进BIOS开启CPU的虚拟化,将Intel(R)VirtualizationTechnology选项设置为 loadVirtualBox6.- 第3章大数据架构与Hadoop 57 图3- 7 VirtualBox下载页面 Enabled,这样就开启了虚拟化功能,如图3-8所示,否则,在虚拟机中找不到64位 的 Ubuntu。如果安装失败,需要考虑安装计算机的CPU是否支持虚拟化,可以用SecurAble 软件对CPU进行测试。 图3- 8 CPU 虚拟化设置 3.4.3 安装Linux发行版Ubuntu Ubuntu是一个基于Debian的GNU/Linux操作系统,支持X86 、64以及PPC架构。 Ubuntu每隔6个月发布一个版本,即每年的4月和10月。Ubuntu对于新手是比较友好 的一个Linux发行版。前面说到Linux的发行版本比较多,本书安装Linux发行版 Ubututu下载地址为hs:uutcownod/dstp,可以下载 nu,Ubntp//www.bnu.om/dlaekoUbut14.4.rulBox上安装任意 nu04或者其他版本的镜像文件。要先在3.2节中装好的Vita 一个虚拟机,然后在这个虚拟机上安装Linux系统,具体安装步骤如下。 1.安装一个名为Ubuntu的虚拟机 第1步,在Windows系统中,打开VirtualBox软件,在弹出的VirtualBox管理器中单 击“新建”按钮,如图3-9所示,创建一个虚拟机。 第2步,在弹出的“新建虚拟电脑”窗口中(见图3-10), 给虚拟机命名为Ubuntu,然后在“类型”下拉框中选择 Linux。需要注意的是,如果之前选择操作系统的版本为32位 Ubuntu系统,则在“版本”下拉框中选择Ubuntu(32bit)。图3- 9 VirtualBox管理器界面 58 大数据概论 如果之前选择操作系统的版本为64 位Ubuntu系统,则在“版本”下拉框中选择Ubuntu (64bit)。选择虚拟机“内存大小”,如果计算机本身内存为4GB 的话,可以设置虚拟机内存 为1GB 左右,如果计算机本身内存为8GB,可以设置虚拟机内存为3GB 左右。一般情况 下,如果虚拟机有2GB 以上内存,Ubuntu系统会运行比较流畅。这里设置虚拟机的内存为 2048MB,然后单击“下一步”按钮。 图3-10 VirtualBox新建虚拟机 第3步,在“新建虚拟电脑”窗口中,选择“现在创建虚拟硬盘”选项,然后选择虚拟硬盘 文件类型为“VDI(VirtualBox磁盘映像),(”) 如图3-11 所示。然后,单击“下一步”按钮。 图3-11 创建虚拟机硬盘 第4步,在“创建虚拟硬盘”窗口中设置虚拟硬盘的存储方式,虚拟硬盘默认选择“动态 分配”,如图3-12 所示。然后,单击“下一步”按钮。 第5步,选择文件存储的位置和容量大小(默认大小为10GB), 如图3-13 所示。这里可 以根据需要设置文件存储位置和存储文件的容量大小,如果计算机配置较好,建议设置 20GB 左右。然后,单击“创建”按钮。这时,就创建好了一个名为Ubuntu的虚拟机。 第3章大数据架构与Hadoop 59 图3-12 选择虚拟硬盘动态分配 图3-13 文件位置和大小 2. 在名为Ubuntu的虚拟机上安装Linux系统 通过上面的5个步骤,就成功创建了一个名为Ubuntu的虚拟机。接下来在这个虚拟 机上安装Linux系统,具体创建方法如下。 在如图3-14 所示的界面上单击“设置”按钮,弹出 “Ubuntu-设置”窗口,选择“存储”,在“存储介质”中选择“没有 盘片”,然后,在“属性”中选择“选择一个虚拟光盘文件”命令, 在弹出的窗口中找到已经下载的Ubuntu镜像文件,如图3-15 所示。单点击OK 按钮,弹出“安装UbuntuKylin”界面,如 图3-16 所示。语言选择“中文(简体)”,然后单击“安装Ubuntu 图3-14 虚拟机设置 Kylin”按钮。接下来进入Ubuntu系统的安装界面,安装时, 只需要按照提示,进行一些类似创建登录用户之类简单的设置,就可以安装成功。至此,就 成功在一个名为Ubuntu虚拟机上安装了Linux系统。 Ubuntu系统安装成功后,需要重启虚拟机系统,而不是Windows系统,对Windows系 统而言,安装的虚拟机只相当于一个软件。因为是在Windows上通过虚拟机安装的Linux 系统,所以,下次重新登录Linux系统时,需要先运行VirtualBox,单击图3-14 中的“启动”