1.Linux安装前的配置
1.1.关闭防火墙
本站文档是假定「服务器在防火墙以内」的前提下编纂的,在这个前提下,服务器本身在内部网络是不需要防火墙的(在需要抵御内部安全威胁的情况下,您也可以用您在iptables方面的相关知识,根据实情设置防火前,并保证服务器端防火墙启动的状态)。另外,在一般情况下,我们不需要SELinux复杂的保护,所以也将其设置为无效的状态。
service iptables stop
1.2.关闭SELinux
用下面命令执行,并修改内容如下所示:
vim /etc/sysconfig/selinux
SELINUX=enforcing
↓修改为
SELINUX=disabled
2.集群部署介绍
2.1.环境说明
集群中包括5个节点:1个Master,4个Salve,节点之间局域网连接,可以相互ping通。节点IP地址分布如下:
机器名称 IP地址
Master.Hadoop 70.70.70.120
Slave1.Hadoop 80.80.80.184
Slave2.Hadoop 80.80.80.183
Slave3.Hadoop 80.80.80.182
Slave4.Hadoop 80.80.80.180
四个节点上均是CentOS6.0系统,并且有一个相同的用户hadoop。Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。其实应该还应该有1个Master机器,用来作为备用,以防止Master服务器宕机,还有一个备用马上启用。后续经验积累一定阶段后补上一台备用Master机器。
2.2.网络配置
下面的例子我们将以Master机器为例,即主机名为"Master.Hadoop",IP为"70.70.70.120“进行主机的配置,他的Slave机器以此为依据进行修改。
2.2.1.查看当前机器名称
命令:
hostname
上图中,用”hostname"查"Master"机器的名字为“centos1.teacher20”,这是默认机器名,我们进行修改。
2.2.2.修改当前机器名称
我们的机器的主机名不是我们想要的,通过对"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我们规划的名称。
这个"/etc/sysconfig/network"文件是定义hostname和是否利用网络的不接触网络设备的对系统全体定义的文件。
vi /etc/sysconfig/network
通过上面的命令我们从"/etc/sysconfig/network"中找到"HOSTNAME"进行修改,查看内容如下
配置完成之后,我们需要重启主机,命令:
reboot
2.2.3.配置hosts文件(必须)
"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。
在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件末尾中都要添加如下内容:
vi /etc/hosts
70.70.70.120Master.Hadoop
80.80.80.184Slave1.Hadoop
80.80.80.183Slave2.Hadoop
80.80.80.182Slave3.Hadoop
80.80.80.180Slave4.Hadoop
从上图中我们已经能用主机名进行ping通了,说明我们刚才添加的内容,在局域网内能进行DNS解析了,那么现在剩下的事儿就是在其余的Slave机器上进行相同的配置。然后进行测试。(备注:当设置SSH无密码验证后,可以"scp"进行复制,然后把原来的"hosts"文件执行覆盖即可。)
2.3.所需软件
JDK软件
jdk-7u75-linux-x64
Hadoop软件
hadoop-2.6.0.tar
2.4.创建用户组和用户 hadoop
创建hadoop用户组:
groupadd hadoop
创建hadoop用户:
useradd –g hadoop hadoop
为hadoop用户添加密码:
passwd hadoop
使得hadoop用户获得sudo权限。
vi /etc/sudoers
我们这里设置hadoop的密码都是hadoop
编辑好,退出时,wq!(加叹号)
2.5.上传本地JDK和hadoop安装包到主机
使用rz命令。
我们在hadoop根目录中上传,并且使用hadoop用户。
[hadoop@Master ~]$ rz
3.SSH无密码验证配置
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。
3.1.安装和启动SSH协议
rpm –qa | grep openssh
rpm –qa | grep rsync
通过以上命令,我们主机上没有安装rsync(远程数据同步工具)
安装SSH协议(这个已经安装,我们机器不需要再次安装)!!!
yum install ssh #(这个已经安装,我们机器不需要再次安装)
安装rsync(rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件)
yum install rsync
service sshd restart #重启服务
确保所有的服务器都安装,上面命令执行完毕,各台机器之间可以通过密码验证相互登。
3.2.配置Master无密码登录所有Salve
3.2.1.SSH无密码原理
Master(NameNode |JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
3.2.2.Master机器上生成密码对
在Master节点上执行以下命令:
[hadoop@master ~]$ ssh-keygen -t rsa -P ''
这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
[hadoop@Slave4~]$ ll -a | grep .ssh
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
[hadoop@Slave4.ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。
1)修改文件"authorized_keys"
[hadoop@Slave4 .ssh]$ chmod 600~/.ssh/authorized_keys
备注:如果不进行设置,在验证时,扔提示你输入密码,在这里花费了将近半天时间来查找原因。
2)设置SSH配置
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
[root@Slave4 .ssh]# vi /etc/ssh/sshd_config
下面是文件修改好的。
设置完之后记得重启SSH服务,才能使刚才设置有效。
[root@Slave4 .ssh]# service sshd restart
退出root登录,使用hadoop普通用户验证是否成功。
[hadoop@Slave4 .ssh]$ ssh localhost
从上图中得知无密码登录本级已经设置完毕,接下来的事儿是把公钥复制所有的Slave机器上。
再往下做之前,把其他四台的公钥私钥全部产生,参照以上步骤。
使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub远程用户名@远程服务器IP:~/
例如:
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pub hadoop@80.80.80.183:~/
3.2.3.把Master.Hadoop上的公钥复制到Slave1.Hadoop上
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.184:~/
依据以上方式,分别复制到其他四太主机的根目录下。
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.183:~/
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.182~/
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.180~/
从其他四台slave.adoop上可以用ls –a查看确实存在id_rsa.pub这个文件。
3.2.4.在其他四太Slave.Hadoop上,将公钥添加到授权密钥文件authorized_keys内。
[hadoop@Slave1 ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys
…slave2….
…slave3…
依次,等等。
最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。
[hadoop@Slave3 .ssh]$ rm ~/id_rsa.pub
3.3.配置所有Slave无密码登录Master
和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)。
思想:分别在其他四台Slave上使用
[hadoop@Slave1 ~]$ scp ~/.ssh/id_rsa.pubhadoop@70.70.70.120:~/
将Slave上的公钥发到Master上去,然后每发送一个。在Master上,使用
[hadoop@Master ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys
将Slave的公钥添加到Master的授权文件中。然后把传过来的公钥文件删除。。。。
到此为止。我们验证一下ssh可以Master和Slave之间的无密码相互登陆(因为我们是在hadoop用户设置的,所以我们必须是切换到hadoop用户下去验证)。
等等。
4.Java环境安装
所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行。
4.1.安装JDK
首先用root身份登录"Master.Hadoop"后在"/usr"下创建"java"文件夹,再把用“rz命令”上传到"/home/hadoop/"下的"jdk-7u75-linux-x64.rpm"复制到"/usr/java"文件夹中。
[root@Masterusr]# mkdir /usr/java
[root@Masterusr]# cp /home/hadoop/jdk-7u75-linux-x64.rpm /usr/java
演示截图:
创建java文件夹,cp JDK包
确认查看已经复制过来:
接着进入"/usr/java"目录下通过下面命令使其JDK获得可执行权限,并安装JDK。
[root@Masterjava]# chmod 755 jdk-7u75-linux-x64.rpm
[root@Masterjava]# rpm -i jdk-7u75-linux-x64.rpm
演示截图:
按照上面几步进行操作,最后点击"Enter"键开始安装,安装完会提示你按"Enter"键退出,然后查看"/usr/java"下面会发现多了一个名为"jdk1.7.0_75"文件夹,说明我们的JDK安装结束,删除"jdk-7u75-linux-x64.rpm"文件,进入下一个"配置环境变量"环节。
4.2.配置环境变量
编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。
4.2.1.编辑"/etc/profile"文件
[root@Masterjava]# vi /etc/profile
3.2.2.添加Java环境变量
在"/etc/profile"文件的尾部添加以下内容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_75
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
4.2.3.使配置生效
保存并退出,执行下面命令使其配置立即生效。
[root@Master java]# source /etc/profile
[root@Slave1 java]# echo $JAVA_HOME
验证截图
从上图中得知,我们以确定JDK已经安装成功。
4.3.安装剩余机器
这时用普通用户hadoop通过下面命令格式把"Master.Hadoop"文件夹"/home/hadoop/"的JDK复制到其他Slave的"/home/hadoop/"下面,剩下的事儿就是在其余的Slave服务器上按照上图的步骤安装JDK。
scp /home/hadoop/jdk-6u31-linux-i586.bin远程用户名@远程服务器IP:~/
或者
scp ~/jdk-6u31-linux-i586.bin远程用户名@远程服务器IP:~/
备注:"~"代表当前用户的主目录,当前用户为hadoop,所以"~"代表"/home/hadoop"。
例如:把JDK从"Master.Hadoop"复制到"Slave1.Hadoop"的命令如下。
[hadoop@Master ~]$ scp~/jdk-7u75-linux-x64.rpmhadoop@80.80.80.184:~/
然后查看"Slave1.Hadoop"的"/home/hadoop"查看是否已经复制成功了。
从上图中得知,我们已经成功复制了,现在我们就用最高权限用户root进行安装了。其他的与这个一样。
5.Hadoop集群安装
所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以"root"的身份进行。
5.1.安装hadoop
首先用root用户登录"Master.Hadoop"机器,查看我们之前用FTP上传至"/home/Hadoop"上传的"hadoop-2.6.0.tar.gz "。
接着把"hadoop-1.0.0.tar.gz"复制到"/usr"目录下面。
[root@Masterhadoop]# cp /home/hadoop/hadoop-2.6.0.tar.gz /usr
下一步进入"/usr"目录下,用下面命令把"hadoop-2.6.0.tar.gz"进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-2.6.0.tar.gz"安装包。
cd /usr #进入"/usr"目录
tar -zxvfhadoop-2.6.0.tar.gz #解压"hadoop-2.6.0.tar.gz "安装包
[root@Masterusr]# mv hadoop-2.6.0 hadoop #将"hadoop-2.6.0"文件夹重命名"hadoop"
首先在/usr/hadoop创建“tmp”文件夹
mkdir /usr/hadoop/tmp
然后
[root@Master]# chown -R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop用户
[root@Masterusr]# rm -rf hadoop-2.6.0.tar.gz #删除"hadoop-2.6.0.tar.gz "安装包
》》配置"/etc/profile"
vim /etc/profile
#set hadoop path
exportHADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
配置后的文件如下:
》》重启”/etc/profile”
source/etc/profile
5.2.配置hadoop文件
这里要涉及到的配置文件有7个:
usr/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
usr/hadoop-2.6.0/etc/hadoop/yarn-env.sh
usr/hadoop-2.6.0/etc/hadoop/slaves
usr/hadoop-2.6.0/etc/hadoop/core-site.xml
usr/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml
usr/hadoop-2.6.0/etc/hadoop/yarn-site.xml
目录开始切换到/usr/hadoop-2.6.0/etc/hadoop(hadoop安装目录)
5.2.1.配置文件1:hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)
命令:[hadoop@masterhadoop]$ vi hadoop-env.sh
保存退出!
5.2.2.配置文件2:yarn-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)
命令:[hadoop@masterhadoop]$ vi yarn-env.sh
5.2.3.配置文件3:slaves(这个文件里面保存所有slave节点)
[hadoop@master hadoop]$ vi slaves
写入以下内容:
slave1
slave2
slave3
slave4
5.2.4.配置文件4:core-site.xml
命令:[hadoop@master hadoop]$ vi core-site.xml
5.2.5.配置文件5:hdfs-site.xml
命令:[hadoop@master hadoop]$ vi hdfs-site.xml
5.2.6.配置文件6:mapred-site.xml
[hadoop@master hadoop]$ vi mapred-site.xml
5.2.7.配置文件7:yarn-site.xml
命令:[hadoop@master hadoop]$ vi yarn-site.xml
5.3.将master上配置好的hadoop2.6.0目录scp复制到其他slave节点(为节约时间)
上面配置完毕,我们基本上完成了90%了剩下就是复制。我们可以把整个hadoop复制过去:使用如下命令:
sudo scp -r /usr/hadoop hadoop@slave1:~/
这里记得先复制到home/hadoop目录下面,然后在转移到/usr下面。
后面我们会经常遇到问题,经常修改配置文件,所以修改完一个配置文件后,其他节点都需要修改,这里附上脚本操作方便:
6.启动验证
在root用户下关闭所有主机的防火墙:
sudo service iptables stop
6.1.启动hadoop
格式化namenode:
hdfs namenode –format
或则使用下面命令:
hadoop namenode format
启动hdfs:
start-dfs.sh
启动yarn:
start-yarn.sh
2.2.结果进程展示:
master有如下进程:
Slave上有以下进程:
浏览器进入8080端口:ip为服务器ip
此时hadoop集群已全部配置完成!!!@老男孩 (wzhj361@gmail.com)