1. 首先在虚拟机中安装好三台虚拟机,并配置好网络
至于安装过程和网络配置请参考我的其他文章
2. 搭建集群之前的说明
我使用的是hadoop2.7.3,jdk1.8,CentOS6.8,参考我这篇文章的小伙伴门,请尽量保证和我的版本一致,因为Hadoop的不同组合,有时候不会有用,并且命令也可能不一样,hadoop2.7.3依赖jdk1.8.,可以去百度的页面上,找到可能组合成功的操作系统、Java和Hadoop
3. 配置主机名
我建议将这三台的主机名分别命名为,master,slave1,slave2,当然不这么命名也可以,只要你分的清那台是master就行,如果之前你的主机名不是这三个,那么也可以通过修改配置文件来更改主机名(在CentOS7中可以通过命令来修改)
vim /etc/sysconfig/network
把这个文件中的HOSTNAME修改为:master
保存退出
重启生效。
那两个也是如此修改。
4. 在三个主机中创建三个名字相同的用户
在创建一个用户的目的是为了放置root权限过高,导致我们误删一些Hadoop的东西,并且如果日后需要多人维护的时候,只要我们将这个用户加入我们新建用户的组里面,就可以了。
创建用户的命令为
useradd hadoop #创建这个用户的时候,默认就创建了一个和用户名同名的组,所以不需要在创建组了。
给刚刚创建的用户设计密码,只有root用户有此权限。
passwd 密码
#但是如果密码过于简单,这个命令是无法通过的,会让你重新在设计密码,因为在实验环境下不需要设置过于复杂的密码,所以我有一个办法,可以用以下命令:
echo 密码 | passwd –-stdin(代表键盘的意思) 用户名
比如我的是
另外两个主机同样如此
5. 配置hosts列表
配置host列表的目的就是,将主机名和ip地址对应起来,这样的话,我们在管理集群的时候就可以通过主机名来管理了,这样做更加的便于管理,便于理解,
执行如下命令;
vim /etc/hosts
在这个文件中添加如下代码
#前面是ip地址,后面是主机名。
保存退出
测试是否配置成功
在另外两台主机中也做同样的操作。
6. ssh免秘钥登录
6.1. 为什么要免秘钥登录
1) 在集群之间传输文件更加方便
2) 因为Hadoop集群依赖于ssh免秘钥登录,才能控制整个集群
6.2. 免秘钥登录步骤
1) 查看本机是否开启了sshd服务(注意带d结尾的进程一般都是服务),
用命令pstree -pu | grep sshd
已经查看到开启了这个服务,如果没有开启,请输入这个命令,service sshd start
2) 关闭防火墙
输入:
serviceiptables stop
让防火墙开启不启动
chkconfigiptables off
查看是否禁止防火墙开机自启动
都是关闭状态,表明已经禁止自启动了
另外两个也是如此。
3) 关闭SELINUX
SELINUX也是一个Linux中的安全模块,可以最大限度的减小系统中服务进程可访问的资源。
关闭这个的方法就是通过编辑selinux这个文件将里面的一行改为SELINUX=disabled就可以了。然后重启
执行命令:vim /etc/sysconfig/selinux
4) 切换到hadoop用户下,三个都是
5) 对master执行如下命令
ssh-keygen -t rsa #中间会有交互,一路回车即可
在hadoop的家目录里面会产生.ssh这个隐藏目录
6)进入.ssh目录
发现,有两个文件,分别是id_rsa(私钥) id_rsa.pub(公钥),
7) 在slave1,和slave2中hadoop的家目录中,创建.ssh目录,并且给这个目录赋给700的权限。
8) 将master的公钥复制到slave1和slave2的.ssh目录中,并更名为authorized_keys,且将这个文件赋值600的权限,执行如下命令就可以进行远程复制,
scp id_rsa.pub hadoop@slave1:/home/hadoop/.ssh/authorized_keys
第一次, 需要输入密码,当完成免秘钥登录就可以不用密码了。进入slave1的.ssh目录下,查看是否复制成功
可以看到已经成功了。赋给600的权限
9) 在master就可以不用密码,即可登录slave1和slave2了
退出是用exit
7. 安装JDK
7.1. 在hadoop的用户目录下,创建一个software的目录。将所有hadoop安装的软件都装到这里
7.2.检查是否安装有jdk,有的话卸载。
首先查询看是否安装过
rpm-qa | grep jdk
rpm-qa | grep java
然后逐个卸载
rpm-e 具体包名,#这里演示一个,其他的不显示了,道理一样
7.3.用远程传输工具,将jdk传输过去,到soft目录下。
7.4.安装jdk,执行如下命令
tar -zxvf jdk-8u171-linux-x64.tar.gz
结果如下:
创建一个软连接,以便以后修改
7.5切换到root,.配置环境变量,添加如下内容
编辑文件
vim /etc/profile
保存并且退出。
7.6.验证jdk是否配置成功
先用source使配置文件生效
输入java -version
表明已经成功生效。
7.7.将这个压缩后的目录远程复制到slave1和slave2,并且同样修改这个配置文件,
三个都生效就行。
8. 安装hadoop
8.1. 将hadoop安装包用远程工具传输到master
8.2. 解压这个压缩包
8.3. 创建一个软连接
8.4 添加环境变量
切换为root,编辑/etc/profile,添加如下内容
8.5. 让配置文件生效
source /etc/profile
验证是否成功执行
hadoop version
8.6.修改hadoop的配置文件:
进入/home/hadoop/software/hadoop-2.7.3/etc/hadoop,目录下
编辑hadoop的配置文件,第一个
1) vim hadoop-env.sh #这个是配置脚本中要用到的环境变量
修改如下内容
2)vim core-site.xml #Hadoop的配置项,例如MapReduce,YARN等
填入如下内容
3) 根据以上内容,此时我们应该在/home/hadoop/software/hadoop-2.7.3,目录下新建一个tmp临时目录,并在这个目录下有一个子目录dfs,dfs有两个子目录分别name和data
4)vim hdfs-site.xml #这个文件是hadoop守护进程的配置项,包括namenode和datanode
5)vim yarn-site.xml #这个是YARN守护进程的配置项,包括资源管理,web应用代理,和节点管理器
6) vimmapred-site.xml #这个配置文件是MapReduce的守护进程的配置项,包括作业历史服务器。
因为没有这个配置文件,所以需要新建,或者在这个当前目录下有一个它的模板。将这个文件改名就可以了,这个文件就是mapred-site.xml.template,改成mapred-site.xml
执行如下命令;
cpmapred-site.xml.template mapred-site.xml
然后在vim mapred-site.xml,填入如下内容
7) vim slaves #这个是配置datanode和节点管理器,填入如下内容
8.7将hadoop远程复制到另外两台计算机,并配置和master一样的环境变量(配置环境变量这里不写了,见上面的master配置)
表示已经复制过来了。
8.8.格式化文件系统
hdfs namenode -format
8.9.启动hdfs文件系统和YARN文件系统
8.10.验证是否成功:
jps,如果含有datanode,ResourceManager,NameNode,SecondaryNameNode,Jps,就证明成功了。
9. 在浏览器输入http://192.168.1.21:50070/验证是否成功
10.重要的提醒:
1.集群必须进行时间的同步,可以是同步真实机的时间或者网络时间,
2.集群必须给自己也用上免秘钥登录,因为本机之中不止一个用户,那么hadoop进行配置和免秘钥登录自己的时候就没有密码了