Hadoop2.7+Vmware14.1+CentOS6.5三台虚拟机Hadoop集群搭建(超详细)
本文为小白搭建Hadoop集群历程的记录,相信比网上绝大多数教程都更为详细具体,能学到较多知识,希望对广大的hadoop学习道友有所帮助!软件准备:Vmware workstation pro(自己下载),jdk-7u80-linux-x64.tar.gz,hadoop-2.7.0.tar.gz,centos6.5上述软件下载链接:https://pan.baidu.com/s/1Cj...
本文为小白搭建Hadoop集群历程的记录,相信比网上绝大多数教程都更为详细具体,能学到较多知识,希望对广大的hadoop学习道友有所帮助!
软件准备:Vmware workstation pro(自己下载), jdk-7u80-linux-x64.tar.gz,hadoop-2.7.0.tar.gz,centos6.5
上述软件下载链接: https://pan.baidu.com/s/1Cj8MdmPOTdwU1rb93h9n3A 提取码:1hvy
部署:
主机名 | 所含账户 | IP | 对应角色 | 所需功能 |
master | root, CAI | 192.168.137.130 | nameNode | ssh, perl编译环境 |
slave1(克隆机) | root, CAI | 192.168.137.131 | dataNode1 | ssh, perl编译环境 |
slave2(克隆机) | root, CAI | 192.168.137.132 | dataNode2 | ssh, perl编译环境 |
安装步骤概览:
首先安装Vmware,然后新建一台虚拟机,将集群所有节点的所需的相同软件和配置都在此台虚拟机上做好,下文第二到第七大步骤都是为此操作,从第八大步骤开始由此虚拟机克隆出另外两台虚拟机,最后3台虚拟机进行各自所需的配置。
一、Vmware14.1的安装:
参考博客:https://blog.csdn.net/qq_32786873/article/details/78725247
二、CentOS6.5的安装(安装后不要急着克隆,先把一些共同配置和软件装好):
配置:内存1.2G,硬盘40G,注意不要选择中文简体的语言(不利于开发和使用),选择Minimal Desktop模式安装:
主机名为:master , 创建使用账户:CAI
安装成功后,进入终端,赋予CAI用户所有权限,切换进入root,命令:
chmod u+w /etc/sudoers , 此命令修改文件的读写权限
vim /etc/sudoers
三、安装VMtools(实现随意在主机和客户虚拟机或虚拟机之间复制黏贴文件或文字):
1、首先将VMware安装目录下的linux.iso(vmtool镜像文件),通过CD-ROM装载上来;
2、sudo mkdir /mnt/cdrom, 创建挂载的目录
3、挂载:sudo mount -o remount,rw /dev/cdrom /mnt/cdrom (这步不行就打开桌面的光盘直接右键copy吧)
4、cp /mnt/cdrom/VMwareTools-x.x.0-xxxxxx.tar.gz /root/vm.tar.gz, 重命名
5、到/root目录下,执行 tar -xzf vm.tar.gz, 输入“ls”查看文件,可发现新增目录“vmware-tools-distrib”。
6、输入“cd vmware-tools-distrib/”进入名为“vmware-tools-distrib”的目录,输入“./vmware-install.pl”尝试安装,出现错误“-bash: ./vmware-install.pl: /usr/bin/per: bad interpreter: No such file or directory”,表明未安装编译环境。(错误自行解决)
7、在“vmware-tools-distrib”目录下输入“./vmware-install.pl”开始安装,基本上按回车键即可,直到安装完毕。
8、第一次运行时需运行“/usr/bin/vmware-config-tools.pl”命令配置VMware Tools,按回车键直接运行。
9、输入"/usr/bin/vmware-user"启动vmware用户进程,并输入”startx“启动图形界面,不要管出现的错误,重启虚拟机即可。
10、选择主机文件并摁住鼠标左键不放,尝试拖动文件到虚拟机。
四、初步配置master的IP
因为后面要用到yum命令,所以得先配一下网络,使得master能上外网,NAT上网模式。
1、本人用的是WiFi,在主机网络适配器的无线网卡上设置网络共享:
2、在VMare菜单栏的‘编辑’菜单下,可以打开虚拟网络编辑器,配置如下:
3、在master虚拟机的网络连接设置静态IP,网卡为eth0
完后便可以上网了。
五、安装JDK
1、有了vmtools,可以愉快的将安装包jdk-7u80-linux-x64.tar.gz拖动到虚拟机任意文件夹
2、卸载自带的openjdk,切换到root账户
[root@master /]# rpm -qa|grep jdk
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
[root@master /]# yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
3、解压安装包,并修改配置系统变量:
[root@master opt]# tar -zxvf /home/CAI/Down*/jdk-7u80-linux-x64.tar.gz -C /opt
[root@master opt]# vim /etc/profile
在最顶部添加内容:
#set jdk
export JAVA_HOME=/opt/
jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
保存退出,运行:
[root@master opt]# source /etc/profile
[root@master opt]# update-alternatives --install /usr/bin/java java /opt/jdk1.7.0_80/bin/java 60
[root@master opt]# update-alternatives --config java
输入新配置的jdk序号:1
至此,JDK安装完成。
六、
关闭防火墙
永久关闭防火墙:chkconfig --level 35 iptables off
永久关闭selinux:
vim /etc/selinux/config
找到SELINUX 行修改成为:SELINUX=disabled
七、安装ssh
CentOS6.5安装SSH和配置,参考博客:https://blog.csdn.net/xushouwei/article/details/51705699
主要进行以下命令:
[root@master opt]# rpm -qa | grep ssh
[root@master opt]# yum install openssh-server
[root@master opt]# /etc/init.d/sshd status
[root@master opt]# netstat -antp | grep sshd
[root@master opt]# chkconfig sshd on
八、克隆两台虚拟机,调整克隆机器的内存
创建完整克隆的虚拟机,启动克隆机,检验是否含原虚拟机的配置:VMtools具备的主客机copy、防火墙配置
vim /etc/selinux/config、查看ssh运行状态/etc/init.d/sshd status。
根据需要自行调整内存。
九、配置每台机器的主机名和IP
这一步要先说明的是,克隆的虚拟机在Network Connections中可看到两张网卡,其中System eth0为原虚拟机的网卡copy,没有实际意义(MAC地址跟原虚拟机一样),可以删除掉。而Auto eth1才是克隆机的真正网卡,可以在终端输入ifconfig来查看MAC地址和此处Auto eth1的MAC地址对比来验证。
原虚拟机master的配置:
1、在菜单Network Connections中看到只有一张网卡System eth0,配置此网卡就行
2、配置网卡信息:
[root@master /]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改hosts:
[CAI@master network-scripts]$ sudo vim /etc/hosts
克隆机上的配置:
1、在菜单Network Connections中删除System eth0,此时 /etc/sysconfig/network-scripts/不再有ifcfg-eth0的配置文件了
2、把Auto eth1改成自己的System eth0网卡,并且让ifconfig也显示eth0而不是eth1 :
[CAI@master network-scripts]$ sudo vim /etc/udev/rules.d/70-persistent-net.rules
重新创建ifcfg-eth0文件,并写入如下图的配置:
[CAI@master network-scripts]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
[CAI@master network-scripts]$ sudo service network restart
[CAI@master network-scripts]$ sudo service NetworkManager restart
此步过后,菜单Network Connections中的Auto eth1变为了System eth0,但如果ifconfig命令下,eth1没有改变为eth0,可以等后面的主机名改为slave1(克隆机的名称由master变为slave1)后重启系统,重启后则生效了,亲测有效。
修改主机名
sudo vim /etc/sysconfig/network
修改hosts:
[CAI@master network-scripts]$ sudo vim /etc/hosts
重启系统,至此克隆机的网络配置好了。其他克隆机照此方法一一更改即可。
十、配置ssh,实现集群节点之间两两都可无密码登陆
无密码登陆,在master上,通过 ssh slave1就可以登陆到对方计算机上, 而且不用输入密码;最终要实现两两节点无秘登录
1、三台虚拟机上,都在CAI账户下,使用 ssh-keygen -t rsa,一路按回车就行了。
刚才都作了什么?主要是设置ssh的密钥和密钥的存放路径。 路径为~/.ssh(/home/CAI/.ssh)下。
打开~/.ssh 下面有两个文件
id_rsa,私钥
id_rsa.pub,公钥
2、下面就是关键的地方了(原理参考https://blog.csdn.net/csm201314/article/details/78453579公钥登录部分)
①在master上将公钥id_rsa.pub写入authorized_keys,执行后就多出一个authorized_keys文件。命令:
[CAI@master ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
注:cat将公钥id_rsa.pub追加到authorized_keys文件中,如果authorized_keys不存在,则先创建再追加
修改authorized_keys文件的权限,命令:chmod 644 authorized_keys
此步后,可以无密码登录master自己了。公钥就像自创的木马,谁拿着我的木马,我就可以无秘登录谁(自己拿着自己的木 马,那就可以无秘登录自己,当然,第一次登录还是要密码的)。
②将master上的authorized_keys放到虚拟机slave1的/home/CAI/.ssh目录下。
命令格式为:scp authorized_keys 远程主机用户名@远程主机名或ip:存放路径。
[CAI@master ~]$ scp ~/.ssh/authorized_keys CAI@slave1:~/.ssh
The authenticity of host 'slave1 (192.168.137.131)' can't be established.
RSA key fingerprint is 0c:ba:f1:3a:2a:95:00:79:98:f4:a1:97:d1:c7:96:15.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave1,192.168.137.131' (RSA) to the list of known hosts.
CAI@slave1's password:
authorized_keys 100% 392 0.4KB/s 00:00
上面嫩绿色部分不用管,后面输入yes,输入CAI@slave2的密码即可传输成功。
③修改slave1上authorized_keys文件的权限,命令:chmod 644 ~/.ssh/authorized_keys
④把slave1上的公钥id_rsa.pub也追加到刚才传过来的authorized_keys文件中:
[CAI@slave1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后,将此包含了两个公钥的authorized_keys传给slave2:
[CAI@slave1 .ssh]$ scp ~/.ssh/authorized_keys CAI@slave2:~/.ssh
修改slave2上authorized_keys文件的权限,命令:chmod 644 authorized_keys
把slave2上的公钥id_rsa.pub同样追加到刚才传过来的authorized_keys文件中:
[CAI@slave2 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
此时slave2上的authorized_keys就包含集群三个节点的公钥了,谁都可以无秘登录slave2了!
⑤删除master和slave1节点上的authorized_keys,然后将slave2上的authorized_keys分别传到master和slave1,并修改 authorized_keys文件的权限,命令:chmod 644 authorized_keys
⑥两两登录一下,消除第一次登录密码。
这样集群三个节点都有含所有公钥的authorized_keys,两两之间可以无秘登录了!
十一、在master上安装配置Hadoop-2.7.0
以下步骤尽量在账户CAI下操作,因为以后操作Hadoop以及节点间传输文件的账户都是CAI,用root操作步骤可能导致某些文件只有root才能访问,导致master节点CAI账户启动Hadoop会遇上权限问题。修改linux系统配置文件可以用root账户。
首先在master上进行以下配置步骤,然后将配置好的hadoop文件传到各个集群的其他节点即可,不需要一个个配置。
第1步:将hadoop-2.7.0.tar.gz文件拷贝到/home/CAI/Downloads/目录下
第2步:解压Hadoop,注意,解压要在root账户下或者加sudo。
[CAI@master ~]# sudo tar -zxvf /home/CAI/Downloads/hadoop-2.7.0.tar.gz -C /opt
重命名文件:[CAI@master ~]# sudo mv /opt/hadoop-2.7.0 /opt/hadoop
第3步:配置系统变量
[CAI@master ~]#sudo vim /etc/profile
#set hadoop path
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
[CAI@master ~]#source /etc/profile
第4步:更改/opt/hadoop/etc/hadoop/目录下的core-site.xml, hdfs-site.xml, mapred-site.xml,hadoop-env.sh,slaves 文件。
[CAI@master hadoop]# sudo vim /opt/hadoop/etc/hadoop/hadoop-env.sh
添加内容:
jdk1.7.0_80
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# The java implementation to use.
export JAVA_HOME=/opt/前面三行注释部分是文件本身就有的,贴出来是为了告知读者在哪个地方添加,给出上下文
第5步:编辑masters文件,本人的版本没有这个文件,网友说这个文件不重要,没有则不用配置。
第6步:编辑slaves文件:
[CAI@master ~]#sudo vim /opt/hadoop/etc/hadoop/slaves
清空加入从节点的名字
slave1
slave2
第7步:[CAI@master ~]$ sudo vim /opt/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
第8步:[CAI@master ~]$ sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
添加内容(replication默认是3,如果不修改,datanode少于三台就会报错):
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/dfs/data</value>
</property>
</configuration>
第9步:mapred-site.xml ,本人的版本没有这个文件,于是将模板文件重命名为mapred-site.xml,注意是重命名而不是复制,复制的话,复制出来的文件所属用户是root,那CAI账户就无法读取该文件:
[CAI@master hadoop]# sudo mv /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml
[CAI@master hadoop]#sudo vim /opt/hadoop/etc/hadoop/mapred-site.xml
添加内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
第10步:[CAI@master ~]$ sudo vim /opt/hadoop/etc/hadoop/yarn-site.xml
[CAI@master ~]# sudo vim /opt/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
十二:将hadoop分发到各个slave节点(因为权限问题,先将该文件夹分发到各个节点的/home/CAI目录下,再进入各个节点用ROOT将文件夹移到/opt下)
[CAI@master ~]$ scp -r /opt/hadoop CAI@slave1:/home/CAI/hadoop,
进入该节点执行:[root@slave1 ~]# mv /home/CAI/hadoop /opt/
[CAI@master ~]$ scp -r /opt/hadoop CAI@slave2:/home/CAI/hadoop ,
进入该节点执行:[root@slave2 ~]# mv /home/CAI/hadoop /opt/
同时将上面第十一大节中的第三步操作(添加hadoop相关环境变量),在slave1和slave2上也操作一遍。
十三:在master节点格式化hdfs,启动hadoop
格式化之前,先要给/opt/hadoop/(hadoop安装目录)赋予新建文件夹的权利,不然CAI用户无法格式化hdfs, 因为格式化hdfs或启动hadoop涉及到创建文件夹或文件的操作,本人没操作这一步就格式化hdfs,遇到了如下错误:
java.io.IOException: Cannot create directory /opt/hadoop/tmp/dfs/name/current
在各个节点的CAI账户下,进行如下赋权:
[CAI@master .ssh]$ sudo chmod -R a+w /opt/hadoop/
master节点中,格式化hdfs:
[CAI@master .ssh]$ /opt/hadoop/bin/hdfs namenode -format
master节点中,启动hadoop的所有守护进程:
[CAI@master .ssh]$ /opt/hadoop/sbin/start-all.sh
十四、hadoop集群查看
1、在master节点,打开火狐浏览器,登录http://192.168.137.130:8088/
2、登录http://192.168.137.130:50070/
躺坑2天多时间,终于将hadoop集群搭建完成!!
更多推荐
所有评论(0)