> Linux集群 > Hadoop >

hadoop1.1.2分布式环境搭建

hadoop1.1.2分布式安装

Hadoop简介

 

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

 

  对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

 

从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

 

环境说明

集群规划

 集群中包括3个节点:1个Master,2个Slave,节点之间局域网连接,可以相互ping通,

机器名称

IP地址

节点说明

       icity0

192.16.39.141

     Master

       icity1

192.16.39.174 

     Slave

       icity2

192.16.39.175 

     Slave

 

3个节点上均是Redhat6系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;2个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。

 

Linux服务器配置信息

 

[root@localhost ~]# uname -a

Linux localhost.localdomain2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64GNU/Linux

[root@localhost ~]# free

            total       used       free    shared    buffers     cached

Mem:      2054828    1928908     125920          0     67940      95796

-/+ buffers/cache:    1765172    289656

Swap:     6291448     511492    5779956

 

创建hadoop用户

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.32-220.el6.x86_64#1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# free

            total       used       free    shared    buffers     cached

Mem:      2054828    1928908     125920          0     67940      95796

-/+ buffers/cache:    1765172    289656

Swap:     6291448     511492    5779956

 

 

1.3:创建hadoop用户

 

[root@localhost ~]# useradd hadoop

[root@localhost ~]# pwd hadoop

/root

[root@localhost ~]# passwd hadoop

Changing password for user hadoop.

New password:

BAD PASSWORD: it is WAY too short

BAD PASSWORD: is a palindrome

Retype new password:

Sorry, passwords do not match.

New password:

BAD PASSWORD: it is toosimplistic/systematic

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updatedsuccessfully.

[root@localhost ~]# su - hadoop

[hadoop@localhost ~]$ pwd

/home/hadoop

 

 

这里面我设置的密码是123456,所以比较简单,有提示,不用管,在另外两台服务器上按照这个操作创建hadoop用户。

 

修改网关

将141 服务器的hostname设置为icity0

vi /etc/sysconfig/network    

 

 

依此操作将另外两台服务器修改为icity1 和 icity2;将此文件scp到另外两台服务器覆盖其上面的文件也可以。

 

设置完此部分,重启服务器。reboot

 

配置hosts文件

将ip与hostname对应的信息写入hosts文件,如图所示:

vi /etc/hosts

 

 

依此操作将另外两台服务器修改为icity1 和 icity2;将此文件scp到另外两台服务器覆盖其上面的文件也可以。

 

配置完成后重启网卡:

service network restart

 

关闭防火墙

service iptables stop

 

建议将服务器按如下设置:

chkconfig iptables off  --关闭防火墙开机启动

chkconfig iptables –list   – 查看状态

如图所示:

 

依此操作另外两台服务器icity1 icity2

 

环境测试

每台服务器上操作,如图所示:

 

ping icity0

ping icity1

ping icity2

 

 

配置SSH无密码登录

SSH无密码原理

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。

 

生成密钥

首先登陆141,切换到hadoop用户:

su – hadoop

执行:

ssh-keygen  -t  rsa

命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。

如图所示:

 

查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

 

依此操作另外两台服务器icity1 icity2

 

Icity1

 

Icity2

 

 

回到icity0服务器,切换到hadoop用户

 

cd /home/hadoop/.ssh

cp id_rsa.pub  authorized_keys

 

回到hadoop目录,建立sshkey目录:

 

 

操作icity1icity2服务器,将刚才生成的密钥文件scpsshkey目录下面;

Icity1

 

Icity2

 

回到icity0服务器的hadoop用户,查看sshkey文件夹:

 

icity1icity2的密钥放入authorized_keys文件中,如图操作:

 

 

查看authorized_keys文件:

 

 

测试icity0无密码登录:

 

确实没有要求输入密码;

 

icity0.ssh目录下面的authorized_keys文件scpicity1icity2 .ssh目录下面;

scp authorized_keys  hadoop@icity1:/home/hadoop/.ssh/

scp authorized_keys  hadoop@icity2:/home/hadoop/.ssh/

如图所示:

 

登录icity1icity2hadoop用户,查看文件:

 

 

 

 

回到icity0hadoop用户,测试icity1icity2的无密码登录验证:

 

 

 

 

至此,无密码验证配置完成。

 

软件安装

Jdk安装配置

将jdk1.7上传到icity0服务器的/usr/java/目录下面,解压后如图所示:

 

解压完成后,将其scp到icity1和icity2服务器的/usr/java/目录下面,如果不存在java目录,先创建此java目录;

执行如下命令:

su – hadoop

scp -r /usr/java/jdk1.7.0_09hadoop@icity1:/usr/java/

scp -r /usr/java/jdk1.7.0_09 hadoop@icity2:/usr/java/

 

由于之前已经配置了无密码加密,故无需输入密码,直接执行命令即可。

 

配置jdk环境变量

 

在ictiy0服务器的hadoop用户下面,

su – haoop

vi .bash_profile

 

 

输入红圈中的内容即可。

依此操作另外两台服务器icity1 icity2

 

使配置生效

保存并退出,执行下面命令使其配置立即生效。

source  .bash_profile

依此操作另外两台服务器icity1 icity2

 

“配置jdk环境变量”和“使配置生效”可以合为一步,将icity0配置好的.bash_profile文件scpicity1icity2 /home/haoop/目录下面,然后ssh icity1ssh icity2上,执行

source  .bash_profile 即可。

至此,jdk配置完成。

 

Hadoop安装

将hadoop1.1.2上传到icity0服务器的hadoop用户目录下面,如图所示:

 

解压并重命名为hadoop,如图所示:

tar -zxvf hadoop-1.1.2.tar.gz

mv hadoop-1.1.2 hadoop

 

 

修改Hadoop的配置

修改conf/hadoop-env.sh

vi hadoop-env.sh

 

保存退出。

 

 

配置conf/core-site.xml

vi core-site.xml

增加如下内容:如图所示:

 

 

配置conf/hdfs-site.xml

vi hdfs-site.xml 增加如下内容,如图所示:

 

 

配置conf/mapred-site.xml

vi mapred-site.xml 增加如下内容,如图所示:

 

 

配置conf/masters

vi masters 增加如下内容,如图所示:

 

 

配置conf/slaves

vi slaves 增加如下内容,如图所示:

 

 

至此,hadoop配置完成。

 

配置hadoop环境变量

切换到icity0服务器,切换到hadoop用户,

配置.bash_profile文件,增加如下内容:

vi .bash_profile

 

保存退出。

使配置生效:

source .bash_profile

 

scp hadoop目录和文件到slave节点

将icity0 上面的hadoop安装目录和文件scp到icity1和icity2服务器上面。

scp -r hadoop hadoop@icity1:/home/hadoop/

scp -r hadoop hadoop@icity2:/home/hadoop/

 

scp  .bash_profile 文件到slave节点

.bash_profile配置文件scpicity1icity2hadoop /home/hadoop/目录下面,然后ssh icity1ssh icity2上,执行source .bash_profile即可。具体见图:

 

 

自此,所有配置工作完成,下面开始启动hadoop

 

启动/停止Hadoop集群

启动hadoop集群

格式化

在icity0上第一次启动Hadoop,必须先格式化namenode

cd $HADOOP_HOME /bin

hadoop namenode –format

如图所示:

 

启动Hadoop

cd $HADOOP_HOME/bin

./start-all.sh

如果启动过程,报错safemode相关的Exception

执行命令

#hadoop dfsadmin -safemode leave

然后再启动Hadoop

 

 

启动没有报错。启动完成。

 

 

停止Hadoop

cd $HADOOP_HOME/bin

./stop-all.sh

 

进程检查

在master icity0服务器上执行jps:存在3大进程:

NameNode

SecondaryNameNode

JobTracker

 

 

在slave上执行jps:存在进程:

DataNode

TaskTracker

 

 

 

 

终端查看集群状态

执行命令:

hadoop dfsadmin –report

如图所示:

 

 

到此,整个hadoop的分布式安装完成。




(责任编辑:IT)