《Hadoop技术详解》一第1章 简介

  1. 云栖社区>
  2. 博客>
  3. 正文

《Hadoop技术详解》一第1章 简介

异步社区 2017-05-02 16:21:00 浏览989
展开阅读全文

本节书摘来异步社区《Hadoop技术详解》一书中的第1章,第1.1节,作者: 【美】Eric Sammer 译者: 刘敏 , 麦耀锋 , 李冀蕾 , 等,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 简介

Hadoop技术详解
在过去的几年里,数据的存储、管理和处理发生了巨大的变化。各个公司存储的数据比以前更多,数据来源更加多样,数据格式也更加丰富。这不是因为我们变成了林鼠(译注:林鼠喜欢收集各种物品),而是因为我们想要创造出可以让我们进一步了解某一领域的产品、功能以及对其智能预测(这个领域可以是指用户、数据搜索、机器日志或者是某机构的任何信息)。为了更好地服务其成员,各组织正在寻找新的方式来使用那些曾经被认为没有什么价值或者存储起来过于昂贵的数据。采集和存储数据只是其中的一部分工作,但现在处理这些数据并从中挖掘有用信息已经成为每一个现代商业组织日常运营中的重要工作。

数据的存储、处理存在困难,并不是个新问题。在近几十年里,商业金融机构防欺诈、运营机构发现异常、广告组织做人口统计分析……很多类似的情况下,我们都不得不存储处理大量的数据。但是近来,数据的容量、处理的速度、数据的种类正在变化,某些情况更是加剧了变化。这很有意义,因为不少算法的发展得益于此。比如,电商的产品推荐,可以向到访者展示他想购买的产品列表,希望其中总有一款可以满足他的需求。这明显不是一个明智的策略,不过这是一个好的开始。我们怎样才能向他们只展示正确的产品?基于他们以前的浏览记录也许更有意义。如果知道他们已经购买的产品会更有帮助,例如知道买家已经购买过某个品牌的电脑,也许他会对相应的配件以及升级换代的新产品更加感兴趣。[1]一个常用的技术是通过相似行为(例如购买模式)来对用户进行分类,对同类人群推荐其他的人购买的产品,无论是什么样的解决方案,背后的推荐算法都必须处理大量数据,对问题空间越了解就越容易得出更好的结论(算法有更好的功效),同时,客户更满意,商家挣更多的钱,减少欺诈,网络环境更加健康安全。

Apache Hadoop能为刚才提到的各种应用提供一个可编程的、经济的、可伸缩的平台。这个分布式系统由分布式文件存储系统(HDFS)以及计算框架(Map/reduce)组成。HADOOP是一个开源项目,能为大量数据集提供批量数据处理能力。Hadoop被设计成不光要容忍软硬件的不可靠,还要对此习以为常。Hadoop使用没有特殊硬件或特殊网络基础设施的普通的服务器群来形成一个逻辑上可存储计算的集群,这个集群可以被很多团体和个人共享。Hadoop Map/Reduce提供并行自动计算框架,这个框架隐藏了复杂的同步及网络通信,呈现给程序员的是简单的、抽象的接口。跟其他分布式数据处理系统不一样, Hadoop在数据存储的机器上运算用户提供的数据处理逻辑,而不是通过网络来搬动这些数据,这对性能来说是一个巨大的利好。

下面介绍一下Hadoop的历史。Hadoop 基于谷歌的两篇论文,当时许多公司都遇到了密集型数据的处理问题,Google也是其中之一。一篇发表于2003年的论文描述了一个用来存储海量数据、可编程、可伸缩的分布式文件系统,该文件系统被称为Google文件系统,或简称GFS。除了支持数据存储,GFS还支持大规模的密集型数据的分布式处理应用。接下来的一年,另外一篇名为“MapReduce:大集群中一种简单的数据处理框架”的论文被发表了,该论文定义了一种编程模型及其相关的框架,它能够成规模地以一个单独的任务通过上千台的机器处理上百TB的数据,并能提供自动并行计算和容错性。GFS和MapReduce相互协同,可在相对便宜的商用机器上构建大数据处理集群。这两篇论文极大地促进了Hadoop分布式文件系统及MapReduce的开发。

业界对Hadoop的兴趣和投资促成了开源和商业软件生态系统的形成,仅Apache软件基金会,使用Hadoop或者与之集成的项目就不断涌现。其中一些项目使得编写MapReduce任务更加简单以及更容易理解,而其他的项目则专注于如何通过HDFS存取数据、简化操作、使之能在云环境下部署等。以下是一些应当了解的流行项目。

Apache Hive
Hive是一种类关系型数据库的抽象,给程序员提供类SQL的接口,并把类SQL语句转换成一个或多个可在集群上执行的MapReduce任务。SQL则是不少开发人员、分析师、第三方软件大量运用的语言(Hive的SQL又称HiveQL,是实现了通用SQL标准的一个子集)。Hive利用了SQL的优势,为使用Hadoop及编写MapReduce任务提供了一条学习捷径。正是因为这个原因,Hive是至今Hadoop生态系统中最流行的项目之一。Hive将HDFS文件定义成类似表的结构,当运行一个查询的时候则从那些文件里面抽取记录,但数据实际上并没有改变,只是被解析而已。HiveQL语句在运行时被解释成为预编译的MapReduce组件的集合,执行这个集合相当于运行SQL语句。

Apache Pig
类似于Hive,Apache Pig 用于简化MapReduce代码的编写,因此无需人人都会写Java。用户用高级脚本语言设计数据处理任务,Pig用于建立一个执行计划并执行一系列的MapReduce任务来完成那些繁重的工作。万一Pig不满足特定功能,开发人员亦可以用Java来编写自定义函数以扩展原生函数及操作。Hive也支持类似扩展,如果熟悉Perl、Python、Ruby、javascript,甚至是Shell脚本,那么早上学习Pig的语法,中午就可运行MapReduce运算任务了。

Apache Sqoop
Hadoop并不想取代数据库,相反它想成为数据库的朋友。能否与关系型数据库交换数据成为与Apache Hadoop集成的关键点。Sqoop是“SQL至Hadoop”的简写,提供Hadoop和几乎所有有JDBC驱动的数据库之间的双向数据传输。利用MapReduce,Sqoop不用写一行代码就能并行完成这些操作。

为取得更好的性能,Sqoop支持数据库特定的插件,这些插件可以利用关系数据库管理系统(RDBMS)的原生功能,无需因使用JDBC而带来开销。很多连接器是开源的,当然也有免费或付费版。现在,Sqoop支持MySQL和PostgreSQL之间的原生连接器;也有免费连接器支持Teradata、Netezza、 SQL server、Oracle,可以从软件提供商的网站下载得到。

Apache Flume
Apache Flume是一种流数据的收集和汇聚系统,用来传输海量数据到像Hadoop这样的系统中去。它支持原生连接并支持向HDFS直接进行写操作,能简化来自于RPC服务、log4j附加器、syslog甚至操作系统命令输出的流数据的传输。数据可以按特定路线发送、负载均衡、备份到多个目的地,并通过一层代理将来自数千节点的数据进行汇聚。

Apache Oozie
在大型运算集群中,一个工作流中有大量MapReduce任务需要相互协作是非常常见的。Apache Oozie是一种工作流引擎和调度器,可以在Hadoop集群上管理协调大规模计算任务。工作流可以被时间或者事件触发,比如数据到达某个目录,也可以制定一些策略,比如错误处理逻辑。Oozie是一种REST服务,即可编程控制工作流和状态显示。

Apache Whirr
Apache Whirr是为了简化在类似亚马逊的AWS云环境上搭建和部署临时集群的复杂度而开发的。Whirr在本地或云中以命令行方式运行——创建实例、部署Hadoop、配置软件,也能灵活地销毁实例。Whirr在内部实现上使用了强大的jclouds库,因此它是云平台中立的。开发人员使Whirr同时支持亚马逊EC2和Rackspace云。除了Hadoop,Whirr也能配置Apache Cassandra、Apache ZooKeeper、Apache Hbase、ElasticSearch、Voldemort和Apache Hama。

Apache HBase
Apache HBase 是建立在HDFS上的低延时、分布式的非关系型数据库。HBase模仿Google的BigTable,提出了一个灵活的数据模型,拥有额外的属性和简单的API。HBase数据以一种横向为区域(region)、纵向为列族的表的形式存储。HBase中的表有数百TB甚至PB是很普遍的。过去的几年里,HBase从Facebook类知名消息平台网站那里获益良多。而今,HBase已成为主流产品中处理实时海量数据的利器。

Apache ZooKeeper
Apache ZooKeeper是一匹吃苦耐劳的驮马,它是一个可靠的分布式协同工作系统,支持分布式应用群。这些应用群需要一系列服务,如领导选举、加锁、群组会员、位置服务、配置维护。使用ZooKeeper可以不用重新实现随之而来的复杂的协同工作和错误处理功能。事实上,这正是不少Hadoop生态系统中的项目选择ZooKeeper的原因(最有名的案例就是HBase)。

Apache HCatalog
生态系统的新兵——Apache HCatalog向生态系统内的各类应用提供共享模式和数据存取的机制(译注:这是基于Apache Hadoop之上的数据表和存储管理服务)。HCatalog的长期目标是让一些工具能互操作,如Apache Hive和 Pig可以共享元数据。

Hadoop的生态系统在商业世界里日益繁荣,不少公司(如Oracle、SAS、MicroStrategy、 Tableau、Informatica、Microsoft、Pentaho、Talend、HP、DELL)在他们的产品中对Hadoop进行了支持或集成。Hadoop很快会成为数据中心处理海量数据的事实标准,或者说越来越多的人相信Hadoop已经是标准了。

如果你在阅读本书,那么你可以能是开发者,想了解在产品开发环境下的系统管理;也可能是应用或系统管理员,计划部署或运营集群,想寻找其他系统解决方案。本书不会过多地谈论如何编写应用、API调用或烦人的代码开发问题。如果你有这方面的需求,另一本好书《Hadoop Definitive Guide》(《Hadoop权威指南》,作者为Tom White,由O’Reilly出版)可能更加适合你。不过,管理员确实是计划、安装、配置、维护、监控Hadoop集群的重要角色。Hadoop是相对低级的系统,它的许多功能严重依赖于宿主机的操作系统,开发人员和管理员协同工作才能将其功效最大化。对Hadoop的操作会直接影响最终结果。

了解和接触Apache Hadoop是一件特别令人兴奋的事情,诚然,大数据正时髦,但更重要的是,Hadoop本身处在迅猛发展变化的上升期。这一两年来每个新版本总会给开发和管理人员带来许多新功能。所以说Hadoop正处在青春期,快速地成长和推广会让我们受益,但偶尔也会带来尴尬。通过本书你会发现,次要版本之间也存在显著的变化。无可否认,你得跟上变化的节奏而不要让其成为障碍。如果需要,第4章值得你花些时间阅读,这里会介绍常用的一些版本。

本书希望成为产品开发环境下应用Hadoop的实用指南。已经熟悉Hadoop的人可能已经知道安装方法或者对基于CPU利用率来优化调整Map数量持不同的意见,这很好,也是我们所期待的。本书的目标不是列举所有可能的应用场景,而是把注意力集中在部署过程中的关键步骤。

第2、3章提供了一些必要的背景知识,比如HDFS和Mapreduce是什么,为什么会存在,原理上他们如何工作。第4章会从硬件选型、基本资源计划、操作系统选择和配置、Hadoop版本选择、Hadoop集群的网络配置等方面给予Hadoop部署详细说明。第5章是最重要的部分,讲述Hadoop安装配置,安排了一些专题来列举关键属性。如果你对安全要求比较高或想了解Hadoop的身份确认、接入、授权等问题则需要仔细阅读本章。第6、7章介绍了多用户群组共享一个大的集群的基本要点,以及如何遵从服务协议管理和分配资源并从中受益。第8章阐述运维中一些常见的操作及任务。第9章是以备不时之需的,覆盖复杂分布式系统(如Hadoop)故障排查的理论和实践,包括一些实战例子。第10章讲解怎样有效监控Hadoop 集群。第11章提供了一些基本的工具和技术进行备份Hadoop和处理灾难性故障。

网友评论

登录后评论
0/500
评论
异步社区
+ 关注