作者:刘刚
出版社:机械工业出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
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的配置文件做任何修改,全是默认配置,即配置文件全是空的,如下所示。
伪分布模式即“单节点集群”模式,所有的守护进程都运行在同一台机器上。这种模式下增加了代码调试功能,可以查看内存、HDFS文件系统的输入/输出,以及与其他守护进程交互。core-site.xml、mapred-site.xml、hdsf-site.xml配置文件如下。
1)修改地址解析文件/etc/hosts,加入以下代码。192.168.195.140 Ubuntu1
2)修改hadoop目录下conf下的core-sitexml文件,如下所示。
3)修改hadoop目录下的conf/ hdfs-site.xml文件,如下所示。
4)修改hadoop目录下的conf/ mapred-site.xml文件,如下所示。
在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的配置
试读结束[说明:试读内容隐藏了图片]