Hadoop应用开发技术详解(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-27 08:57:39

点击下载

作者:刘刚

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Hadoop应用开发技术详解

Hadoop应用开发技术详解试读:

前言

为什么要写这本书

三年前接触Hadoop的时候,Hadoop在国内还没有普及,学习的资料也是少之又少,只能看英文文档一步一步操作,出现错误只能自己解决或者查看英文资料,有时候一个问题好几天才解决,学习起来非常的麻烦。

古时候,人们用牛来拉重物,当一头牛拉不动一根圆木的时候,他们不曾想过培育更强壮的牛。同样,我们也不需要尝试更大的计算机,而是应该开发更多的计算系统。简单说,数据量越来越大,我们的大型机负担不了,因此集群就产生了,而Hadoop就是为分布式计算和分布式存储而诞生的。最近两年,随着互联网的快速发展,公司的日志量成数量级增长,从而导致使用Hadoop的公司也越来越多,Hadoop人才也就越来越供不应求,尤其是有丰富工作经验的人才。

在开源的Hadoop社区里,很多人问我怎么学习Hadoop,学习Hadoop需要什么样的基础,如何才能成为一个Hadoop的技术大牛。为了帮助更多的人,我决定写本书,将我对Hadoop的理解和实战经验与大家分享。希望帮助读者在学习Hadoop的道路上少走弯路,避免一些不必要的时间付出。读者对象

本书适合以下读者阅读。

❑大数据爱好者

❑Hadoop入门者

❑海量数据处理的从业人员

❑有Java基础,想学习Hadoop的开发者

❑Hive、HBase和Mahout的爱好者

❑具有1~3年使用Hadoop经验,想进一步提高能力的使用者

❑开设相关课程的大专院校如何阅读本书

本书共12章。

第1章是Hadoop概述,互联网时代什么最重要——数据!大数据时代什么工具最流行——Hadoop!本章主要从大体上介绍Hadoop,让读者对Hadoop有个大体的印象。

第2章主要是对Hadoop安装进行一步一步地详解,包括Hadoop的单机模式、伪分布式模式以及分布式模式,让读者了解Hadoop的安装过程。

第3章是MapReduce快速入门,通过一个实例介绍MapReduce开发的整个过程。包括环境的准备、Mapper和Reducer代码的编写、打包、部署和运行的一整套流程。这套流程对以后MapReduce的开发奠定了基础。此外,介绍了MapReduce开发遇到的常见错误,以及解决方法。

第4章本章详细讲解了Hadoop分布式文件系统(HDFS),让读者对HDFS有一个全面的了解。HDFS是Hadoop里面的一个核心组件,任何基于Hadoop应用的工具都要用到HDFS,学习本章对Hadoop系统的维护有很大的帮助。

第5章本章主要讲Hadoop I/O底层的知识,让读者了解Hadoop底层的一些原理,比如数据在Hadoop上是怎么传输的。学完这章对Hadoop的输入和输出、序列化和反序列化、Writable类型等有进一步的理解。

第6章主要介绍MapReduce的工作原理,讲解了JobTracker、TaskTracker、任务的调度、任务工作的原理以及MapReduce的Shuffle和Sort机制等,此外还介绍第二代MapReduce(YARN)。通过本章内容的学习,将会对日后MapReduce编程开发奠定基础。

第7章主要介绍三部分内容,Eclipse的MapReduce插件安装、利用插件调试MapReduce代码,以及MapReduce单元测试。目的是提高读者编写MapReduce的调试、测试的效率。选择和使用一个好的工具是项目成功的一半。

第8章详细讲解了MapReduce编程开发用到的知识点,如Combiner、Partitioner、DistributedCache等。全面介绍了Mapper和Reducer两个抽象类,最后介绍了如何使用Hadoop Streaming接口开发MapReduce程序。

第9章介绍了MapReduce的一些高级应用、算法等知识点,算是对第8章学的知识进行应用,本章内容是MapReduce开发和Hadoop系统调优常用的知识点,希望读者能够掌握,为MapReduce的算法开发和调优打下基础。

第10章对Hive的知识点和使用做了介绍。Hive是基于Hadoop的一个数据仓库,支持类似SQL语句来替代MapReduce,这使不会写代码的数据分析师也能利用Hadoop平台对海量数据进行分析,如DBA。Hive工具现在已经非常成熟,使用的人也越来越多。

第11章介绍了HBase的安装和Shell操作、MapReduce操作HBase等。HBase是一个基于列存储的NoSQL数据库,不同于一般的NoSQL数据库,HBase是一个适合于非结构化数据存储的数据库。

第12章介绍了Mahout算法框架的安装和使用。本章介绍的常用知识是入门的最佳实战。Mahout是非常优秀的基于MapReduce的算法框架。Mahout工具在商品推荐、电影推荐、广告推荐等领域应用非常广泛。

附录A为Hive内置操作符与函数。附录B为HBase默认配置解释。附录C为Hadoop三个配置文件的参数含义说明。

其中第8章和第9章侧重于Java开发MapReduce的用户,如果你是一名有经验的Hadoop用户,并且想学习MapReduce开发,可以直接阅读这两章的内容。但是如果你是一名初学者,请一定从第1章的基础理论知识开始学习。勘误和支持

除封面署名外,参加本书编写工作的还有:向磊、艾男、曾泽、胡畔、郭洁、童小军、王虎、李晋博、林斌、闫越等。由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,[1]恳请读者批评指正。书中的全部源文件可以从华章网站下载,我也会定期将相应的功能更新及时更正出来。可以将书中的错误和遇到的任何问题,发邮件到jaylg2010@gmail.com。如果你有更多的宝贵意见,也欢迎发送邮件,期待能够得到你们的真挚反馈。致谢

首先要感谢Doug Cutting,他开创了一款影响整个互联网领域的开源平台——Hadoop。

感谢机械工业出版社华章公司的杨福川老师,在这一年多的时间始终支持我的写作,你的鼓励和帮助引导我顺利完成全部书稿。感谢编辑白宇对稿件的认真修改,你提出的一些写书注意事项,让我受益匪浅。

感谢胡畔老师对我的支持和鼓励。

最后感谢我的爸爸、妈妈,感谢你们将我培养成人,并时时刻刻为我灌输着信心和力量!

谨以此书献给我最亲爱的家人,以及众多热爱Hadoop的朋友们!

[1]参见华章网站www.hzbook.com。——编辑注第1章Hadoop概述

Hadoop是一个开发和运行处理大规模数据的软件平台,是Apache的一个用Java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。1.1 Hadoop起源

Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。1.1.1 Google与Hadoop模块

Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用。即使是分布式开发的新手也可以迅速使用Google的基础设施。Hadoop核心组件与Google对应的组件对应关系如表1-1所示。表1-1 Google与Hadoop对应模块1.1.2 为什么会有Hadoop

随着互联网快速的发展,产生的日志数量级的增加,大量的日志给公司带来了很大的挑战。如日志存储问题、海量日志分析的效率问题、成本问题等。

下面我们来分析个问题。

一般网站把用户的访问行为记录以Apache日志的形式记录下来,这些日志中包含了用户访问网站的所有信息,下面列举关键的信息,关键字段如下。

因为需要统一对数据进行离线计算,所以常常把它们全部移到同一个地方,如Oracle数据库等,每天产生的日志量大概计算一下,如下所示。

❑网站请求数:1000万条/天

❑每天日志大小:450字节/行×1000万条=4.2GB

❑日志存储周期:2年

一天产生4.5GB日志,2年需要4.2GB×2×365=3.0TB。

怎么来解决3.0TB的数据备份和容错的问题?解决方案如下

1)为了方便系统命令查看日志,不压缩,总共需要3.0TB空间,刚好有一些2U的服务器,每台1TB的磁盘空间。

2)为了避免系统盘坏掉影响服务器使用,对系统盘做Raid1。

3)为了避免其他存放数据的盘坏掉导致数据无法恢复,对剩下的盘做Raid5。

所有的数据都汇聚到这几台LogBackUp服务器上了。有了LogBackUp服务器,离线统计就可以全部在这些服务器上进行了。在这套架构上,用wc、grep、sort、uniq、awk、sed等系统命令,完成了很多的统计需求,比如统计访问频率较高的client_ip,某个新上线的页面的reference主要是哪些网站。

当公司业务迅猛发展,网站流量爆发增长,日志量也就成指数级增长,日志对于一个互联网公司来说是非常重要的,互联网公司可以通过分析日志来获取用户的行为,如推荐系统、淘宝的用户买卖行为分析等。假如现在的日志量计算如下所示。

❑日志总行数:10亿/天

❑每天日志大小:450字节/行×10亿=420GB

❑日志种类:5种

1天产生420GB日志,2年需要420GB×2×365=300TB,这么大的数据量怎么来存储和分析?1.1.3 Hadoop版本介绍

最新发布的Apache Hadoop版本如图1-1所示。一些Hadoop入门者会问:这个版本的功能有哪些?基于哪个版本?后续的版本是什么?要解释这一点,我们应该从Apache项目发布的一些基本知识开始分析。一般来说,Apache项目的新功能在主干(trunk)代码上开发。有时候,很大的特性也会有自己的开发分支(branch),它们期望后续会并入trunk。新功能通常是在trunk发布之前就有的,一般质量或稳定性没有太大保证。候选的分支会定期从主干分支上分离出来发布。一旦一个候选分支发布,它通常停止获得新的功能。如果有bug修复,经过投票后,会针对这个特定的分支再发布一个新版本。社区的任何成员可以创建一个版本分支,并可随意命名。图1-1 Hadoop版本图

注意 目前使用比较多的版本是v-0.20.2、v-1.0.3或v-1.0.4。Hadoop 2.0版本还处于测试阶段。目前Hadoop只能在Linux环境下运行。JDK版本要在1.5以上。1.2 Hadoop生态系统

当下Hadoop已经成长为一个庞大的体系,只要和海量数据相关的领域,都有Hadoop的身影。图1-2是一个Hadoop生态系统的图谱,详细列举了在Hadoop这个生态系统中出现的各种数据工具。图1-2 Hadoop生态系统

这一切,都起源自Web数据爆炸时代的来临。Hadoop生态系统的功能以及对应的开源工具说明如下。

1)海量数据怎么存,当然是用分布式文件系统——HDFS。

2)数据怎么用呢,分析、处理MapReduce框架,让你通过编写代码来实现对大数据的分析工作。

3)非结构化数据(日志)收集处理——Fuse、WebDAV、Chukwa、Flume和Scribe。

4)数据导入HDFS中,RDBSM也可以加入HDFS的狂欢了——HIHO、Sqoop。

5)MapReduce太麻烦,用熟悉的方式操作Hadoop里的数据——Pig、Hive、Jaql。

6)让你的数据可见——Drilldown、Intellicus。

7)用高级语言管理你的任务流——Oozie、Cascading。

8)Hadoop自己的监控管理工具——Hue、Karmasphere、Eclipse Plugin、Cacti、Ganglia。

9)数据序列化处理与任务调度——Avro、ZooKeeper。

10)更多构建在Hadoop上层的服务——Mahout、Elastic Map Reduce。

11)OLTP存储系统——HBase。

12)基于Hadoop的实时分析——Impala。1.3 Hadoop常用项目介绍

随着Hadoop的使用越来越多,基于Hadoop开发的工具也越来越多,下面介绍常用的一些工具。1.Hive

Hive是Facebook捐献给Apache的一个项目,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(Extract Transform and Load,ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,允许熟悉MapReduce的开发者开发自定义的Mapper和Reducer,以处理内建的Mapper和Reducer无法完成的复杂的分析工作。2.Pig

Pig是Yahoo捐献给Apache的一个项目,目前还在Apache孵化器(incubator)阶段,目前版本是v0.5.0。

Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简易的操作和编程接口。3.Mahout

Mahout是ASF(Apache Software Foundation)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Apache Mahout项目已经发展第四个年头,目前已经有了三个公共发行版本。Mahout包含许多实现,包括集群、分类、推荐过滤、频繁子项挖掘。此外,通过使用Apache Hadoop库,Mahout可以有效地扩展到云中。

Mahout算法库提供了以下一些功能。

❑支持MapReduce的集群实现包括K-means、模糊K-means、Canopy、Dirichlet和Mean-Shift;

❑Distributed Naive Bayes和Complementary Naive Bayes分类实现;

❑针对进化编程的分布式适用性功能;

❑Matrix和矢量库等。4.Flume

Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等两种模式)、exec(命令执行)等数据源上收集数据的能力。

Flume采用多Master的方式。为了保证配置数据的一致性,Flume引入ZooKeeper,用于保存配置数据。ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。

Apache孵化的Flume又称FlumeNG。5.Sqoop

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(如MySQL、Oracle、Postgres等)中的数据导入Hadoop的HDFS中,也可以将HDFS的数据导入关系型数据库中。6.Oozie

Oozie是一种Java Web应用程序,它运行在Java Servlet容器(即Tomcat)中,并使用数据库来存储以下内容:

❑工作流定义;

❑当前运行的工作流实例,包括实例的状态和变量。

Oozie工作流是放置在控制依赖DAG(Direct Acyclic Graph,有向无环图)中的一组动作(如Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。

hPDL是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行的流程,并包含工作流的起点和终点(start、end和fail节点)以及控制工作流执行路径的机制(decision、fork和join节点)。动作节点是一些机制,通过它们工作流会触发执行计算或者处理任务。Oozie为以下类型的动作提供支持:Hadoop MapReduce、Hadoop文件系统、Pig、Java和Oozie的子工作流(SSH动作已经从Oozie Schema 0.2之后的版本中移除了)。

所有由动作节点触发的计算和处理任务都不在Oozie之中——它们是由Hadoop的Map/Reduce框架执行的。这种方法让Oozie可以支持现存的Hadoop用于负载平衡、灾难恢复的机制。这些任务主要是异步执行的(只有文件系统动作例外,它是同步处理的)。这意味着对于大多数工作流动作触发的计算或处理任务的类型来说,在工作流操作转换到工作流的下一个节点之前都需要等待,直到计算或处理任务结束了之后才能够继续。Oozie可以通过两种不同的方式来检测计算或处理任务是否完成,也就是回调和轮询。当Oozie启动了计算或处理任务的时候,它会为任务提供唯一的回调URL,然后任务会在完成的时候发送通知给特定的URL。在任务无法触发回调URL的情况下(可能是因为任何原因,比方说网络闪断),或者当任务的类型无法在完成时触发回调URL的时候,Oozie有一种机制,可以对计算或处理任务进行轮询,从而保证能够完成任务。

Oozie工作流可以参数化(在工作流定义中使用像${inputDir}之类的变量)。在提交工作流操作的时候,我们必须提供参数值。如果经过合适地参数化(比方说,使用不同的输出目录),那么多个同样的工作流操作可以并发。

一些工作流是根据需要触发的,但是大多数情况下,我们有必要基于一定的时间段和(或)数据可用性和(或)外部事件来运行它们。Oozie协调系统(Coordinator System)让用户可以基于这些参数来定义工作流执行计划。Oozie协调程序让我们可以以谓词的方式对工作流执行触发器进行建模,那可以指向数据、事件和(或)外部事件。工作流作业会在谓词得到满足的时候启动。

有时我们还需要连接定时运行但时间间隔不同的工作流操作。多个随后运行的工作流的输出会成为下一个工作流的输入。把这些工作流连接在一起,会让系统把它作为数据应用的管道来引用。Oozie协调程序支持创建这样的数据应用管道。7.ZooKeeper

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统。提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。8.Impala

Impala采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口(Hue Beeswax),这样在使用CDH产品时,批处理和实时查询的平台是统一的。目前支持的文件格式是文本文件和Sequence Files(可以压缩为Snappy、GZIP和BZIP,前者性能最好)。其他格式如Avro、RCFile、LZO文本和Doug Cutting的Trevni将在正式版中支持,官方测试速度是Hive的3~90倍。1.4 Hadoop在国内的应用

图1-3由Hadoop技术论坛提供,数据的绝对值参考意义不大,主要是看各城市间的相对数据。北京、深圳和杭州位列前三甲,分析主要原因是:北京有淘宝和百度,深圳有腾讯,杭州有网易等。互联网公司是Hadoop在国内的主要使用力量。淘宝是在国内最先使用Hadoop的公司之一,而百度赞助了HyperTable的开发,另外北京研究Hadoop的高校多,所以北京是Hadoop方面研究和应用需求最高的城市。图1-3 Hadoop使用统计图

目前,Hadoop在国内深得互联网企业的青睐,很多互联网公司都在使用Hadoop来实现公司的核心业务,如搜索、推荐等。

❑奇虎360:Hadoop存储软件管家中的软件,使用CDN技术将用户请求引到最近的Hadoop集群并进行下载。

❑京东、百度:存储、分析日志、数据挖掘和机器学习(主要是推荐系统)。

❑广告类公司:存储日志,通过协调过滤算法为客户推荐广告。

❑华为:云计算平台。

❑学校:学生上网与社会行为分析。

❑淘宝、阿里巴巴:国内使用Hadoop最深入的公司,整个淘宝和阿里巴巴都是数据驱动的。1.5 本章小结

互联网时代什么最重要——数据!大数据时代什么工具最流行——Hadoop!本章主要从大体上介绍Hadoop,让读者对Hadoop有个大体的印象。接下来我们开始深入介绍Hadoop的相关知识,以及Hadoop的安装、使用和开发。第2章Hadoop安装

Hadoop目前只能在Linux环境下运行,所以我们要准备VMware 8.0.2和Ubuntu 10.04还有JDK 1.6,这些直接去官网下载就可以了。本书中,Hadoop分布式安装使用了虚拟机的形式,采用VMware和Ubuntu虚拟出三台设备,然后在这三台上面搭建Hadoop集群。2.1 Hadoop环境安装配置

本书内容基于Hadoop-1.0.3版本来介绍,首先,从Apache官网(http://hadoop.apache.org/releases.html#Ne)下载Hadoop-1.0.3版本。2.1.1 安装VMware

从官网下载VMware-workstation-full-8.0.2-591240.exe文件,一直点击“下一步”就可以安装,非常简单。安装成功以后如图2-1所示。图2-1 VMware运行图2.1.2 安装Ubuntu

Ubuntu(友帮拓)是一个以桌面应用为主的Linux操作系统,其名称来自非洲的"ubuntu"一词,意思是“人性”、“我的存在是因为大家的存在”,类似“仁爱”思想。1.获取Ubuntu发行版本

Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。

本书中为什么使用Ubuntu系统来安装Hadoop集群?原因在于Ubuntu系统的完全免费,而且使用非常多。安装Ubuntu系统的步骤如下。

1)从镜像站点上下载ISO的镜像文件。

❑中文官网:http://www.ubuntu.com.cn

❑英文官网:http://www.ubuntu.com

2)有时我们在网上下载的压缩包会有损坏,可以使用md5来验证下载的ISO镜像文件的完整性,使用如下代码。#md5sum ubuntu-10.04-desktop-i386.iso2.创建虚拟机

启动VMware以后,会进入如图2-2所示的对话框,用户可打开一个已有的虚拟机或创建一个新的虚拟机等操作。图2-2 VMware创建虚拟机对话框

双击Create a New Virtual Machine以后,会看到图2-3所示的对话框。

还有一种方式来创建虚拟机,步骤是VMware的工具栏File New→Virtual Machine,选中以后会直接出现图2-3的对话框。Machine Wizard有两种安装模式。

❑Typical安装:默认的安装,如果对VMware不熟悉的同学可以使用这种安装模式,简单而且不容易出错。

❑Custom安装:用户自动安装,这种安装可以根据自己的需求来定制化,但要求比较高。

选择默认的Typical安装后单击Next按钮,将进入加载ISO文件对话框,如图2-4所示。图2-3 虚拟机安装方式(左)图2-4 加载ISO文件对话框(右)

在加载ISO对话框里有三种来源。

❑Installer disk:这需要有光盘才能安装,选择光盘的位置即可。

❑Installer disc image file(iso):这就是ISO镜像文件的安装,找到ISO文件存放的位置。

❑I will install the operating system later:选中这个以后就代表先创建一个空的磁盘虚拟机,等启动虚拟的时候再安装Linux系统。

选择"I will install the operating system later"后单击Next按钮,进入图2-5所示的Linux系统选择对话框。选择"Linux"和"Ubuntu"后点击Nent按钮,如图2-6所示。图2-5 Linux版本选择(左)图2-6 Ubuntu名称设置(右)

由于是在VMware里面安装的Linux系统,所以Guest operating system应该选择Linux,Version表示要安装哪个Linux版本,有Redhat、Centos、Ubuntu等,选择Ubuntu。

选择完成后单击Next按钮,如图2-6所示,进入虚拟机名称设置对话框。Ubuntu名称设置对话框有两个属性。

❑Virtual machine name:创建虚拟机的名称,这里设置为Ubuntu 1。

❑Location:选择虚拟机安装的路径。Hadoop文件夹所在的磁盘空间一定要够用,大概需要20GB。

设置好以后选择Next按钮,进入虚拟机的磁盘设置对话框,如图2-7所示。虚拟机磁盘设置有三个选项。

❑Maximum disk size:最大磁盘空间大小,可以根据实际的磁盘空间来设置,一般设置为20GB。

❑Store virtual disk as a single file:设置虚拟机的磁盘只有一个文件,相当于Windows系统只有C盘。

❑Split virtual disk in to multiple file:设置虚拟机的磁盘有多个文件,相当于Windows系统有C、D、E盘等。

设置完以后单击Next按钮,将进入如图2-8所示的确认对话框。图2-7 虚拟机磁盘设置(左)图2-8 虚拟机设置确认(右)

这个对话框显示了我们设置虚拟机的一些信息,如虚拟机名称、安装路径、虚拟机版本、磁盘空间等信息,如果不对还可以选择Back重新设置。

确认以后,选择单击Finish按钮,到此我们创建一个名为Ubuntu_1的虚拟机就成功了,这相当于一个没有操作系统的机器。3.安装Ubuntu操作系统

接下来启动刚才创建的Ubuntu_1虚拟机,如图2-9所示,安装Ubuntu操作系统。图2-9 启动虚拟机Ubuntu_1

启动虚拟机之前,我们可以做一些设置。

❑Memory:设置虚拟机的内存大小。

❑Processor:设置虚拟机的处理器个数。

❑Hard Disk:磁盘大小。

❑Network Adapt:设置虚拟机的网络连接方式。

双击CD/DVD(IDE),将进入加载ISO镜像文件对话框,如图2-10所示。图2-10 加载ISO镜像文件

加载ISO文件对话框有两个属性设置。

1)Device status属性。

❑Connected:每次启动虚拟机都加载ISO文件。

❑Connect at power on:只加载一次。

2)Connection属性。

❑Use physical drive:使用物理的光盘;

❑Use ISO image file:使用ISO文件安装,选择ISO文件所在的路径。

选择单击OK按钮,回到虚拟机启动的界面,如图2-11所示。

单击Power On this Virtual machine进入安装操作系统界面,如图2-12所示。大概1分钟,会进入Ubuntu操作系统语言配置对话框。图2-11 虚拟机启动界面(左)图2-12 操作系统的安装(右)

如图2-13所示,选择English,当然也有中文的,建议使用英文,因为这样对学习有帮助,这个大家可以根据自己的喜好来选择。

选择好以后,双击Install Ubuntu 10.04LTS ,进入时区设置对话框,如图2-14所示。图2-13 Ubuntu系统语言设置(左)图2-14 Ubuntu时区设置(右)

时区设置有两个属性。

❑Region:地理区域,这里选择"Asia"。

❑Time Zone:时区,这里选择"China Shanghai"。

选择好以后,单击Forward按钮,进入输入法设置对话框,如图2-15所示。

如果选择安装的操作系统为英文环境,在这里我们就选择USA,美国的输入法,没有中文输入法;如果选择的是中文操作系统,这里就有中文的输入法可以选择了。

选择好以后单击Forward按钮,进入磁盘设置对话框,如图2-16所示。这里用默认设置就可以了,单击Forward按钮,进入Ubuntu系统用户设置对话框。

如图2-17所示,创建一个登录Ubuntu系统的用户。注意,这里不是root用户,因为root用户默认没有密码。用户名、密码和机器名设置完成以后单击Forward按钮,进入Ubuntu系统信息设置确认对话框,如图2-18所示。图2-15 Ubuntu输入法设置(左)图2-16 磁盘设置对话框(右)图2-17 用户设置对话框(左)图2-18 Ubuntu系统信息确认(右)

确认没有错误以后,单击Install按钮,进入Ubuntu系统安装对话框如图2-19所示。这步根据机器的配置不同需要的时间也不一样,快的大概需要15分钟。安装完成以后就会进入Ubuntu系统的登录对话框,如图2-20所示。图2-19 Ubuntu系统安装界面(左)图2-20 Ubuntu系统登录(右)

这里登录用户就是前面设置的用户名,输入刚才设置的密码就可以登录了。到这里Ubuntu系统的安装就成功了。按照同样的方式再创建两个虚拟机,分别为Ubuntu_2和Ubuntu_3,安装的方法和Ubuntu_1一样。2.1.3 安装VMware Tools

VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显卡和硬盘性能,以及同步虚拟机与主机时钟的驱动程序。

只有在VMware虚拟机中安装了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时支持自由拖曳的功能,鼠标也可以在虚拟机与主机之前自由移动(不再需要按Ctrl+Alt),且虚拟机屏幕也可以实现全屏化。

VMware Tools的安装步骤如下。

1)启动并进入Linux系统。

2)选择虚拟机"vm"菜单中的“虚拟机/安装VMware-Tools(install VMware-tolls)”,此时就会有把VMware-tools文件映像到CD-ROM中。

3)把"VMwareTools-6.0.2-59824.tar.gz"文件复制到自己需要的位置。

4)解压,先要进入"VMwareTools-6.0.2-59824.tar.gz"存放目录,执行以下命令。# tar -zxvf VmwareTools-6.0.2-59824.tar.gz

5)进入/home/tsm/Tools/vmware-tools-distrib目录。cd /home/tsm/Tools/vmware-tools-distrib

6)输入"./vmware-install.pl"进行安装,在安装过程中根据提示进行选择,其实一直按回车键即可完成安装。2.1.4 安装JDK

JDK(Java Development Kit)是Sun Microsystems针对Java开发的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK是整个Java的核心,包括Java运行环境、Java工具和Java基础类库,掌握JDK是学好Java的第一步。而专门运行在x86平台的JRocket在服务器端运行效率比Sun JDK好很多。从Sun JDK 5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。

JDK只要是1.5版本以上就可以,本书使用的是JDK 1.6。安装过程如下。

1)下载JDK 1.6,这里存放的目录是/opt/tools/jdk-6u25-linux-i586.bin。

2)进入/opt/tools目录,给文件赋值权限,命令如下。cd /opt/toolschmod u+x jdk-6u25-linux-i586.bin

3)执行下面的命令,执行完命令后,会在/opt/tools目录下生成jdk1.6.0_25文件夹。./jdk-6u25-linux-i586.bin

4)配置JDK的环境命令如下。sudo gedit /etc/profileexport JAVA_HOME=/opt/tools/jdk1.6.0_25export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

5)再执行下面命令使配置文件生效。source /etc/profile

或者以下命令:. /etc/profile

6)使用以下命令查看JDK安装是否成功。jayliu@Ubuntu1:~$ javac

如果显示信息如图2-21所示,恭喜你,JDK安装成功了。图2-21 使用javac命令查看结果2.2 Hadoop安装模式

本节会用到刚才创建的Ubuntu_1、Ubuntu_2、Ubuntu_3这三台虚拟机。从Apache官网下载Hadoop-1.0.3版本。

Hadoop的安装模式分为三种,分别是:单机模式、伪分布模式及全分布模式。默认安装是单机模式,下面分别演示三种模式的安装方法。准备就绪,下面就开始Hadoop的安装旅途吧!2.2.1 单机安装

单机模式所需的系统资源是最少的,这种安装模式下,Hadoop的core-site.xml、mapred-site.xml、hdsf-site.xml配置文件均为空。因此Hadoop保守地采取这种模式为默认安装模式。

当配置文件为空时,Hadoop完全运行在本地,不与其他节点交互,也不使用Hadoop文件系统,不加载任何守护进程,该模式主要用于开发调试MapReduce应用程序的逻辑,不与任何守护进程交互进而避免复杂性。安装过程如下。

1)解压Hadoop的TAR文件。tar -zxvf hadoop-1.0.3.tar.gz

2)配置Hadoop的环境变量。sudo vi /etc/profileexport HADOOP_HOME=/opt/hadoop-1.0.3export PATH=$HADOOP_HOME/bin:$PATH

3)进入解压的文件夹下的bin目录执行start-all.sh命令。jayliu@Ubuntu1:/opt/hadoop-1.0.3/bin$ ./start-all.sh

4)使用jps命令查看进程是否启动成功,如图2-22所示。图2-22 使用jps命令查看

因为是单机模式,NameNode和JobTracker等都没有启动,怎么知道安装是否成功呢?

5)查看HDFS系统,如图2-23所示。图2-23 HDFS单机版目录结构

大家发现什么?怎么像Linux的文件系统目录呢?没错,显示的就是Linux文件系统目录。如果出现图2-23所示的结果,说明你的Hadoop单机版安装成功了!

到目前为止我们没有对Hadoop的配置文件做任何修改,全是默认配置,即配置文件全是空的,如下所示。2.2.2 伪分布式安装

伪分布模式即“单节点集群”模式,所有的守护进程都运行在同一台机器上。这种模式下增加了代码调试功能,可以查看内存、HDFS文件系统的输入/输出,以及与其他守护进程交互。core-site.xml、mapred-site.xml、hdsf-site.xml配置文件如下。

1)修改地址解析文件/etc/hosts,加入以下代码。192.168.195.140 Ubuntu1

2)修改hadoop目录下conf下的core-sitexml文件,如下所示。 hadoop.tmp.dir /hadoop A base for other temporary directories. fs.default.name hdfs:// Ubuntu1:9000 The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem. dfs.name.dir/hadoop/name Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.

3)修改hadoop目录下的conf/ hdfs-site.xml文件,如下所示。 dfs.data.dir /hadoop/data Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored. dfs.replication //默认Block副本数 1 Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.

4)修改hadoop目录下的conf/ mapred-site.xml文件,如下所示。 mapred.job.tracker Ubuntu1:9001 The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.

在core-site.xml和mapred-site.xml文件中分别指定NameNode和JobTracker的主机名和端口号,而在hdfs-site.xml中指定HDFS的默认副本数,由于伪分布式运行在单机上,因此只有一个副本。同时在masters和slavers文件中指定SecondaryNameNode和从节点的主机名为Ubuntu1,即在文件中写入“Ubuntu1”。

配置好以后,启动步骤如下。

1)第一次启动Hadoop要格式化,使用如下命令格式化NameNode。hadoop namenode –format

2)执行start-all.sh命令启动Hadoop集群。

3)使用jps命令查看结果,如图2-24所示。图2-24 使用jps查看结果

4)使用hadoop fs–ls/命令查看HDFS系统,如图2-25所示。Hadoop的伪分布式安装成功。图2-25 HDFS伪分布式目录结构

以上操作需要注意两点。

❑启动Hadoop之前必须执行hadoop namenode –format操作,否则报错。

❑设置的hadoop.tmp.dir路径必须存在,不存在会报错。

扩展阅读

Linux系统命令拓展

1)查看IP地址。jayliu@Ubuntu1:/opt$ ifconfigeth1 Link encap:Ethernet HWaddr 00:0c:29:d7:dc:52 inet addr:192.168.195.140 Bcast:192.168.195.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fed7:dc52/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1207000 errors:0 dropped:0 overruns:0 frame:0 TX packets:2216586 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:88270718 (88.2 MB) TX bytes:3325334709 (3.3 GB) Interrupt:19 Base address:0x2024

2)查看主机名。jayliu@Ubuntu1:/opt$ hostnameUbuntu12.2.3 分布式安装

我们在Ubuntu1虚拟机上安装了Hadoop的一个节点,按照上一节的步骤把Hadoop分别安装在Ubuntu2和Ubuntu3上。安装成功以后再接着学习看下面的内容。1.集群的构建和拓扑图

使用三台虚拟机来搭建Hadoop分布式环境,三台虚拟机的拓扑图如图2-26所示。图2-26 Hadoop分布式拓扑图

Hadoop集群中每个节点的角色如表2-1所示。表2-1 Hadoop集群节点角色

注意 Ubuntu1既是NameNode又是DataNode,同时也是JobTracker。2.SSH配置无密码验证配置

1)登录master节点(即Ubuntu1节点)上面,切换到jayliu用户,在jayliu的home目录下面创建".ssh"目录。$ cd$ mkdir .ssh

2)在Master节点(即主机Ubuntu1)上生成密钥对。$ ssh-keygen –t rsa

3)然后一直按Enter键,按默认的选项生成密钥对保存在.ssh/id_rsa.pub文件中。把生成的id_rsa.pub复制一份,命名为authorized_keys,然后分别复制到Ubuntu2和Ubuntu3两个节点上。执行如下命令。$ cd .ssh$ cp id_rsa.pub authorized_keys $ scp authorized_keys Ubuntu2:/home/jayliu/.ssh$ scp authorized_keys Ubuntu3:/home/jayliu/.ssh

4)从Ubuntu1向Ubuntu2和Ubuntu3发起SSH连接,第一次登录时需要输入密码,以后就不需要了。$ ssh Ubuntu2$ ssh Ubuntu3

我们只需要配置从master向slaves发起SSH连接,不需要密码就可以,但这样只能在master(即在主机Ubuntu1)启动或关闭Hadoop服务。

注意 SSH安装过程中,很多刚入门的学者会遇到麻烦,虽然按照老师的方法一步一步做下去,但是最后还是连不上。注意:SSH的安装对".ssh"文件夹和里面文件的权限是非常严格的,大了或小了都连不上。

1)".ssh"是一个隐藏的文件夹,用"ll –a"命令可以看到隐藏的文件夹,".ssh"文件夹权限必须是700。

2)".ssh"里面的文件权限最好是600。3.修改hosts文件

需要把Ubuntu1、Ubuntu2、Ubuntu3的主机名和IP添加到三台虚拟机的hosts文件里面,Ubuntu1的hosts文件信息如图2-27所示。图2-27 Ubuntu1的hosts文件配置

接下来把Ubuntu1的hosts文件里的配置分别复制到Ubuntu2和Ubuntu3上。4.Hadoop配置文件修改

这里只需要修改conf下面的master和slaves文件就可以,Ubuntu1下的master和slaves配置信息如图2-28和图2-29所示。图2-28 master配置信息(左)图2-29 slaves配置信息(右)

Ubuntu2和Ubuntu3下的master和slaves文件按照Ubuntu1的配置

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载