在三台虚拟机上部署多节点Hadoop

  • 格式:doc
  • 大小:119.50 KB
  • 文档页数:14

cd /etc/networkvi interfaces进入vi后,编辑auto eth0iface eth0 inet staticaddress IP地址netmask 掩码gateway 网关重启SSH:serivce ssh restart重启网卡:/etc/init.d/networking restart取得root权限:sudo passwdsu1.硬件环境共有3台机器,均使用的linux系统,Java使用的是openjdk-6-jdk sudo apt-get updatesudo apt-get install openjdk-6-jdk修改主机名:suvi /etc/hostnameIP配置如下:hadoop1:192.168.75.132(NameNode)hadoop2:192.168.75.131(DataNode)hadoop3:192.168.75.133 (DataNode)这里有一点需要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析。

一个很简单的测试办法就是ping一下主机名,比如在hadoop1上ping hadoop2,如果能ping通就OK!若不能正确解析,可以修改/etc/h osts文件,如果该台机器作Namenode用,则需要在hosts文件中加上集群中所有机器的IP地址及其对应的主机名;如果该台机器作Datanode用,则只需要在hosts文件中加上本机IP地址和Namenode机器的IP地址。

以本文为例,hadoop1(NameNode)中的/etc/hosts文件看起来应该是这样的:vi /etc/hosts127.0.0.1hadoop1localhost192.168.75.132hadoop1hadoop1192.168.75.131hadoop2hadoop2192.168.75.133hadoop3hadoop3hadoop2(DataNode)中的/etc/hosts文件看起来就应该是这样的:127.0.0.1hadoop2localhost192.168.75.132hadoop1hadoop1192.168.75.131hadoop2hadoop2hadoop3(DataNode)中的/etc/hosts文件看起来就应该是这样的:127.0.0.1hadoop3localhost192.168.75.132hadoop1hadoop1192.168.75.133hadoop3hadoop3对于Hadoop来说,在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一个,Datanode可以是很多;在MapReduce看来,节点又分为Jobtracker和Tasktracker,其中Jobtracker只有一个,Tasktr acker可以是很多。

我是将namenode和jobtracker部署在hadoop1上,h adoop2, hadoop3作为datanode和tasktracker。

当然你也可以将namen ode,datanode,jobtracker,tasktracker全部部署在一台机器上。

2.目录结构由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。

addgroup hadoopadduser --ingroup hadoop hadoop三台机器上是这样的:都有一个hadoop的帐户,主目录是/home/hado op。

下载hadoop:wget /apache/hadoop/core/stable/hadoop-0.20.203.0rc1.tar.gz解压:[hadoop@ hadoop1:~]$tar -zxvf hadoop-0.21.0.tar.gz Hadoop部署目录结构如下:/home/hadoop/hadoop0.21.0,所有的h adoop版本放在这个目录中。

将hadoop0.21.0压缩包解压至hadoop0.21.0中,为了方便以后升级,建议建立一个链接指向要使用的hadoop版本,不妨设为hadoop,[hadoop@ hadoop1:~]$ln -s hadoop-0.21.0 hadoop这样一来,所有的配置文件都在/home/hadoop/hadoop/conf/目录中,所有执行程序都在/home/hadoop/hadoop/bin目录中。

但是由于上述目录中hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级h adoop版本的时候所有的配置文件都会被覆盖,因此建议将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,/home/hadoo p/hadoop/hadoop-config,然后将/home/hadoop/hadoop/conf/目录中的masters,slaves,hadoop-env.sh三个文件拷贝到hadoop-config目录中,并指定环境变量$HADOOP_CONF_DIR指向该目录。

环境变量在/home/had oop/.bashrc和/etc/profile中设定。

如:HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-configexport HADOOP_CONF_DIR即:cd /home/hadoop/hadoopmkdir hadoop-configcp conf/masters hadoop-config/cp conf/slaves hadoop-config/cp conf/hadoop-env.sh hadoop-config/sudo vi /etc/profileHADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-configexport HADOOP_CONF_DIRvi /home/hadoop/.bashrcHADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-configexport HADOOP_CONF_DIR综上所述,为了方便以后升级版本,我们需要做到配置文件与安装目录分离,并通过设定一个指向我们要使用的版本的hadoop的链接,这样可以减少我们对配置文件的维护。

3.SSH设置在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。

首先要保证每台机器上都装了SSH服务器,且都正常启动。

实际中我们用的都是OpenSSH,这是SSH协议的一个免费开源实现。

apt-get install ssh以本文中的3台机器为例,现在hadoop1是主节点,它需要主动发起SS H连接到hadoop2,对于SSH服务来说,hadoop1就是SSH客户端,而h adoop2, hadoop3则是SSH服务端,因此在hadoop2,hadoop3上需要确定sshd服务已经启动。

简单的说,在hadoop1上需要生成一个密钥对,即一个私钥,一个公钥。

将公钥拷贝到hadoop2上,这样,比如当hadoop1向h adoop2发起ssh连接的时候,hadoop2上就会生成一个随机数并用hadoop 1的公钥对这个随机数进行加密,并发送给hadoop1,hadoop1收到这个加密的数以后用私钥进行解密,并将解密后的数发送回hadoop2,hadoop2确认解密的数无误后就允许hadoop1进行连接了。

这就完成了一次公钥认证过程。

对于本文中的3台机器,首先在hadoop1上生成密钥对:[hapoop@hadoop1:~]$ssh-keygen -t dsa –P ‘’–f ~/.ssh/i d_dsa这个命令将为hadoop1上的用户hadoop生成其密钥对。

生成的密钥对i d_rsa,id_rsa.pub,在/home/hadoop/.ssh目录下。

[hapoop@hadoop1:.ssh]$cat ~/.ssh/id_dsa.pub >> ~/.ssh/aut horized_keys然后将id_rsa.pub的内容复制/home/hadoop/.ssh/authorized_keys 文件中。

对于hadoop2:[hapoop @ hadoop2:~]$mkdir .ssh对于hadoop3:[hapoop @ hadoop3:~]$mkdir .ssh[hapoop @ hapoop1:.ssh]$scp authorized_keys hapoop2:/ho me/hapoop/.ssh/[hapoop @ hapoop1:.ssh]$scp authorized_keys hapoop3:/ho me/hapoop/.ssh/此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即hadoop2,hadoop3机器上hadoop帐户的密码,当然,你也可以用其他方法将authorized_keys文件拷贝到其他机器上。

[hadoop@hadoop2:.ssh]$chmod 640 authorized_keys[hadoop@hadoop3:.ssh]$chmod 640 authorized_keys这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。

[hadoop@ hadoop2:.ssh] $ls -ladrwx------ 2 hadoop hadoop.drwx------ 3 hadoop hadoop..-rw-r--r-- 1 hadoop hadoop authorized_keys注意每个机器上的.ssh目录的ls -la都应该和上面是一样的接着,在3台机器上都需要对sshd服务进行配置,修改文件/etc/ssh/sshd_ config。

vi /etc/ssh/sshd_config#去除密码认证PasswordAuthentication no (?如果这样,putty就不能登陆Linu x了,去掉)AuthorizedKeysFile .ssh/authorized_keys至此各个机器上的SSH配置已经完成,可以测试一下了,比如hadoop1向hadoop2发起ssh连接。

[hadoop@hadoop1:~]$ssh hadoop2如果ssh配置好了,就会出现以下提示信息The authenticity of host [hadoop2] can't be established.Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98: 9c:fe:e9:52.Are you sure you want to continue connecting (yes/no)?OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。