安装单机Hadoop系统

 

 

 

胖叔提醒~转发请注明文章出处:http://www.cnblogs.com/njuduyu/articles/2987788.html

这学期学了hadoop,第一个实验是安装单机hadoop,这里记下来,以后再装的时候可以看,高手勿喷。

 

一、安装

本文中主要介绍的是安装单机Hadoop系统。在这一章主要介绍系统安装运行的情况,涵盖以下几个部分:安装环境、安装条件与准备、安装过程以及安装时候遇到的问题和解决方案。

1.1安装环境介绍

1.1.1实验机器的配置

1)处理器:64位四核i7处理器

2)操作系统:windows 7

3)硬盘:1T

1.1.2安装方式

本次实验准备在Linux系统下安装单机Hadoop系统,并选择使用虚拟机的方式安装。

1.2安装条件与准备

1.2.1条件

1)需要一个Linux系统的镜像文件,本文选择使用Ubuntu系统,版本选择为12.04,32位系统;

2)在1.1中我们提到,本文的系统是跑在虚拟机中的,因此我还需要一个虚拟机软件,本文选择使用VMware-workstation,版本是9.0.1;

3)系统和虚拟机是基础,这是因为hadoop要配置在系统上面。而这次实验的重点还是Hadoop,因此我还需要hadoop的安装文件,这里我选择hadoop的版本为1.0.4;

4)以上都准备好了,那我们还需要一个文件,就是jdk,这里我选择的版本是32位的6u43。

1.2.2准备

本节主要附上一些链接:

1)hadoop下载链接:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.0.4/

2)jdk下载链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html

1.3安装过程

1.3.1在虚拟机中安装Ubuntu

打开VMware workstation,如图1,在显示主界面后,选择“create a new virtual Machine”。

 

图1 VMware workstation主页面

在选择创建一个新的虚拟机后,会弹出如图2所示的对话框,我们选择“Typical”的方式进行安装:

 

图2选择安装方式

在点击next之后,会弹出一个对话框,让用户选择安装的方式,因为我们是从网上下载到的镜像,所以我们会选择用第二种方式进行安装,在Installer disc image file中选择已经从网上下载到的镜像,然后进行安装(如图3所示)。

 

图3选择一个镜像

在这里我们将为虚拟机设置机器名,用户名以及密码,如图4所示。

 

图4设置机器名用户名以及密码

接下来,一直用默认选项安装,最后出来图5的界面,然后选择finish完成配置,至此我就完成了对镜像的导入以及设置。

 

图5完成镜像的导入以及设置

下面的VMware会自动安装之前加载进来的iso文件,为了减少等待的时间,待安装完系统后,我选择跳过语言的安装,如图6所示,点击skip。

 

图6跳过语言安装

接下来就等待系统安装完,紧接着安装完成后,登陆系统,然后把之前下载的hadoop与jdk的安装文件拷贝到Ubuntu中,图7所示。

图7拷贝安装文件到Ubuntu中

至此,Ubuntu就安装完了。

1.3.2解压与配置

紧接着下面就是安装这两个文件,可以分成两个步骤:第一步是解压文件到指定的文件夹,第二步是配置环境变量。

(1)解压文件

首先,解压jdk文件,先打开中端,然后按照图8的指令来:

 

图8解压jdk

图8的意思是,在usr目录下新建一个文件夹java,然后将jdk安装到这个文件夹下。由于我下载的是bin文件,对于该类文件,直接在命令行中输入路径就可以了,但是要在目标文件夹中输入该路径。除此之外,因为我们是在usr目录下操作,作为普通用户是没有这个权限来创建文件夹的,所以要在前面加上sudo关键词,获取root权限。

在解压完jdk后,紧接着应该解压hadoop文件了。首先要回到~目录下,然后可以新建一个文件夹hadoop_installs,然后将下载的hadoop的tar包解压到这个文件夹下面。我会用到下面的指令(如图9所示):

 

图9解压hadoop的jar包

至此,两个文件已经全部解压了,下面要做的就是配置环境变量。

(2)配置环境变量

配置环境变量后才能系统才能知道已经装了jdk以及hadoop,并且方便的使用指令。一共要配置这些文件:

~/.bashrc系统环境变量的设置;

hadoop/conf/hadoop-evn.shHadoop环境变量设置;

hadoop/conf/core-site.xml主要完成NameNode的IP和端口设置;

hadoop/conf/hdfs-site.xml主要完成HDFS的数据块副本等参数设置;

hadoop/conf/mapred-site.xml主要完成JobTracker IP和端口设置;

有的地方要求在单机安装情况下,需要对masterslaves两个文件设置,但是在我安装的1.04版本中,这两个文件默认已经写入localhost,所以不需要再设置。

下面一个一个文件修改,首先来看.bashrc文件,使用图10所示的指令利用gedit来打开该文件,要加sudo,否则不能修改:

 

图10编辑.bashrc文件

紧接着,把下面的内容复制到.bashrc文件的末尾,这段话的含义就是指出了文件的安装路径:

PATH=$PATH:$HOME/bin

export  JAVA_HOME=/usr/java/jdk1.6.0_43

export  HADOOP_INSTALL=/home/hadoop/hadoop_installs/hadoop-1.0.4

export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_INSTALL/bin

export  CLASSPATH=$JAVA_HOME/lib:.

其中值得说的是HADOOP_INSTALL,因为有的地方说这里应该写HADOOP_HOME,这里要说明,在hadoop1.0x版本以后,如果写HADOOP_HOME会提示一个warning,再网上查了一下,改成HADOOP_INSTALL就没有警告了具体的编辑可以参看图11。

 

图11编辑.bashrc文件,配置环境变量

至此,环境变量已经配好了一部分,这个时候,在控制台输入java –version会显示当前jdk的版本号,如果输入hadoop也会给出正确的提示。下面,我们还要再改一些文件,这些文件在hadoop安装文件下的conf目录下面:

首先来修改hadoop-env.sh来对Hadoop环境变量设置,打开的方式还是使用sudo gedit指令,在图12中修改少许内容就可以了,可以看到有一行是export JAVA_HOME,在修改之前,这一行是被注释掉的,所以只要把#去掉,然后在等于号之后,添上自己的jdk安装路径就可以了。

 

图12修改hadoop-env.sh文件

下面,就要来修改core-site.xml,hdfs-site.xml以及mapred-site.xml。我是参考http://hadoop.apache.org/docs/r1.0.4/single_node_setup.html这个网址中的建议,设置上面三个文件的,该网址是hadoop官方的一个文档,告诉怎么配置安装单节点的hadoop。

首先还是打开文件,先打开core-site.xml,如图13所示:

 

图13打开编辑core-site.xml

根据官方文档的内容,要将下面的内容添加到core-site文件中,

     <property>

         <name>fs.default.name</name>

         <value>hdfs://localhost:9000</value>

     </property>

 

下面图14给出在core-site.xml文件中的何处添加。

 

图14完成NameNode的IP和端口设置

紧接着,配置hdfs-site.xml,根据官方文档,将下面的内容添加进图15中所示的位置。

     <property>

         <name>dfs.replication</name>

         <value>1</value>

     </property>

 

图15完成HDFS的数据块副本等参数设置

最后,配置mapred-site.xml文件,根据官方文档,将下面的内容添加进图16中所示的位置。

     <property>

         <name>mapred.job.tracker</name>

         <value>localhost:9001</value>

     </property>

 

图16完成JobTracker IP和端口设置

1.3.3配置ssh

在配置完上面的内容后,最后要实现的一步,也是必不可少的,这就是ssh,那么什么是ssh呢?这里给出一个简单的介绍:

SSH(Secure Shell),是建立在应用层和传输层基础上的安全协议。传统的网络服务程序,如FTP、POP和Telnet本质上都是不安全的;它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。

而SSH是目前较为可靠的、专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。SSH另一项优点是其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、PPP提供一个安全的登陆会话“通道”。

Hadoop使用SSH保证在远程管理Hadoop节点和节点间用户共享访问时的安全性。

下面,要做的就是免密码的ssh设置,这样以后登录连接的时候hadoop服务的时候,就不需要输入密码了。

还是一步一步的做,首先要输入如下指令

$ssh-keyen –t -rsa

然后一直按回车键,就会按照默认的选项将生成的秘钥对保存在.ssh/id_rsa文件中,如图17所示。

 

图17将秘钥对保存在.ssh/id.rsa文件中

下面进入.ssh目录,执行如下命令:

$sudo cp id_rsa.pub authorized_keys

如图18所示,完成刚刚的操作,其中id_rsa 和id_rsa.pub,是一个公钥和一个私钥文件。

 

图18复制操作

下面就是看看能不能用ssh无密码的连接了,可以尝试连接本地主机,也就是用ssh localhost来做测试,如图19所示。

 

图19测试本地连接

可是从上图中看到,这个时候不能连,这是什么原因呢?查了一下,大多数情况下,是因为ssh没安装,这个时候,可以用apt-get指令安装ssh,如图20所示。

 

图20安装ssh

在安装之后,再次连接就没问题了。至此整个hadoop安装到此结束。下面将讲述如何运行hadoop,并跑一个小例子。

二、运行Hadoop

本部分主要讲的是如何运行hadoop服务,并且跑一个小例子。首先来介绍一下如果运行hadoop。

2.1hadoop的运行

(1)格式化分布式文件系统。使用如下命令进行格式化:

$hadoop namenode -format

图21是使用格式化命令后,控制台的输出,可以看到其中有一行是xxx has been successfully formatted,这就意味着格式化成功了。

 

图21格式化分布式文件系统

(2)启动hadoop守护进程。启动守护进程的命令如下:

$start-all.sh

成功执行后将在本机上启动NameNode、DataNode、JobTracker、TaskTracker和Secondary NameNode五个新的Java进程。

可是我再启动的时候,遇到图22所示的错误,说我没有权限去建立一些文件,因此,start-all.sh其实执行不起来。

 

图22启动守护进程出错

后来我也查到了出错的原因,这是因为我没有获得hadoop安装目录的操作权限,那么使用下面的指令(图23所示)便可获得权限。

 

图23获得hadoop-1.0.4的操作权限

然后再次执行start-all.sh就没有错了,可以看图24中,成功的启动了守护进程。

 

图24启动守护进程

在启动之后,就可以查看新建的五个进程了,如图25所示,输入jps然后可以显示以下各进程信息则说明HDFS和MapReduce都已正常启动。

 

图25用JPS命令检查一下是否正常启动

(3)停止Hadoop守护进程。最后需要停止Hadoop守护进程,命令如下:

$stop-all.sh

如图26所示,停止守护进程,控制台会给出如下显示。

 

图26停止守护进程

三、运行实例

上面的两个部分,第一部分介绍了安装,第二部分介绍了运行,最后第三部分,要介绍如何运行实例,首先还是先格式化分布式文件系统(为了保险起见),然后启动Hadoop守护进程。本部分要介绍的实例是,首先找到一组英文网页数据,然后在本机上运行Hadoop系统自带的WordCount可执行程序文件,并产生输出结果。

这里我取了两个英文网页:

Hadoop官网:http://hadoop.apache.org/

JDK官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html

然后将这两个网页保存为htm文件在本地。

为了分析这两个文件,首先要在hadoop文件系统中建立一个文件夹,这里我建立的是testin,这个文件夹用来存放稍后要上传的文件。然后在本地建立一个input文件,input文件中放着从网上下载下来的两个网页。

在分布式文件系统中建立文件如图27所示,需要如下指令:

$hadoop dfs –mkdir /testin

然后,将本地文件夹input的内容,上传至文件系统中,用到如下指令:

$hadoop dfs –copyFromLocal /home/hadoop/input testin

如图27中第二条指令所示,意思就是将input中内容上传到testin中。

 

图27新建文件以及上传文件

接下来就是执行自带的wordcount,要用到如下指令:

$hadoop jar /home/hadoop/hadoop_installs/hadoop-1.0.4/hadoop-examples-1.0.4.jar wordcount testin testout

其中testout为数据处理完成后的输出目录(需要注意的是执行之前out目录必须为空,或者不存在这个目录,否则会出错),默认存放在分布式系统用户的根目录下(如图28所示)。

 

图28成功执行wordcount

那么如果要看输出结果怎么办,有两种方法,一种是直接查看分布式当中的文件,直接输入如下指令就可以了:

$hadoop dfs –cat testout/*

另外,用户也可以把输出文件从hadoop分布式文件系统复制到本地文件系统查看,如图29和30所示。

 

图29获取输出到本地

 

图30查看结果

在输入cat output/*后,可以看到下面图31所示的结果,统计了很多词:

 

图31统计词数运行结果

这里再查看一下程序运行后在Hadoop Web作业状态查看界面上的作业运行状态,如图32所示:

 

图32程序运行后在Hadoop Web作业状态查看界面上的作业运行状态

 

第一次实验到此结束!

 

posted @ 2013-03-28 22:34  胖叔  阅读(899)  评论(0)    收藏  举报