第2章 大数据处理架构 Hadoop

第2章 大数据处理架构Hadoop

Hadoop是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了MapReduce计算模型和分布式文件系统HDFS等功能,在业内得到了广泛的应用,同时也成了大数据的代名词。借助Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的存储与处理分析。

本章介绍Hadoop的发展历史、重要特性和应用现状,并详细介绍Hadoop项目结构及其各个组件,最后,演示如何在Linux操作系统下安装和配置Hadoop。

2.1 概述

2.1.1 Hadoop简介

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce。HDFS是对谷歌文件系统(Google File System,GFS)的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。MapReduce是针对谷歌MapReduce的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。借助于Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于廉价计算机集群上,完成海量数据的存储与计算。

Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科、淘宝等,都支持Hadoop。

2.1.2 Hadoop的发展简史

Hadoop这个名称朗朗上口,至于为什么要取这样一个名字,其实并没有深奥的道理,只是追求名称简短、容易发音和记忆而已。很显然,小孩子是这方面的高手,大名鼎鼎的“Google”就是由小孩子给取名的,Hadoop同样如此,它是小孩子给“一头吃饱了的棕黄色大象”取的名字(见图2-1)。Hadoop后来的很多子项目和模块的命名方式都沿用了这种风格,如Pig和Hive等。

图片 21

图2-1 Hadoop的标志

Hadoop最初是由Apache Lucene项目的创始人Doug Cutting开发的文本搜索库。Hadoop源自2002年的Apache Nutch项目——一个开源的网络搜索引擎并且也是Lucene项目的一部分。在2002年的时候,Nutch项目遇到了棘手的难题,该搜索引擎框架无法扩展到拥有数十亿网页的网络。而就在一年以后的2003年,谷歌公司发布了分布式文件系统GFS方面的论文,可以解决大规模数据存储的问题。于是,在2004年,Nutch项目也模仿GFS开发了自己的分布式文件系统(Nutch Distributed File System,NDFS),也就是HDFS的前身。

2004年,谷歌公司又发表了另一篇具有深远影响的论文,阐述了MapReduce分布式编程思想。2005年,Nutch开源实现了谷歌的MapReduce。到了2006年2月,Nutch中的NDFS和MapReduce开始独立出来,成为Lucene项目的一个子项目,称为Hadoop,同时,Doug Cutting加盟雅虎。2008年1月,Hadoop正式成为Apache顶级项目,Hadoop也逐渐开始被雅虎之外的其他公司使用。2008年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,它采用一个由910个节点构成的集群进行运算,排序时间只用了209秒。在2009年5月,Hadoop更是把1TB数据排序时间缩短到62秒。Hadoop从此声名大噪,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准。

2.1.3 Hadoop的特性

Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。

  • 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
  • 高效性。作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。
  • 高可扩展性。Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点。
  • 高容错性。采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
  • 成本低。Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。
  • 运行在Linux平台上。Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。
  • 支持多种编程语言。Hadoop上的应用程序也可以使用其他语言编写,如C++。

2.1.4 Hadoop的应用现状

Hadoop凭借其突出的优势,已经在各个领域得到了广泛的应用,而互联网领域是其应用的主阵地。

2007年,雅虎在Sunnyvale总部建立了M45——一个包含了4 000个处理器和1.5PB容量的Hadoop集群系统。此后,包括卡耐基梅隆大学、加州大学伯克利分校、康奈尔大学和马萨诸塞大学阿默斯特分校、斯坦福大学、华盛顿大学、密歇根大学、普渡大学等12所大学加入该集群系统的研究,推动了开放平台下的开放源码发布。目前,雅虎拥有全球最大的Hadoop集群,有大约25 000个节点,主要用于支持广告系统与网页搜索。

Facebook作为全球知名的社交网站,拥有超过3亿的活跃用户,其中,约有3000万用户至少每天更新一次自己的状态;用户每月总共上传10亿余张照片、1000万个视频,每周共享10亿条内容,包括日志、链接、新闻、微博等。因此,Facebook需要存储和处理的数据量同样是非常巨大的,每天新增加4TB压缩后的数据,扫描135TB大小的数据,在集群上执行Hive任务超过7500次,每小时需要进行8万次计算。很显然,对于Facebook而言,Hadoop是非常理想的选择,Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等方面。

国内采用Hadoop的公司主要有百度、淘宝、网易、华为、中国移动等,其中,淘宝的Hadoop集群比较大。据悉,淘宝Hadoop集群拥有2860个节点,清一色基于英特尔处理器的x86服务器,其总存储容量达到50PB,实际使用容量超过40PB,日均作业数高达15万,服务于阿里巴巴集团各部门,数据来源于各部门产品的线上数据库(Oracle、MySQL)备份、系统日志以及爬虫数据,每天在Hadoop集群运行各种MapReduce任务,如数据魔方、量子统计、推荐系统、排行榜等。

作为全球最大的中文搜素引擎公司,百度对海量数据的存储和处理的要求是非常高的。因此,百度选择了Hadoop,主要用于日志的存储和统计、网页数据的分析和挖掘、商业分析、在线数据反馈、网页聚类等。百度目前拥有3个Hadoop集群,计算机节点数量在700个左右,并且规模还在不断增加中,每天运行的MapReduce任务在3000个左右,处理数据约120TB/天。

华为是Hadoop的使用者,也是Hadoop技术重要推动者。由雅虎成立的Hadoop公司Hortonworks曾经发布一份报告,用来说明各个公司对Hadoop发展的贡献。其中,华为公司在Hadoop重要贡献公司名单内,排在谷歌和思科公司的前面,说明华为公司也在积极参与开源社区贡献。

2.2 Hadoop的项目结构

经过多年的发展,Hadoop项目不断完善和成熟,目前已经包含多个子项目(见图2-2)。除了核心的HDFS和MapReduce以外,Hadoop项目还包括Common、Avro、Zookeeper、HBase、Hive、Chukwa、Pig等子项目,它们提供了互补性服务或在核心层上提供了更高层的服务。

2-2

图2-2 Hadoop项目结构

2.2.1 Common

Hadoop Common原名是Hadoop Core,从Hadoop 0.20版本以后更名为Common。在Hadoop 0.20以及之前的版本中,Common包含HDFS、MapReduce和其他公共的项目内容;从Hadoop 0.21版本开始,HDFS和MapReduce被分离出来作为独立的子项目,其余部分内容构成Hadoop Common。Common是为Hadoop其他子项目提供支持的常用工具,主要包括文件系统、RPC(Remote Procedure Call)和串行化库,它们为在廉价的硬件上搭建云计算环境提供基本的服务,同时也为运行在该平台上的软件开发提供所需的API。

2.2.2 Avro

Avro是Hadoop的一个子项目,也是Apache中的一个独立项目。Avro是一个用于数据序列化的系统,提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用(Remote Procedure Call,RPC)的功能和简单的动态语言集成功能。Avro可以将数据结构或对象转化成便于存储和传输的格式,节约数据存储空间和网络传输带宽,Hadoop的其他子项目(如HBase和Hive)的客户端与服务端之间的数据传输都采用了Avro。

和Thrift类似,Avro支持跨编程语言实现,如C、C++、C#、Java、Python、Ruby、PHP等。但是,Avro有自己的显著特征,它依赖于模式(Schema),Avro数据的读和写是在模式之下完成的,需要动态加载相关数据的模式。正是由于读写操作都使用了模式,因此,写入数据的开销就会大大减少,序列化的速度大为提升。这种数据及其模式的自我描述,也大大方便了动态脚本语言的使用。在把Avro数据保存到文件中时,数据连同其模式会被一起存储,这样,不同类型的程序都可以对文件进行处理。Avro和动态语言结合后,读写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化,只需要在静态类型语言中实现。

2.2.3 HDFS

Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop项目的两大核心之一,它是针对谷歌文件系统(Google File System,GFS)的开源实现。HDFS具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。HDFS在设计之初就是要运行在廉价的大型服务器集群上,因此,在设计上就把硬件故障作为一种常态来考虑,可以保证在部分硬件发生故障的情况下,仍然能够保证文件系统的整体可用性和可靠性。HDFS放宽了一部分POSIX(Portable Operating System Interface)约束,从而实现以流的形式访问文件系统中的数据。HDFS在访问应用程序数据时,可以具有很高的吞吐率,因此,对于超大数据集的应用程序而言,选择HDFS作为底层数据存储是较好的选择。

2.2.4 HBase

HBase是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为其底层数据存储。HBase是针对谷歌的BigTable的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。HBase与传统关系数据库的一个重要区别是,前者采用基于列的存储,而后者采用基于行的存储。HBase具有良好的横向扩展能力,可以通过不断增加廉价的商用服务器来增加存储能力。

2.2.5 MapReduce

Hadoop MapReduce是针对谷歌MapReduce的开源实现。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂、运行于大规模集群上的并行计算过程高度地抽象到了两个函数——Map和Reduce,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,完成海量数据的处理。通俗地说,MapReduce的核心思想就是“分而治之”,它把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果,得到最终结果。

2.2.6 Zookeeper

Zookeeper是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。Zookeeper使用Java编写,很容易编程接入,它使用了一个和文件树结构相似的数据模型,可以使用Java或者C来进行编程接入。

2.2.7 Hive

Hive是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储。Hive的学习门槛较低,因为,它提供了类似于关系数据库SQL语言的查询语言——Hive QL,可以通过Hive QL语句快速实现简单的MapReduce统计,Hive自身可以将Hive QL语句转换为MapReduce任务进行运行,而不必开发专门的MapReduce应用,因而十分适合数据仓库的统计分析。

2.2.8 Pig

Pig是一种数据流语言和运行环境,适合于使用Hadoop和MapReduce平台来查询大型半结构化数据集。虽然MapReduce应用程序的编写不是十分复杂,但毕竟也是需要一定的开发经验的。Pig的出现大大简化了Hadoop常见的工作任务,它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口。Pig是一个相对简单的语言,它可以执行语句,因此,当我们需要从大型数据集中搜索满足某个给定搜索条件的记录时,采用Pig要比MapReduce具有明显的优势,前者只需要编写一个简单的脚本在集群中自动并行处理与分发,而后者则需要编写一个单独的MapReduce应用程序。

2.2.9 Sqoop

Sqoop可以改进数据的互操作性,主要用来在Hadoop和关系数据库之间交换数据。通过Sqoop,我们可以方便地将数据从MySQL、Oracle、PostgreSQL等关系数据库中导入Hadoop(可以导入HDFS、HBase或Hive),或者将数据从Hadoop导出到关系数据库,使得传统关系数据库和Hadoop之间的数据迁移变得非常方便。Sqoop主要通过JDBC(Java DataBase Connectivity)和关系数据库进行交互,理论上,支持JDBC的关系数据库都可以使Sqoop和Hadoop进行数据交互。Sqoop是专门为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。

2.2.10 Chukwa

Chukwa是一个开源的、用于监控大型分布式系统的数据收集系统,可以将各种类型的数据收集成适合Hadoop处理的文件,并保存在HDFS中供Hadoop进行各种MapReduce操作。Chukwa构建在Hadoop的HDFS和MapReduce框架之上,继承了Hadoop的可伸缩性和可扩展性。Chukwa内置了一个强大而灵活的工具集,可用于展示、监控和分析已收集的数据。

2.3 Hadoop的安装与使用

在开始具体操作之前,需要首先选择一个合适的操作系统。尽管Hadoop本身可以运行在Linux、Windows以及其他一些类UNIX系统(如FreeBSD、OpenBSD、Solaris等)之上,但是,Hadoop官方真正支持的作业平台只有Linux。这就导致其他平台在运行Hadoop时,往往需要安装很多其他的包来提供一些Linux操作系统的功能,以配合Hadoop的执行。例如,Windows在运行Hadoop时,需要安装Cygwin等软件。我们这里选择Linux作为系统平台,来演示在计算机上如何安装Hadoop、运行程序并得到最终结果。当然,其他平台仍然可以作为开发平台使用。对于正在使用Windows操作系统的用户,可以通过在Windows操作系统中安装Linux虚拟机的方式完成实验。在Linux发行版的选择上,我们倾向于使用企业级的、稳定的操作系统作为实验的系统环境,同时,考虑到易用性以及是否免费等方面的问题,我们排除了OpenSUSE和RedHat等发行版,最终选择免费的CentOS发行版作为推荐的操作系统,读者可以到网络上下载CentOS系统镜像文件(www.centos.org/download)进行安装。

Hadoop基本安装配置主要包括以下几个步骤。

(1)创建Hadoop用户。

(2)安装Java。

(3)设置SSH登录权限。

(4)单机安装配置。

(5)伪分布式安装配置。

下面将分别介绍每个步骤的具体实现方法,这里使用的操作系统是CentOS7。

2.3.1 创建Hadoop用户

为方便操作,我们创建一个名为“hadoop”的用户来运行程序,这样可以使不同用户之间有明确的权限区别,同时,也可以使针对Hadoop的配置操作不影响其他用户的使用。实际上,对于一些大的软件(如MySQL),在企业中也常常为其单独创建一个用户。

创建用户的命令是useradd,设置密码的命令为passwd。此外,可能部分系统还需要为用户创建文件夹,在这里不再详细说明。

2.3.2 Java的安装

由于Hadoop本身是使用Java语言编写的,因此,Hadoop的开发和运行都需要Java的支持,一般要求Java 6或者更新的版本。对于CentOS7本身,系统上可能已经预装了Java7,它的JDK版本为openjdk,路径为“/usr/lib/jvm/java-1.7.0-openjdk”,后文中需要配置的JAVA_HOME环境变量就可以设置为这个值。

对于Hadoop而言,采用更为广泛应用的Oracle公司的Java版本,在功能上可能会更稳定一些,因此,用户也可以根据自己的爱好,安装Oracle版本的Java。在安装过程中,请记录JDK的路径,即JAVA_HOME的位置,这个路径的设置将用在后文Hadoop的配置文件中,目的是让Hadoop程序可以找到相关的Java工具。

2.3.3 SSH登录权限设置

对于Hadoop的伪分布和全分布而言,Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程可以通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,需要将所有机器配置为名称节点,可以无密码登录它们。

为了实现SSH无密码登录方式,首先需要让名称节点生成自己的SSH密钥,命令如下。

ssh-keygen -t rsa -P '' //在后面选择存放位置时,按照默认位置,会存放在用户目录的.ssh/路径下

名称节点生成自己的密钥之后,需要将它的公共密钥发送给集群中的其他机器。我们可以将id_dsa.pub中的内容添加到需要匿名登录的机器的“~/ssh/authorized_keys”目录下,然后,在理论上名称节点就可以无密码登录这台机器了。对于无密码登录本机而言,可以采用以下代码。

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

这时可以通过ssh localhost命令来检测一下是否需要输入密码。对于Ubuntu而言,到这里SSH就配置好了。但是,由于CentOS7具有更为严格的安全措施,因此,还需要修改两个地方。

(1)修改“/etc/ssh/sshd_config”文件,将其中以下几行注释去掉。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile   .ssh/authorized_keys

(2)确认“~/.ssh/authorized_keys”目录的权限为600。

这样配置之后,对于CentOS7而言,SSH的配置就完成了。

2.3.4 安装单机Hadoop

这里使用的Hadoop版本为1.2.1,虽然Hadoop目前最新版本已经为2.6.0,但是,由于新的功能在这里并不会用到,因此,这里选择1.2.1版本,下载地址为 http://mirrors.hust.edu.cn/apache/ hadoop/common/hadoop-1.2.1,在目录中选择hadoop-1.2.1.tar.gz进行下载即可。

将该文件夹解压后,可以放置到自己喜欢的位置,如“/usr/lcoal/hadoop”文件夹下,注意,文件夹的用户和组必须都为hadoop。

在Hadoop的文件夹中,“conf”目录下面放置了配置文件,对于单机安装,首先需要更改hadoop-env.sh文件,以配置Hadoop运行的环境变量,这里只需要将JAVA_HOME环境变量指定到本机的JDK目录就可以了,命令如下。

[hadoop@localhost hadoop]$export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk

完成之后,我们可以试着查看Hadoop的版本信息,可以运行如下命令。

[hadoop@localhost hadoop]$./bin/hadoop version

此时,应该得到如下提示。

Hadoop 1.2.1
........
This command was run using /usr/local/hadoop/hadoop-core-1.2.1.jar

Hadoop文档中还附带了一些例子来供我们测试,我们可以运行WordCount的例子检测一下Hadoop安装是否成功。

首先,在hadoop目录下新建input文件夹,用来存放输入数据;然后,将conf文件夹下的配置文件拷贝input文件夹中;接下来,在hadoop目录下新建output文件夹,用来存放输出数据;最后,执行如下代码。

[hadoop@localhost hadoop]$./bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z.]+'

执行之后,我们执行以下命令查看输出数据的内容。

[hadoop@localhost hadoop]$cat ./output/*

运行上面命令后,可以得到以下结果。

1 dfsadmin

这意味着,在所有的配置文件中,只有一个符合正则表达式的单词,结果正确。

2.3.5 Hadoop伪分布式安装

伪分布式安装是指在一台机器上模拟一个小的集群。当Hadoop应用于集群时,不论是伪分布式还是真正的分布式运行,都需要通过配置文件对各组件的协同工作进行设置,最重要的几个配置文件如表2-1所示。

表2-1 Hadoop中的配置文件

文件名称

格式

描述

hadoop-env.sh

Bash脚本

记录配置Hadoop运行所需的环境变量,以运行Hadoop

core-site.xml

Hadoop配置XML

Hadoop core的配置项,如HDFS和MapReduce常用的I/O设置等

hdfs-site.xml

Hadoop配置XML

Hadoop的守护进程的配置项,包括NameNode、Secondary NameNode和DataNode等

mapred-site.xml

Hadoop配置XML

MapReduce守护进程的配置项,包括JobTracker和TaskTracker

masters

纯文本

运行SecondaryNameNode的机器列表(每行一个)

slaves

纯文本

运行DataNode和TaskTracker的机器列表(每行一个)

hadoop-metrics.properties

Java属性

控制metrics在Hadoop上如何发布的属性

对于伪分布式配置,我们需要修改core-site.xml、hdfs-site.xml和mapred-site.xml这3个文件。

修改后的core-site.xml文件如下。

<configuration>
   <property> 
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
   </property>
</configuration>

可以看出,core-site.xml配置文件的格式十分简单,<name>标签代表了配置项的名字,<value>项设置的是配置的值。对于core-site.xml文件,我们只需要在其中指定HDFS的地址和端口号,端口号按照官方文档设置为9000即可。

修改后的hdfs-site.xml文件如下。

<configuration>
   <property>
     <name>dfs.replication</name>
     <value>1</value>
   </property>
</configuration>

对于hdfs-site.xml文件,我们设置replication值为1,这也是Hadoop运行的默认最小值,它限制了HDFS文件系统中同一份数据的副本数量。

修改后的mapred-site.xml文件如下。

<configuration>
   <property>
     <name>mapred.job.tracker</name>
     <value>localhost:9001</value>
   </property>
</configuration>

对于mapred-site.xml文件,我们在其中设置JobTracker的地址和端口信息,把端口配置为9001。

对于本书的实验,我们这样配置后就已经满足运行要求了。这里再给出一个官方文档的详细地址,感兴趣的读者可以查看文档配置的其他项目,网址如下:http://hadoop.apache.org/docs/stable

在配置完成后,首先需要初始化文件系统,由于Hadoop的很多工作是在自带的HDFS文件系统上完成的,因此,需要将文件系统初始化之后才能进一步执行计算任务。执行初始化的命令如下。

[hadoop@localhost hadoop]$ ./bin/hadoop namenode -format

执行结果如下。

15/01/14 18:04:15 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:  host = localhost.localdomain/127.0.0.1
STARTUP_MSG:  args = [-format] 
STARTUP_MSG:  version = 1.2.1
STARTUP_MSG:  build =
https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG:  java = 1.7.0_71
************************************************************/
15/01/14 18:04:15 INFO util.GSet: Computing capacity for map BlocksMap
15/01/14 18:04:15 INFO util.GSet: VM type    = 64-bit
15/01/14 18:04:15 INFO util.GSet: 2.0% max memory = 932184064
15/01/14 18:04:15 INFO util.GSet: capacity   = 2^21 = 2097152 entries
........ 
15/01/14 18:04:16 INFO common.Storage: Storage directory  
file:/usr/local/hadoop/hadoop_hadoop/dfs/name has been successfully formatted. 
15/01/14 18:04:16 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/

在看到运行结果中出现“successfully formatted”之后,就说明初始化成功了。

然后,用如下命令启动所有进程,可以通过提示信息得知所有的启动信息都写入对应的日志文件。如果出现启动错误,则可以在日志中查看错误原因。

[hadoop@localhost hadoop]$ ./bin/start-all.sh

运行之后,输入jps指令可以查看所有的Java进程。在正常启动时,可以得到如下类似结果。

[hadoop@localhost conf]$ jps
18271 JobTracker
18860 Jps
17998 DataNode
17854 NameNode
18431 TaskTracker
18171 SecondaryNameNode

此时,可以访问Web界面(http://localhost:50070)来查看Hadoop的信息。

接下来,我们执行如下命令在HDFS中创建存储数据的input文件夹。

[hadoop@localhost hadoop]$./bin/hadoop dfs -mkdir input

在前面的安装单机Hadoop内容中,我们曾经在本地hadoop文件夹下创建了input文件夹,并把conf文件夹下的配置文件复制到input文件夹,作为实验所需的文本文件。现在,我们需要将这些本地的文本文件(配置文件)“上传”到分布式文件系统HDFS中的input文件夹。当然,这里的“上传”并不意味着数据通过网络传输,实际上,在我们这里介绍的伪分布式Hadoop环境下,本地的input文件夹和HDFS中的input文件夹都在同一台机器上,并不需要通过网络传输数据。我们可以执行如下命令,将本地input文件夹中的数据上传到HDFS的input文件夹。

[hadoop@localhost hadoop]$./bin/hadoop dfs -put ./input/ input

接着,运行如下命令来执行字数统计测试样例。

[hadoop@localhost hadoop]$ ./bin/hadoop jar hadoop-examples-1.2.1.jar wordcount input output

在计算完成后,系统会自动在HDFS中生成output文件夹来存储计算结果。大家可以输入下面命令查看最终结果。

[hadoop@localhost hadoop]$./bin/hadoop fs -cat output/*

最后需要指出的是,当需要重新运行程序时,首先需将HDFS中的output文件夹删除。

2.4 本章小结

Hadoop被视为事实上的大数据处理标准,本章介绍了Hadoop的发展历程,并阐述了Hadoop的高可靠性、高效性、高可扩展性、高容错性、成本低、运行在Linux平台上、支持多种编程语言等特性。

Hadoop目前已经在各个领域得到了广泛的应用,如雅虎、Facebook、百度、淘宝、网易等公司都建立了自己的Hadoop集群。

经过多年发展,Hadoop项目已经变得非常成熟和完善,包括Common、Avro、Zookeeper、HDFS、MapReduce、HBase、Hive、Chukwa、Pig等子项目,其中,HDFS和MapReduce是Hadoop的两大核心组件。

本章最后介绍了如何在Linux系统下完成Hadoop的安装和配置,这个部分是后续章节实践环节的基础。

2.5 习题

1.试述Hadoop和谷歌的MapReduce、GFS等技术之间的关系。

2.试述Hadoop具有哪些特性。

3.试述Hadoop在各个领域的应用情况。

4.试述Hadoop的项目结构以及每个部分的具体功能。

5.配置Hadoop时,Java的路径JAVA_HOME是在哪一个配置文件中进行设置的?

6.所有节点的HDFS路径是通过fs.default.name来设置的,请问它是在哪个配置文件中设置的?

7.试列举单机模式和伪分布模式的异同点。

8.Hadoop伪分布式运行启动后所具有的进程都有哪些?

9.如果具备集群实验条件,请尝试按照Hadoop官方文档搭建全分布式的Hadoop集群环境。

实验1 安装Hadoop

一、实验目的

1.掌握Linux虚拟机的安装方法。Hadoop在Linux操作系统上运行可以发挥最佳性能。鉴于目前很多读者正在使用Windows操作系统,因此,为了完成本书的后续实验,这里有必要通过本实验让读者掌握在Windows操作系统上搭建Linux虚拟机的方法。

2.掌握Hadoop的伪分布式安装方法。很多读者并不具备集群环境,需要在一台机器上模拟一个小的集群,因此,需要通过本实验让读者掌握在单机上进行Hadoop的伪分布式安装方法。

二、实验平台

操作系统:Windows系统或者CentOS7(推荐)。

虚拟机软件:推荐使用的开源虚拟机软件为VirtualBox。VirtualBox是一款功能强大的免费虚拟机软件,它不仅具有丰富的特色,性能也很优异,且简单易用,可虚拟的系统包括Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android 4.0系统等操作系统。读者可以在Windows系统上安装VirtualBox软件,然后在VirtualBox上安装并且运行Linux操作系统。本次实验默认的Linux发行版为CentOS7。

三、实验内容和要求

1.下载相关软件

如果读者正在使用Linux操作系统,可以跳过本步,就不需要下载相关软件了;如果正在使用Windows操作系统,请下载VirtualBox4.3.20和CentOS7镜像文件。

VirtualBox4.3.20的下载地址:https://www.virtualbox.org/wiki/Downloads

CentOS7的镜像文件下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0- 1406-x86_64-DVD.iso

2.安装Linux虚拟机

如果读者正在使用Linux操作系统,则不需要了解Windows系统上的Linux虚拟机安装方法;如果正在使用Windows操作系统,则需要在Windows系统上安装Linux虚拟机。首先,在Windows系统上安装虚拟机软件VirtualBox4.3.20;然后在虚拟机软件VirtualBox上安装CentOS7
操作系统。

3.进行Hadoop伪分布式安装

在Linux环境下完成伪分布式环境的搭建,并运行Hadoop自带的WordCount实例检测是否运行正常。

四、实验报告

《大数据技术原理与应用》 实验报告
题目: 姓名: 日期:
实验环境:

实验内容与完成情况:

出现的问题:

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):


目录

相关文章

  • 山西省高等教育计算机专业课程教学研讨会

    2016年4月24日,人民邮电出版社与山西财经大学信息管理学院联合举办了“山西省本科计算机专业精品资源共享课程研讨会,山西省100多位相关专业老师参加,会上全国”大数据“与”数据结构“课程专家进行了精彩的讲座,获得参会教师的一致好评。...

    1256 0 0 6
  • 以平台化思维构建高效大数据课程公共服务体系

    大数据的兴起,将在很大程度上改变中国高校信息技术相关专业的现有教学体制和教学方法。作为大数据教学工作者,必须敢于站在第三次信息化浪潮的潮头,高瞻远瞩,大胆实践,只有这样,才能够在新时期的教学工作中有所作为,有所成就。中国高校大数据课程公共服务平台,是一个开放的平台,不断进步提升的平台,未来将会有更多来自全国各地的热爱大数据教学的开拓创新者加入这个平台,为平台建设添砖加瓦,共同推进中国高校大数据教学...

    972 0 0 1

推荐用户

同系列书

人邮微信
本地服务
人邮微信
教师服务
二维码
读者服务
读者服务
返回顶部
返回顶部