ITPub博客

首页 > 大数据 > Hadoop > Hadoop学习小结(3).Hadoop的环境配置

Hadoop学习小结(3).Hadoop的环境配置

Hadoop 作者:jhk2010 时间:2012-11-29 16:02:09 0 删除 编辑

1.集群部署介绍

1.1hadoop介绍

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分布式集群的主要任务。

 

1.2环境说明 

集群中包括4个节点:1个Master,3个Salve,节点之间局域网连接,可以相互ping通,具体集群信息可以查看"一、机器分布表"。节点具体信息如下:

 

Master

Slave1

Slave2

Slave3

名称

Master.Hadoop

Slave1.Hadoop

Slave2.Hadoop

Slave3.Hadoop

IP地址

192.168.0.21

192.168.0.22

192.168.0.23

192.168.0.24

最高用户名称

root

root

root

root

一般用户名称

hadoop

hadoop

hadoop

hadoop

一般用户密码

hadoop

hadoop

hadoop

hadoop

四个节点上均是RedHat系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。其实应该还应该有1个Master机器,用来作为备用,以防止Master服务器宕机,还有一个备用马上启用。后续经验积累一定阶段后补上一台备用Master机器。

2.Master机器的相关配置

由于在XenServer中可以通过full copy来克隆虚拟机,因此我们只需要在Master机器上配置好所有需要的环境和软件,然后通过full copy的方法就可以得到与Master机器一模一样配置的机器,再进行相关的修改就可以得到我们需要的Slave机器。

2.1网络配置

从上面的机器分布表可以知道,我们的Master机器的主机名为“Master.Hadoop”,IP为“192.168.0.21”。

2.1.1查看当前机器名称

用下面的命令显示机器名称,如果跟规划的不一致,要按照下面进行修改。

hostname

Hadoop学习小结(3).Hadoop的环境配置

上图中,用“hostname”查“Master”机器的名字为“Master.Hadoop”,与我们预先规划的一致。

2.1.2修改当前机器名称

如果我们发现我们的机器的主机名不是我们想要的,通过对“/etc/sysconfig/network”文件修改其中的“HOSTNAME”后面的值,改成我们规划的名称。

这个“/etc/sysconfig/network”文件是定义hostname和是否利用网络的不接触网络设备的对系统文件定义的文件。

设定形式:设定值=值

“/etc/sysconfig/network”的设定项目如下:

NETWORKING 是否利用网络

GATEWAY 默认网关

IPGATEWAYDEV 默认网关的接口名

HOSTNAME 主机名

DOMAIN 域名

用下面命令进行修改当前机器的主机名(备注:修改系统文件一般用root用户)

vim /etc/sysconfig/network

Hadoop学习小结(3).Hadoop的环境配置

通过上面的命令我们从“/etc/sysconfig/network”中找到“HOSTNAME”进行修改,查看内容如下:

Hadoop学习小结(3).Hadoop的环境配置

2.1.3修改当前机器的IP

一般情况,机器的IP地址在虚拟机的安装过程中已经配置好了,但如果没有配置好或者需要修改IP,那此时我们需要对“ifcfg-eth0”文件进行配置,该文件位于“/etc/sysconfig/network-scripts”文件夹下。

在这个目录下面,存放的是网络接口(网卡)的制御脚本文件(控制文件),ifcfg- eth0是默认的第一个网络接口,如果机器中有多个网络接口,那么名字就将依此类推ifcfg-eth1,ifcfg-eth2,ifcfg- eth3,……。

这里面的文件是相当重要的,涉及到网络能否正常工作。

设定形式:设定值=值

设定项目项目如下:

DEVICE 接口名(设备,网卡)

BOOTPROTO IP的配置方法(static:固定IP, dhcpHCP, none:手动)

HWADDR MAC地址

ONBOOT 系统启动的时候网络接口是否有效(yes/no)

TYPE 网络类型(通常是Ethemet)

NETMASK 网络掩码

IPADDR IP地址

IPV6INIT IPV6是否有效(yes/no)

GATEWAY 默认网关IP地址

 

用下面的命令进行修改:

vim /etc/sysconfig/network-scripts/ifcgf-eth0

Hadoop学习小结(3).Hadoop的环境配置

修改完之后可以用“ifconfig”进行查看。

Hadoop学习小结(3).Hadoop的环境配置

2.1.4配置hosts文件

"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。

我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器,解决的办法就是修改"/etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。

在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件末尾中都要添加如下内容:

192.168.0.21 Master.Hadoop

192.168.0.22 Slave1.Hadoop

192.168.0.23 Slave2.Hadoop

192.168.0.24 Slave3.Hadoop

用一下命令进行添加:

vim /etc/hosts

Hadoop学习小结(3).Hadoop的环境配置

添加结果如下:

Hadoop学习小结(3).Hadoop的环境配置

(备注:如果事先有装过Slave机器,在配置SSH无密码验证之后,就可以通过以“scp”进行复制,然后把原来的“hosts”文件执行覆盖即可。)

2.2所需软件

1)JDK软件

下载地址:http://www.oracle.com/technetwork/java/javase/index.html

    JDK版本:jdk-6u35-linux-i586.bin

2)Hadoop软件

下载地址:http://hadoop.apache.org/common/releases.html

    Hadoop版本:hadoop-0.20.2.tar.gz

然后通过FlashFXP.exe软件把我们下载的JDK和Hadoop软件上传到“Master.Hadoop:192.168.0.21”服务器上。我们可以在Master机器上用命令查看一下是否已经上传了。

ll

Hadoop学习小结(3).Hadoop的环境配置

从图中可以看出我们所需的软件已经准备好了。

2.3安装和启动SSH协议

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

通过一下命令查看ssh和rsync是否已经安装:

rpm –qa | grep openssh

rpm –qa | grep rsync

Hadoop学习小结(3).Hadoop的环境配置

如果没有安装ssh和rsync,可以通过下面命令进行安装。

yum install ssh 安装SSH协议

yum install rsync (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主 机间的文件)

service sshd restart 启动服务

由于我们在前面已经将yum源转成了centos的源,所以我们可以执行上面的命令。这样在之后克隆虚拟机的时候能确保所有的服务器都安装,然后各台机器之间才可以通过密码验证相互登。

2.4Java环境的安装

现在就先在Master服务器安装JDK以及配置环境变量,需要以"root"的身份进行。

2.4.1安装JDK

首先用root身份登录“Master.Hadoop”后在“/usr”下创建“java”文件夹。再把再把用FTP上传到"/home/hadoop/"下的"jdk-6u35-linux-i586.bin"复制到"/usr/java"文件夹中。

mkdir /usr/java

cp /home/hadoop/jdk-6u31-linux-i586.bin /usr/java

接着进入"/usr/java"目录下通过下面命令使其JDK获得可执行权限,并安装JDK。

 

 

 

chmod +x jdk-6u31-linux-i586.bin

./jdk-6u31-linux-i586.bin

按照上面几步进行操作,最后点击"Enter"键开始安装,安装完会提示你按"Enter"键退出,然后查看"/usr/java"下面会发现多了一个名为"jdk1.6.0_35"文件夹,说明我们的JDK安装结束,删除"jdk-6u35-linux-i586.bin"文件,进入下一个"配置环境变量"环节。

rm -rf jdk-6u35-linux-i586.bin 

Hadoop学习小结(3).Hadoop的环境配置

2.4.2配置环境变量

编辑“/etc/profile”文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。

1)编辑"/etc/profile"文件 

vim /etc/profile

2)添加Java环境变量

在"/etc/profile"文件的尾部添加以下内容:

# set java environment

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

export JRE_HOME=/usr/java/jdk1.6.0_35/jre

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

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

或者

# set java environment

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

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

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

以上两种意思一样,那么笔者选择第2种来进行设置。

Hadoop学习小结(3).Hadoop的环境配置

3)使配置生效

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

source /etc/profile

2.4.3验证安装成功

配置完毕并生效后,用下面的命令判断是否成功。

java -version

Hadoop学习小结(3).Hadoop的环境配置

从上图中得知,我们可以确定JDK已经安装成功。

但是由于java的优先级问题,通过java-version显示的可能不是我们想要的,比如redhat本身带了java-6-openjdk的JVM 实现,所以当你在终端输入"java -version "时会显示下面这样的情况。

Hadoop学习小结(3).Hadoop的环境配置

这里需要通过下面的命令进行java优先级的更改。

update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_35/bin/java 40

update-alternatives --config java

Hadoop学习小结(3).Hadoop的环境配置

然后再通过java-version就可以看到我们安装的版本了。

2.5Hadoop集群安装

现在就先在Master服务器安装,安装和配置hadoop需要以"root"的身份进行。

2.5.1安装hadoop

首先用root用户登录"Master.Hadoop"机器,查看我们之前用FTP上传至"/home/hadoop"上传的"hadoop-0.20.2.tar.gz"。

接着把"hadoop-0.20.2.tar.gz"复制到"/usr"目录下面。

cp /home/hadoop/hadoop-0.20.2.tar.gz /usr

下一步进入"/usr"目录下,用下面命令把"hadoop-0.20.2.tar.gz"进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-0.20.2.tar.gz"安装包。

cd /usr    #进入"/usr"目录

tar –zxvf hadoop-0.20.2.tar.gz    #解压"hadoop-1.0.0.tar.gz"安装包

mv hadoop-0.20.2 hadoop   #将"hadoop-1.0.0"文件夹重命名"hadoop"

chown –R hadoop:hadoop hadoop   #将文件夹"hadoop"读权限分配给hadoop用户

rm –rf hadoop0.20.2.tar.gz         #删除"hadoop-1.0.0.tar.gz"安装包

最后在"/usr/hadoop"下面创建tmp文件夹,把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:

# set hadoop path

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

1)在"/usr/hadoop"创建"tmp"文件夹

mkdir /usr/hadoop/tmp

2)配置配置"/etc/profile"

vim /etc/profile

配置后的文件如下:

Hadoop学习小结(3).Hadoop的环境配置

3)重启"/etc/profile" 

source /etc/profile

2.5.2配置hadoop

1)配置hadoop-env.sh 

该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下,在文件的末尾添加下面内容:

# set java environment

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

Hadoop学习小结(3).Hadoop的环境配置

Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。

2)配置core-site.xml文件 

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。

 

    

        hadoop.tmp.dir

        /usr/hadoop/tmp

        (备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)

        A base for other temporary directories.

    

    

        fs.default.name

        hdfs://192.168.0.21::9100

    

 

备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。还有一点这里使用9100端口,默认是9000端口,但是笔者配置的时候发现9000端口被其他进程占用,所以这里使用9100端口。

用下面命令进行编辑:

vim /usr/hadoop/conf/core-site.xml

编辑结果显示如下:

Hadoop学习小结(3).Hadoop的环境配置

3)配置hdfs-site.xml文件 

修改Hadoop中HDFS的配置,配置的备份方式默认为3。

 

    

        dfs.replication

        3

        (备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)

    

 

用下面命令进行编辑:

vim /usr/hadoop/conf/hdfs-site.xml

编辑结果显示如下:

Hadoop学习小结(3).Hadoop的环境配置

4)配置mapred-site.xml文件 

修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

 

    

        mapred.job.tracker

        http://192.168.1.2:9101

    

 

用下面的命令进行编辑:

vim /usr/hadoop/conf/mapred-site.xml

编辑结果显示如下:

Hadoop学习小结(3).Hadoop的环境配置

5)配置masters文件 

有两种方案:

    a)第一种

    修改localhost为Master.Hadoop

    b)第二种

    去掉"localhost",加入Master机器的IP:192.168.0.21

为保险起见,启用第二种,因为万一忘记配置"/etc/hosts"局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。

用下面命令进行修改:

vim /usr/hadoop/conf/masters

编辑结果显示如下:

Hadoop学习小结(3).Hadoop的环境配置

6)配置slaves文件(Master主机特有)

有两种方案:

a)第一种

去掉"localhost",每行只添加一个主机名,把剩余的Slave主机名都填上。

    例如:添加形式如下

Slave1.Hadoop

Slave2.Hadoop

Slave3.Hadoop

b)第二种

    去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。

    例如:添加形式如下

192.168.0.22

192.168.0.23

192.168.0.24

原因和添加"masters"文件一样,选择第二种方式。

用下面命令进行修改:

vim /usr/hadoop/conf/slaves

编辑结果如下:

Hadoop学习小结(3).Hadoop的环境配置

这样,Master机器上的Hadoop配置就结束了。

3.Slave机器的配置

3.1full copy

将前面配置好的Master机器关机,在XenServer中右键单击Master.Hadoop对应的虚拟机,点击copy VM,选择full copy,过一段时间就可以得到一个与Master.Hadoop机器配置一模一样的机器。

Hadoop学习小结(3).Hadoop的环境配置

3.2Slave 机器的配置

1)修改MAC地址和IP地址

vim /etc/sysconfig/network-scripts/ifcfg-eth0

Hadoop学习小结(3).Hadoop的环境配置

修改MAC和IP地址,保存退出然后重启服务

service network restart

ifconfig

2)修改hostname

vim /etc/sysconfig/network

检验Master机器和Slave机器是否能够通过主机名互相ping通。

4.SSH无密码访问的配置

4.1配置Master无密码登陆所有Slave

4.1.1SSH无密码原理

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

4.1.2Master机器上生成密码对

在Master节点上执行以下命令:

ssh-keygen -t rsa -P ''

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

Hadoop学习小结(3).Hadoop的环境配置

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

ll -a | grep .ssh

ll .ssh

Hadoop学习小结(3).Hadoop的环境配置

接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

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

Hadoop学习小结(3).Hadoop的环境配置

在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。

1)修改文件"authorized_keys" 

chmod 600 ~/.ssh/authorized_keys

2)设置SSH配置 

用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

vim /etc/ssh/sshd_config

 

RSAAuthentication yes  # 启用 RSA 认证

PubkeyAuthentication yes   # 启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys  # 公钥文件路径(和上面生成的文件同)

设置完之后记得重启SSH服务,才能使刚才设置有效。

service sshd restart

退出root登录,使用hadoop普通用户验证是否成功。

ssh localhost

Hadoop学习小结(3).Hadoop的环境配置

从上图中得知无密码登录本级已经设置完毕,接下来的事儿是把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/

例如:

scp ~/.ssh/id_rsa.pub hadoop@192.168.0.22:~/

上面的命令是复制文件"id_rsa.pub"到服务器IP为"192.168.0.22"的用户为"hadoop"的"/home/hadoop/"下面。

下面就针对IP为"192.168.0.22"的Slave1.Hadoop的节点进行配置。

1)把Master.Hadoop上的公钥复制到Slave1.Hadoop上

Hadoop学习小结(3).Hadoop的环境配置

从上图中我们得知,已经把文件"id_rsa.pub"传过去了,因为并没有建立起无密码连接,所以在连接时,仍然要提示输入输入Slave1.Hadoop服务器用户hadoop的密码。为了确保确实已经把文件传过去了,用SecureCRT登录Slave1.Hadoop:192.168.0.22服务器,查看"/home/hadoop/"下是否存在这个文件。

Hadoop学习小结(3).Hadoop的环境配置

从上面得知我们已经成功把公钥复制过去了。

2)在"/home/hadoop/"下创建".ssh"文件夹 

这一步并不是必须的,如果在Slave1.Hadoop的"/home/hadoop"已经存在就不需要创建了,因为我们之前并没有对Slave机器做过无密码登录配置,所以该文件是不存在的。用下面命令进行创建。(备注:用hadoop登录系统,如果不涉及系统文件修改,一般情况下都是用我们之前建立的普通用户hadoop进行执行命令。)

mkdir ~/.ssh

 

然后是修改文件夹".ssh"的用户权限,把他的权限修改为"700",用下面命令执行:

chmod 700 ~/.ssh

备注:如果不进行,即使你按照前面的操作设置了"authorized_keys"权限,并配置了"/etc/ssh/sshd_config",还重启了sshd服务,在Master能用"ssh localhost"进行无密码登录,但是对Slave1.Hadoop进行登录仍然需要输入密码,就是因为".ssh"文件夹的权限设置不对。这个文件夹".ssh"在配置SSH无密码登录时系统自动生成时,权限自动为"700",如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。

3)追加到授权文件"authorized_keys" 

到目前为止Master.Hadoop的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master.Hadoop的公钥追加到Slave1.Hadoop的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:

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

chmod 600 ~/.ssh/authorized_keys

4)用root用户修改"/etc/ssh/sshd_config"

具体步骤参考前面Master.Hadoop的"设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。

5)用Master.Hadoop使用SSH无密码登录Slave1.Hadoop 

当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。

ssh 远程服务器IP

Hadoop学习小结(3).Hadoop的环境配置

从上图我们主要3个地方,第1个就是SSH无密码登录命令,第2、3个就是登录前后"@"后面的机器名变了,由"Master"变为了"Slave1",这就说明我们已经成功实现了SSH无密码登录了。

最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。

rm –r ~/id_rsa.pub

到此为止,我们经过前5步已经实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登录,下面就是重复上面的步骤把剩余的两台(Slave2.Hadoop和Slave3.Hadoop)Slave服务器进行配置。这样,我们就完成了"配置Master无密码登录所有的Slave服务器"。

4.1.3配置所有Slave无密码登陆Master

和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)。

为了说明情况,我们现在就以"Slave1.Hadoop"无密码登录"Master.Hadoop"为例,进行一遍操作,也算是巩固一下前面所学知识,剩余的"Slave2.Hadoop"和"Slave3.Hadoop"就按照这个示例进行就可以了。

首先创建"Slave1.Hadoop"自己的公钥和私钥,并把自己的公钥追加到"authorized_keys"文件中。用到的命令如下:

ssh-keygen –t rsa –P ''

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

 

接着是用命令"scp"复制"Slave1.Hadoop"的公钥"id_rsa.pub"到"Master.Hadoop"的"/home/hadoop/"目录下,并追加到"Master.Hadoop"的"authorized_keys"中。

1)在"Slave1.Hadoop"服务器的操作 

用到的命令如下:

scp ~/.ssh/id_rsa.pub     hadoop@192.168.0.21:~/

2)在"Master.Hadoop"服务器的操作 

用到的命令如下:

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

然后删除掉刚才复制过来的"id_rsa.pub"文件。

rm -rf ~/id_rsa.pub

最后是测试从"Slave1.Hadoop"到"Master.Hadoop"无密码登录。

Hadoop学习小结(3).Hadoop的环境配置

从上面结果中可以看到已经成功实现了,再试下从"Master.Hadoop"到"Slave1.Hadoop"无密码登录。

Hadoop学习小结(3).Hadoop的环境配置

至此"Master.Hadoop"与"Slave1.Hadoop"之间可以互相无密码登录了,剩下的就是按照上面的步骤把剩余的"Slave2.Hadoop"和"Slave3.Hadoop"与"Master.Hadoop"之间建立起无密码登录。这样,Master能无密码验证登录每个Slave,每个Slave也能无密码验证登录到Master。

5.启动及验证

5.1格式化HDFS文件系统

在"Master.Hadoop"上使用普通用户hadoop(必须是普通用户)进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

hadoop namenode -format

某些书上和网上的某些资料中用下面命令执行。

bin/hadoop namenode -format

我们在看好多文档包括有些书上,按照他们的hadoop环境变量进行配置后,并立即使其生效,但是执行发现没有找见"bin/hadoop"这个命令。

Hadoop学习小结(3).Hadoop的环境配置

其实我们会发现我们的环境变量配置的是"$HADOOP_HOME/bin",我们已经把bin包含进入了,所以执行时,加上"bin"反而找不到该命令,除非我们的hadoop坏境变量如下设置。

# set hadoop path

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH : $HADOOP_HOME :$HADOOP_HOME/bin 

这样就能直接使用"bin/hadoop"也可以直接使用"hadoop",现在不管哪种情况,hadoop命令都能找见了。我们也没有必要重新在设置hadoop环境变量了,只需要记住执行Hadoop。

2)启动hadoop 

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。

service iptables stop

使用下面命令启动。

start-all.sh

注意观察执行之后有无异常,有异常的话可以通过查看相应的日志来找出异常的原因,一定要养成通过看日志来解决问题的习惯。

可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。

启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。

查看Master中"/usr/hadoop/tmp"文件夹内容。

Hadoop学习小结(3).Hadoop的环境配置

查看Slave1中"/usr/hadoop/tmp"文件夹内容。

Hadoop学习小结(3).Hadoop的环境配置

3)验证hadoop 

 (1)验证方法一:用"jps"命令

  在Master上用 java自带的小工具jps查看进程。

Hadoop学习小结(3).Hadoop的环境配置

在Slave1上用jps查看进程。

Hadoop学习小结(3).Hadoop的环境配置

如果在查看Slave机器中发现"DataNode"和"TaskTracker"没有起来时,先查看一下日志的。

(2)验证方式二:用"hadoop dfsadmin -report"

用这个命令可以查看Hadoop集群的状态。

Master服务器的状态:

Hadoop学习小结(3).Hadoop的环境配置

Slave服务器的状态(说明一下笔者在截图的时候已经装了6个slave了)

Hadoop学习小结(3).Hadoop的环境配置

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24242772/viewspace-1120225/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-07-14