Hadoop的安装与配置
- 格式:doc
- 大小:35.50 KB
- 文档页数:13
Hadoop的安装与配置
建立一个三台电脑的群组,操作系统均为Ubuntu,三个主机名分别为wjs1、wjs2、wjs3。
1、环境准备:
所需要的软件及我使用的版本分别为:Hadoop版本为0.19.2,JDK版本为jdk-6u13-linux-i586.bin。
由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。所以在三台主机上都设置一个用户名为“wjs”的账户,主目录为/home/wjs。
a、配置三台机器的网络文件
分别在三台机器上执行:sudo gedit /etc/network/interfaces
wjs1机器上执行:在文件尾添加:
auto eth0
iface eth0 inet static
address 192.168.137.2
gateway 192.168.137.1
netmask 255.255.255.0
wjs2和wjs3机器上分别执行:在文件尾添加:
auto eth1
iface eth1 inet static
address 192.168.137.3(wjs3上是address 192.168.137.4)
gateway 192.168.137.1
netmask 255.255.255.0
b、重启网络:sudo /etc/init.d/networking restart
查看ip是否配置成功:ifconfig
{注:为了便于“wjs”用户能够修改系统设置访问系统文件,最好把“wjs”用户设为sudoers(有root权限的用户),具体做法:用已有的sudoer登录系统,执行sudo visudo -f /etc/sudoers,并在此文件中添加以下一行:wjs
ALL=(ALL)ALL,保存并退出。}
c、修改三台机器的/etc/hosts,让彼此的主机名称和ip都能顺利解析,在/etc/hosts中添加:
192.168.137.2 wjs1
192.168.137.3 wjs2
192.168.137.4 wjs3
d、由于Hadoop需要通过ssh服务在各个节点之间登陆并运行服务,因此必须确保安装Hadoop的各个节点之间网络的畅通,网络畅通的标准是每台机器的主机名和IP地址能够被所有机器正确解析(包括它自己)。测试方法就是PING主机名。
主机名 IP地址 功能
wjs1 192.168.137.2 NameNode,JobTracker
wjs2 192.168.137.3 DataNode,TaskTracker
wjs3 192.168.137.4 DataNode,TaskTracker
2、安装JDK:
步骤1.根据自己机器的配置下载JDK,我下载的是jdk-6u13-linux-i586.bin;
步骤2.点击桌面“应用程序”-->“附件”-->“终端”,进入终端窗口;
步骤3.在主目录下新建子目录software—JDK,并将下载的jdk-6u13-linux-i586.bin拷贝到该目录下;
步骤4.转到/home/wjs/software/JDK目录下,开始安装jdk,在终端输入命令:
#cd /home/wjs/software/JDK
#./jdk-6u13-linux-i586.bin
安装程序将询问你是否尊守许可协议页面,回车、空格都可以,看完协议。
出现一行字:Do you aggree to the above license terms? [yes or no]
输入yes后,jdk被解压到usr/java/jdk1.6.0_13目录下。
步骤5.修改环境变量,设置PATH,JAVA_HOME,CLASSPATH,用gedit编辑器来修改profile文件,这个文件的修改会对所有的用户起作用。
#sudo gedit /etc/profile
在弹出的profile文件的末尾,umask 022之前加上以下设置的语句
export JAVA_HOME=/home/wjs/software/JDK/jdk1.6.0_13
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
umask 022//原文件里的,不动它
保存退出。
步骤6.测试jdk是否安装成功
退出终端,注销一下,再次进入终端,输入java -version,可查到jdk版本信息,
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode,sharing)
说明安装成功。
3、安装ssh
SSH分客户端openssh-client和服务器端openssh-server。
如果只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。
sudo apt-get install openssh-server
然后确认sshserver是否启动了:
ps -e |grep ssh
如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh
start,如果看到sshd那说明ssh-server已经启动了。
ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。然后重启SSH服务:
sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start
或者:
sudo /etc/init.d/ssh restart
确认ssh-server已经正常工作:
netstat -tlp
tcp6 0 0
*:ssh *:* LISTEN
-
看到上面这一行输出说明ssh-server已经在运行了。
4、安装Hadoop:
以wjs帐号登录到每个节点上,在wjs主目录中为Hadoop创建目录Hadoop,我创建的是/home/wjs/software/Hadoop/,所有的Hadoop版本放在这个目录中
把hadoop-0.19.2压缩包解压到/Hadoop中,为了便于以后升级,一种值得推荐的做法是建议一个链接指向当前所用的Hadoop版本,不妨就设为hadoop:
cd /home/wjs/software/Hadoop
tar -zxvf hadoop-0.19.2.tar.gz
ln -s hadoop-0.19.2 hadoop
按照以上步骤完成设置之后,所有的配置文件都在/hadoop-0.19.2/conf/目录中,所有的可执行程序都在/hadoop-0.19.2/bin目录中,但是hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级,所有的配置文件都会被覆盖,因此建议将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,例如/home/wjs/software/Hadoop/hadoop-config/,然后将/hadoop-0.19.2/conf/目录中的hadoop-site.xml,masters,slaves,hadoop-env.sh四个文件拷贝到hadoop-config/目录中
设置环境变量$Hadoop_CONF_DIR指向存放配置文件的目录,为保证用户每次登录到系统中都自动设置此环境变量,需要在/home/wjs/.bashrc和/etc/profile两个文件中都添加一行命令:
export Hadoop_CONF_DIR=/home/wjs/software/Hadoop/hadoop-config/
这种配置方法使得hadoop的配置文件与安装目录分离,并通过设定一个链接指向当前使用的Hadoop版本,大大降低了人工部署和维护Hadoop的复杂度和工作量
4、配置Hadoop:
Hadoop是master/slave结构,在一个Hadoop集群中,有一个Namenode(相当于master)和若干个Datanode(相当于slave),其中Namenode通过ssh服务来启动和停止各个Datanode上的各种守护进程。因此ssh的设置是Hadoop部署中很重要的一环。显然,不可能要求用户每次在节点之间执行指令时输入密码,因此我们需要配置ssh使之采用无密码公钥认证的方式来登录。
首先保证所有的机器都安装了ssh服务器,并启动了ssh服务。我设定wjs1为主节点(Namenode),wjs2和wjs3是从节点(Datanode),wjs1要调度wjs2和wjs3上的程序,需要主动发起ssh连接到wjs2和wjs3。对于ssh服务而言,wjs1是客户端,wjs2和wjs3是服务端。要实现无密码公钥认证,需要在wjs1上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到wjs2和wjs3上。当wjs1通过ssh连接wjs2和wjs3时,wjs2和wjs3就会生成一个随机数并用wjs1的公钥对随机数进行加密,并发送给wjs1。wjs1收到加密数之后再用私钥进行解密,并将解密数回传给wjs2和wjs3,wjs2和wjs3确认解密数无误之后就允许wjs1进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。
具体步骤是:
(1)在wjs1上生成密码对,执行以下命令:ssh-keygen -t rsa
此命令为wjs1上的用户wjs生成密钥对,当询问保存路径时回车采用默认路径即可,当提示要为密钥输入passphrase时回车采用空密码。此命令执行完毕生成一对密钥文件id_rsa(私钥)和id_rsa.pub(公钥),默认存储在/home/wjs/.ssh下
(2)把生成的id_rsa.pub文件改名为authorized_keys,并复制到每台机器(包括本机)的/home/wjs/.ssh/下。如果机器上已经有authorized_keys文件,则把id_rsa.pub中的内容直接复制到authorized_keys文件尾;如果不存