公司业务需要使用Hadoop,经过4天,安装完成,记录一下
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker,这些机器是masters。余下的机器即作为DataNode也作为TaskTracker,这些机器是slaves。
1 先决条件
-
确保在你集群中的每个节点上都安装了所有必需软件:JDK,ssh
-
ssh 必须安装并且保证 sshd一直运行,并使用无密码链接的形式,以便用Hadoop 脚本管理端Hadoop守护进程。
2 实验环境搭建
2.1 准备工作
操作系统:Ubuntu13.04
部署:VirtualBox
在VirtualBox安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。
说明:
保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信。
为了保证虚拟机的ip和主机的ip在同一个ip段,虚拟机连接设置为桥连。
准备机器:一台master,两台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
192.168.10.203 node1(master)
192.168.10.204 node2 (slave1)
192.168.10.205 node3 (slave2)
主机信息以在集群中的角色:
机器名 | IP地址 | 集群中的角色 |
node1 | 192.168.10.203 | NameNode、JobTracker |
node2 | 192.168.10.204 | DataNode、TaskTracker |
node3 | 192.168.10.205 | DataNode、TaskTracker |
2.2 创建,组和用户
$ useradd hadoop
$ groupadd -G hadoop hadoop
在所有的机器上都建立相同的组(hadoop)和用户(hadoop)。
(最好不要使用root安装,因为不推荐各个机器之间使用root访问 )
2.3 安装JDK
#安装JDK
在官网下载 jdk-6u45-linux-i586.bin ,下载到/home/hadoop/目录下。
将jdk安装到/usr/local,先把安装文件移动到该目录下,执行后会生成jdk1.6.0_45切换的root用户执行命令:
hadoop@node1:~$ su
密码:
root@node1:/home/hadoop#
root@node1:/home/hadoop# cd /usr/local/
root@node1:/usr/local# mkdir java
root@node1:/usr/local# cd java
root@node1:/usr/local/java# mv /home/hadoop/jdk-6u45-linux-i586.bin .
root@node1:/usr/local/java# ./jdk-6u45-linux-i586.bin
安装完成后修改名称和权限
root@node1:/usr/local/java# cd ..
root@node1:/usr/local# chown -R hadoop:hadoop java
然后配置JDK环境
root@node1:/usr/local# su hadoop
root@node1:/usr/local# cd
hadoop@node1:~$ vim .bashrc
添加下面的内容
export JAVA_HOME=/usr/local/java/jdk1.6.0_45
export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
保存后退出,并使修改生效
hadoop@node1:~$ source .bashrc
JDK安装完毕,执行java -verison验证是否成功
hadoop@node1:~$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)
安装成功!
2.4 安装ssh和配置
1)安装:sudo apt-get install ssh
这个安装完后,可以直接使用ssh命令 了。
执行$ netstat -nat 查看22端口是否开启了。
测试:ssh localhost。
输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。
(这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是:/etc/ssh/sshd_config):
注意:在所有机子都需要安装ssh。
2)配置:
在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。
以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。
在node1上执行命令
hadoop@node1~]$ssh-keygen -t rsa -P ""
这个命令将为node1上的用户hadoop生成其空密码的密钥对,询问其保存路径时直接回车采用默认路径,直接回车。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下
然后执行命令
cat id_rsa.pub >> authorized.keys
将生成的authorized_keys文件复制到每台机器的相同位置:/home/hadoop/.ssh/
最后将每天机器上的authorized_keys修改权限如下:
[hadoop@node1 .ssh]$chmod 644 authorized_keys
3) 首先设置namenode的ssh为无需密码的、自动登录。
切换到hadoop用户( 保证用户hadoop可以无需密码登录,因为我们后面安装的hadoop属主是hadoop用户。)
第一次ssh会有提示信息:
The authenticity of host ‘node1 (192.168.10.203)’ can’t be established.
RSA key fingerprint is 03:e0:30:cb:6e:13:a8:70:c9:7e:cf:ff:33:2a:67:30.
Are you sure you want to continue connecting (yes/no)?
输入 yes 来继续。这会把该服务器添加到你的已知主机的列表中,下次就可以直接链接了。
SSH安装和配置完成!
2.5 安装Hadoop
2 ) 如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop整个文件夹拷贝到其他机器的相同位置即可。
3 ) 可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME 的不同修改其hadoop-env.sh 。
4) 为了方便,使用hadoop命令或者start-all.sh等命令,修改Master上/home/hadoop/.bashrc 新增以下内容:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
修改完毕后,执行source .bashrc 来使其生效。
6)配置conf/hadoop-env.sh文件
配置conf/hadoop-env.sh文件
#添加
export JAVA_HOME=/usr/local/java/jdk1.6.0_45
这里修改为你的jdk的安装位置。