一,环境准备
1、 集群内所有电脑需要设置防火墙,下面以master为例说明:
切换到root用户下,执行setup指令:
(1) 选择Firewall configuration,Run Tool。用上下键控制选项的选择,用Tab键进行确认和取消选择,空格键点击确认。
(2) 进入Firewall Configuration 设置,使用空格将Firewall设置上的星号去掉,变成disable,OK确认。
(3) 点击“yes“
(4) 之后回到第一步,选择退出即可。
2、 Hadoop集群由3个节点(同构、异构均可)构成,它们之间通过以太网进行通讯。图1 中每个节点下部的标签为该节点的主机名,其对应的IP 地址如表1 所示:
主机名 |
IP地址 |
master |
172.22.12.72 |
slave1 |
172.22.12.71 |
slave2 |
172.22.12.70 |
表1
我们需要在每台机器上配置hosts文件,配置操作相同,下面以master为例介绍:
以root 身份打开/etc /hosts 文件,命令:
[root @masterDesktop]# vim /etc /hosts
将文件修改为如下内容:
172.22.12.72 master
172.22.12.71 slave1
172.22.12.70 slave2
之后,slave1和salve2执行上述操作。
判断配置是否成功,在集群内任一电脑,ping其他电脑用户名,如果ping通了,则说明成功。比如在master上ping slave1
如上图说明成功了。
二,CentOS下安装JDK
软件准备:jdk-6u38-linux-i585.bin,集群内所有电脑都需要安装JDK,我们可以在master上安装好JDK后,将安装文件复制到其他电脑相同目录下即可。将hadoop统一安装在所有电脑的/usr/local目录下;下面以master电脑安装JDK为例介绍:
1、 查看默认的JDK命令:
[hadoop@masterDesktop]$ java -version
提示现在的jdk版本是1.6.0_22
2、 使用root帐号将jdk-6u38-linux-i585.bin放到/usr/local目录下,命令:
[hadoop@masterDesktop]$ su root
[root@masterDesktop]# mv jdk-6u38-linux-i585.bin /usr/local
3、 安装jdk
进入到/usr/local目录下,将压缩包安装到该目录下
[root @masterDesktop]# cd /usr/local
[root @master local]# ./jdk-6u38-linux-i585.bin
安装完成后,在/usr/local目录下产生一个新的 jdk1.0. 6_38文件夹
4、 设置环境变量
打开配置文件profile,命令:
[root @master local]# vim /etc/profile
移至文件末尾插入一个空行:输入字母o。输入以下配置信息:(注:这里的分隔符是冒号不是分号)
JAVA_HOME=/usr/local/jdk1.6.0_38
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
编辑完后,先按Esc退出编辑模式,再保存退出输入:wq !(冒号也要输入)
至此,新的JDK环境设置完毕。
5、 让系统配置立即生效,不用重启系统,终端输入命令:
[root @master local]# source /etc/profile
6、 查看jdk是否安装成功,命令:
[root @master local]# java
[root @master local]# javac
如果出现配置信息,说明安装成功
7、 查看版本:
[root @master local]# java -version
显示我们安装的新版本是jdk1.6.0_38
8、 将主节点master上安装好的jdk复制到其他两台上相同目录下。此处以复制到slave1为例。
a) 将jdk的解压缩文件复制到slave1电脑上
[root @master local]# scp -r jdk1.6.0_38 root@slave1:/usr/local
这样,子节点上的同目录下也安装了jdk。注意,复制文件夹一定要加-r,表示将jdk1.6.0_38文件夹和其文件夹里的所有文件都拷贝到slave1节点上。
a) 将主节点master上的jkd配置文件拷贝到其他子节点上
[root @master local]# scp /etc/profile slave1:/etc/profile
注意,此处profile文件不是文件夹,因此不用加-r。
b) 在子节点上查看jdk是否安装成功
[root @slave1 Desktop]# source /etc/profile
[root @slave1Desktop]# java
[root @slave1Desktop]# javac
[root @slave1Desktop]# java –version
9、执行步骤8,将jdk文件复制到slave2.。
三,CentOS下配置ssh
1、 在Hadoop集群中,需要集群内一台电脑无密码登录其他电脑,我们使用Linux自带的ssh指令远程连接其他电脑(在安装CentOs系统时候,会默认安装SSH服务,如果没有,则需要手动安装Openssh),SSH默认需要输入密码,因此我们配置一下SSH,即可无密码登录。下面讲解如何通过SSH无密码登录其他电脑:
2、 如果master电脑通过SSH无密码远程连接slave1电脑,需要在master电脑上生成密码对,然后将私钥留下,公钥发送给slave1后,实现了无密码登录slave1电脑。即如果电脑a无密码连接电脑b,需要将电脑a生成的私钥留给自己,公钥发给电脑b。因此欲实现集群内电脑的相互无密码登录,只需要每台电脑生成一个公钥对,将各自私钥不要动,所有公钥(公钥类似windows系统的记事本)的内容复制到同一个文本文件中,此文本文件名字必须为authorized_keys,不能变;然后将authorized_keys复制到集群内的每台电脑即可。注意:我们每台电脑使用hadoop用户连接,因此生成公钥和authorized_keys必须属于hadoop用户。具体流程如下:
3、 在master上生成密码对流程如下:
(1) 确保.ssh文件夹属于hadoop用户,如果不是,需要修改:
a)跳转到/home/hadoop目录下:
b)查看.ssh文件夹属性:
c)如果标记处为hadoop则说明.ssh文件夹属于hadoop用户。
如果标记处不为hadoop,则需要切换到root用户,进行修改:
d)切换到root用户:
e)将.ssh用户赋予hadoop:
f)赋予hadoop用户权限,可以操作.ssh文件夹:
之后再利用ls -al查看.ssh文件夹,确保文件夹如上c)图符合要求。
(2) 生成密钥对:
a)确保是hadoop用户操作,如果不是,切换到hadoop用户下:
b)再跳转到.ssh目录下进行操作:
c)在.ssh文件夹下生成密钥对
[hadoop @master .ssh]$ ssh-key gen -t rsa
之后一直点击回车键默认,效果如下:
此时,会在/home/hadoop/.ssh下生成了id_rsa(私钥),id_rsa.pub(公钥);
4、 分别在slabe1和slave2中执行第三步操作,都会生成密钥对id_rsa.pub和id_rsa,
5、 配置authorized_keys
(1)在master电脑上,把生成的id_ras.pub内容复制到authorized _keys中;执行指令:
如果authorized_keys不存在,则生成authorized_keys,再将id_rsa.pub内容复制到authorized_keys中。
(2)将authorized_keys复制到slave1电脑上:
将slave1生成密钥对添加到authorized_keys:
(3)将slave1上authorized_keys复制到slave2上:
将将slave2生成密钥对添加到authorized_keys:
至此slave2上authorized_keys文件已经包含集群中所有三台电脑的公钥了,是最新的文件。
下一步,将master和slave1电脑上authorized_keys文件删除,将slave2上的最新authorized_keys复制到master和slave1上。
(4)master上删除旧的authorized_keys:
slave1中删除旧的authorized_keys:
Slave2中authorized_keys复制到master:
Slave2中authorized_keys复制到slave1:
(5)将集群内所有电脑上设定authorized_keys所属用户为hadoop,hadoop用户对其读写权限,在所有电脑上执行以下操作,以master为例:
再执行ls –al查看authorized_keys文件,如果如下图所示,则符合要求:
四,CentOS下安装和配置hadoop
1、 集群内所有电脑都需要安装hadoop,我们可以在master上安装好hadoop后,将安装文件复制到其他电脑相同目录下即可。将hadoop统一安装在所有电脑的/usr/local目录下;下面以master电脑安装hadoop为例介绍:
2、 将用户切换到root用户:
3、 将桌面上的hadoop-1.0.4-bin.tar.gz复制到/usr/local目录下:
3、 跳转到/usr/local目录下,解压缩hadoop-1.0.4-bin.tar.gz:
4、 解压缩后生成hadoop-1.0.4文件夹,跳转到 hadoop-1.0.4/conf目录下,
配置hadoop配置文件,总共需要配置6个。
(1) 配置hadoop-env.sh
# set java environment
export JAVA_HOME=/usr/local/jdk1.6.0_38
(2) 配置core-site.xml,修改每个属性的value值
<!—core-site.xml-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopl/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://172,.22.12.72:9000</value>
</property>
(3) 设置完步骤(2)后,用root账号在/home/hadoop目录下创建一个名为tmp的文件夹,
将tmp文件夹赋予hadoop用户,并赋予hadoop用户操作该文件夹的权限
(4) 跳转到hadoop-1.0.4/conf目录下
继续配置hdfs-site.xml
<!—hdfs-site.xml-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
注:副本个数,不配置默认是3,应小于等于datanode机器数量,本集群datanode机器数为2。
(5) 配置mapred-site.xml
<!—mapred-site.xml-->
<property>
<name>mapred.job.tracker</name>
<value>http://172.22.12.72:9001</value>
</property>
(6) 配置masters文件,加入namenode的节点名,并删除前面的内容
172.22.12.72
注:此处填写主节点ip
(7) 配置slaves文件, 加入所有datanode的节点名
[hadoop @master conf]$ vim slaves
172.22.12.71
172.22.12.70
注:此处填写所有数据节点ip
5、 将hadoop-1.0.4赋予用户hadoop,并且赋予hadoop对文件夹的操作权限。
6、 将hadoop-1.0.4分别复制到slave1和slave2相应目录下:
7、 分别在slave1和slave2上以root用户执行操作步骤5。
8、 分别在slave1和slave2上执行操作步骤4中第(3)步。
9、 启动hadoop集群(只需在主节点启动hadoop即可)
(1) 以hadoop用户,跳转到hadoop-1.0.4的bin目录下:
(2) 格式化文件系统:
注:在第一次启动hadoop集群时候,需要格式化文件系统,其他时间不需要启动。
(3) 启动hadoop集群
10、 在主节点master上用java自带的小工具jps查看进程
进程中必须包含NameNode和JobTracker这两个,不然说明安装失败。
在salve1上或slave2上用java自带的小工具jps查看进程:
进程必须包含DataNode和TaskTracker两个,不然说明安装失败。