×

Hadoop2.6.0完全分布式的安装与配置(Centos)

96
lao男孩
2016.05.31 15:38* 字数 4310

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)


大数据
Web note ad 1