《深入理解Hadoop(原书第2版)》——第2章 Hadoop中的概念 2.1 Hadoop简介-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《深入理解Hadoop(原书第2版)》——第2章 Hadoop中的概念 2.1 Hadoop简介

简介:

本节书摘来自华章计算机《深入理解Hadoop(原书第2版)》一书中的第2章,第2.1节,作者 [美]萨米尔·瓦德卡(Sameer Wadkar),马杜·西德林埃(Madhu Siddalingaiah),杰森·文纳(Jason Venner),译 于博,冯傲风,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章

Hadoop中的概念

价格实惠的普通计算机经常满足不了应用程序的计算资源需求,很多企业的业务应用程序已经不再适合在单台廉价的计算机上运行。这时,一个简单昂贵的解决方案就是购买一些具有多CPU的高端服务器,这通常需要巨额资金。只要能买到最高端的服务器,这个解决方案就能够达到理想的效果,但预算往往是个大问题。另一个替代方案,就是搭建一个高可用的集群,这个集群经过专业的安装和精心的管理服务,使用起来就像一台计算机一样。很多高可用的集群都是企业专有的而且价格也十分贵。

为了获取所需的计算资源,一个更经济实惠的解决方案是云计算。面对大数据量的处理需求,一个常用的方法就是把它们分割成互不依赖的小份数据来分别计算处理,这就是所谓的单指令多数据流(single-instruation, multiple-data, SIMD)的数据计算模式。Hadoop为这样的云计算需求提供了一套开源的计算框架和一套分布式文件系统。

本书是一本利用Hadoop进行开发工作的实用指南。Hadoop项目由Apache Software Foundation来负责管理。本章会为大家讲解Hadoop的核心概念思想。为了后续章节更有效地学习,你需要安装并运行Hadoop。

2.1 Hadoop简介

Hadoop是以谷歌在2004年发表的一篇关于MapReduce的论文为基础开发的。Hadoop项目开始于2005年,那个时候,Hadoop项目是开源的网页搜索引擎Nutch项目下的一个子项目。后来,Hadoop从Nutch项目中分离出来,并最终成为了Apache基金会的顶级项目。

现在,MapReduce已经成为业内家喻户晓的Hadoop框架。同时,围绕Hadoop项目诞生了好几家公司来提供Hadoop系统的支持、咨询和培训。

就其自身来讲,Hadoop是一个基于Java语言的MapReduce框架。随着Hadoop平台被越来越多的企业采用,Hadoop需要加入对非Java语言的支持。下面列出了Hadoop的改进及其子项目,这些都促使Hadoop在企业中的应用越来越广:

  • Hadoop Streaming—任何命令行脚本都可以通过Streaming调用MapReduce框架。UNIX脚本程序员、Python程序员等都可以使用MapReduce来开发一些临时任务。
  • Hadoop Hive—使用MapReduce平台的用户发现,开发一个MapReduce程序往往需要大量的编码工作,而且易于出错且难于测试。这就需要一个更有效的类似SQL的语言,这样一来,用户就可以关注于业务问题而不必关心类似SQL命令功能的底层实现(比如WHERE子句、GROUP BY子句、JOIN子句等)。Apache Hive可以把海量数据集放入数据仓库中,用户可以编写类似SQL语句的Hive查询语句来查找数据。Hive引擎把Hive查询语句透明地转换为底层MapReduce任务来执行。高级用户可以使用Java语言来编写用户自定义函数(UDF)。Hive也支持标准的ODBC、JDBC数据库驱动。Hive还可以用来开发商业智能(Business Intelligence, BI)分析程序去处理分析存放在Hadoop中的数据。
  • Hadoop Pig—使用Pig的目的与使用Hive的目的是一样的,但是Hive是一个类SQL语言,属于陈述性的语言;而Pig是一种过程性语言,非常适合数据管道应用场景。Pig对数据处理管道程序的程序员非常有吸引力(比如,SAS程序员)。它也非常适合开发抽取、加载和传输(ETL)类型的程序。
  • Hadoop HBase—所有之前介绍的项目,包括MapReduce程序,都是批处理程序。现在有个强烈的需求就是在Hadoop中实时查询数据。Hadoop并不是一个原生的键/值存储系统。拿类似Facebook的社交网站做例子,如果你想查看一个朋友的用户资料,你希望能够立即得到结果(而不是经过一个长时间的批处理任务执行)。这样的场景用例就是开发HBase平台的目的所在。

我们刚刚粗略地介绍了Hadoop的由来和它的子项目。前面的例子也说明了Hadoop系统是因何发展而来。Hadoop系统最早是作为用于索引海量文本数据的MapReduce引擎而启动的项目。后来慢慢地发展成为一个通用的大数据处理模型。这个大数据模型可以支持标准的企业级用例,比如DW、BI、ELT或者实时缓存查询。MapReduce是一个非常有用的编程模型,它在前文刚刚提到的标准企业级用例(ETL、 DW)中得到了广泛应用,使其在大数据计算处理领域成为主流。同样重要的是,现在各个企业都在积极应对海量数据处理带来的挑战。

在很长的一段时间内,Hadoop系统只能做到用户提交任务后,以先进先出(FIFO)的模式在集群上执行任务。这样的话,一些运行耗时、重要性低的任务会占用大量的集群资源,而运行时间短、重要性高的任务迟迟无法运行。为了解决这样的问题,Hadoop中出现了更加复杂的任务调度器,比如公平调度器(Fair Scheduler)和计算能力调度器(Capacity Scheduler)。但是在Hadoop 1.x系列(版本号小于0.23)中,一些系统本身设计之初的决策导致了集群在可扩展性方面的限制。

Yahoo公司的工程师们发现,当Hadoop系统集群的计算节点数量达到数千台量级的时候,集群就会存在一些可扩展性问题(详细的情况请参见链接:http://developer.yahoo.com/blogs/hadoop/scaling-hadoop-4000-nodes-yahoo-410.html )。当人们对Hadoop系统的这些可扩展性问题越来越清晰之后,Hadoop的工程师们讨论思考,并重新评估了Hadoop系统原型设计中的一些基础假设。最终,Hadoop系统平台的核心架构被重新设计。由此,Hadoop 2.x(版本号大于0.23的Hadoop系统)诞生了。

本书在全面介绍Hadoop 2.x的同时,也会适当地提到Hadoop 1.x。这样你会深刻地理解Hadoop 2.x发生这些变化的原因。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: