centos7+hadoop-2.9.2搭建分布式集群教程【超详细】
-
一、新建虚拟机:
-
二、连接XSHell
-
三、修改主机名称和网络名称
-
四、关闭防火墙
-
五、关闭selinux
-
六、jdk的安装与卸载
-
七、hadoop的安装
-
八、克隆
-
九、配置slave1和slave2
-
十、ssh免密登录
-
-
(1)master:
-
a.[root@master ~]# ssh-keygen -t rsa
-
b.进入到/root/.ssh目录下
-
c.将authorized_keys发送给slave1和slave2
-
(2)slave1:
-
a.进入到/root/.ssh路径下
-
b.更改authorized_keys的权限
-
c.将 id_rsa.pub追加到authorized_keys
-
d.将authorized_keys发送给slave2
-
(3)slave2:
-
a.进入到/root/.ssh路径下
-
b.更改authorized_keys的权限
-
c.将 id_rsa.pub追加到authorized_keys
-
d.将authorized_keys分别发送给master和slave1
-
-
十一、格式化节点
-
十二、启动hadoop集群
-
小结小结
叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
一、新建虚拟机:
参考教程:
https://blog.csdn.net/qq_43543789/article/details/108778753
静态IP设置:
Master
ip:192.168.52.129
网关:192.168.52.2
子网掩码:255.255.255.0
DNS:192.168.52.2
选择DNS为“手动”
设置root 密码:123456
设置master密码:123456
二、连接XSHell
连接master
设置连接用户为root,密码为123456
三、修改主机名称和网络名称
[root@master ~]# vim /etc/hosts
192.168.52.130 Master
192.168.52.131 slave1
192.168.52.132 slave2
[root@master ~]# vim /etc/sysconfig/network
NETWOEKING=yes
HOSTNAME=master
四、关闭防火墙
关闭:[root@master ~]# systemctl stop firewalld.service
禁止开机启动:[root@master ~]# systemctl disable firewalld.service
查看状态:[root@master ~]# firewall-cmd --state
五、关闭selinux
[root@master ~]# vim /etc/selinux/config
关闭前:
关闭后:
六、jdk的安装与卸载
1.查看
[root@master ~]# rpm -qa|grep jdk
这里看到java版本:java-1.8.0
2.卸载
[root@master ~]# yum -y remove java java版本
yum -y remove java java-1.8.0
若遇到yum正在被占用:
[root@master ~]# rm -f /var/run/yum.pid
3.将下载好的jdk通过xshell拖动到指定的文件夹中并将其解压
在root下创建文件夹java:
[root@master ~]# mkdir java
将jdk解压到/root/java/:
[root@master ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C java
小啊呜下载的jdk版本:
jdk-8u221-linux-x64.tar.gz
将压缩包删除:[root@master ~]# rm -rf jdk-8u221-linux-x64.tar.gz
4.配置环境
[root@master ~]# vim /etc/profile
输入以下内容并保存:
JAVA_HOME=~/java/jdk1.8.0_221
JRE_HOME=~/java/jdk1.8.0_221/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME
export JRE_HOME
export CLASS_PATH
export PATH
[root@master ~]# source /etc/profile
[root@master ~]# java -version
七、hadoop的安装
1.解压
将下载好的hadoop通过xshell拖动到master中
hadoop-2.9.2.tar.gz
在root下创建文件夹hadoop:
[root@master ~]# mkdir hadoop
将hadoop解压到/root/hadoop/:
[root@master ~]# tar -zxvf hadoop-2.9.2.tar.gz -C ./hadoop/
2.配置环境
hadoop-2.9.2
[root@master ~]# vim /etc/profile
export HADOOP_HOME=~/hadoop/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[root@master ~]# source /etc/profile
[root@master ~]# hadoop version
3.配置hadoop
(1)创建目录
在~/hadoop下创建目录
[root@master hadoop]# mkdir tmp
[root@master hadoop]# mkdir var
[root@master hadoop]# mkdir dfs
[root@master hadoop]# mkdir dfs/data
[root@master hadoop]# mkdir dfs/name
(2)修改配置文件
进入~/hadoop/下的hadoop-2.9.2/etc/hadoop/文件夹中
[root@master hadoop]# cd hadoop-2.9.2/etc/hadoop/
1、workers
[root@master hadoop]# vim workers
删除localhost 添加从节点的名称:
slave1
slave2
2、hadoop-env.sh
[root@master hadoop]# vim hadoop-env.sh
在# JAVA_HOME=/usr/java/testing hdfs dfs -ls下面添加如下内容:
export JAVA_HOME=~/java/jdk1.8.0_221
export HADOOP_HOME=~/hadoop/hadoop-2.9.2
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
以下配置在各个文件的
<configuration></configuration>
中添加
<configuration></configuration>
1、core-site.xml
[root@master hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
</property>
</configuration>
2、hdfs-site.xml
[root@master hadoop]# vim hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
3、yarn-site.xml
在命令行输入如下命令,并将返回地址复制,在配置yarn-site.xml时会用到:
[root@master hadoop]# hadoop classpath
返回地址如下:
/root/hadoop/hadoop-2.9.2/etc/hadoop:/root/hadoop/hadoop-2.9.2/share/hadoop/common/lib/*:/root/hadoop/hadoop-2.9.2/share/hadoop/common/*:/root/hadoop/hadoop-2.9.2/share/hadoop/hdfs:/root/hadoop/hadoop-2.9.2/share/hadoop/hdfs/lib/*:/root/hadoop/hadoop-2.9.2/share/hadoop/hdfs/*:/root/hadoop/hadoop-2.9.2/share/hadoop/yarn:/root/hadoop/hadoop-2.9.2/share/hadoop/yarn/lib/*:/root/hadoop/hadoop-2.9.2/share/hadoop/yarn/*:/root/hadoop/hadoop-2.9.2/share/hadoop/mapreduce/lib/*:/root/hadoop/hadoop-2.9.2/share/hadoop/mapreduce/*:/root/hadoop/hadoop-2.9.2/contrib/capacity-scheduler/*.jar
再次在命令行输入如下指令:
[root@master hadoop]# vim yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<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.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>输入刚才返回的Hadoop classpath路径</value>
</property>
4、mapred-site.xml
[root@master hadoop]# vim mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
八、克隆
将master分别克隆为slave1和slave2
克隆前请先关闭master哦。
此处仅演示slave1的克隆,slave2的克隆步骤相同。
九、配置slave1和slave2
1.配置静态IP
(1)配置slave1的静态IP:
在slave1的右上角点击有线设置:
点击标注框内设置salve1的静态IP
将地址改为192.168.52.131 保存
打开slave1终端:
重启网络:[master@Master ~]$ systemctl restart network.service
(注意 这时候slave1的主机名称还是master)
(2)配置slave2的静态IP:
修改方式与slave1一致
将地址改为192.168.52.132
(3)检测slave1和slave2是否能
[master@Master ~]$ ping www.baidu.com
ping 192.168.52.130 检测master、slave1和slave2是否能相互两两ping通
2.修改主机名称
记得切换到root身份。
[root@Master ~]# vim /etc/hostname
更改前:
更改后:
[root@Master ~]# vim /etc/sysconfig/network
slave2同理。
修改后重启slave1和slave2
十、ssh免密登录
注意:Master、slave1和slave2都要在root下进行操作。
(1)master:
a.[root@master ~]# ssh-keygen -t rsa
一直按回车直到该命令结束。
分别在slave1和slave2上执行相同的操作
b.进入到/root/.ssh目录下
[root@master ~]# cd /root/.ssh
将 id_rsa.pub写入authorized_keys
[root@master .ssh]# cat id_rsa.pub >> authorized_keys
更改authorized_keys的权限
[root@master .ssh]# chmod 644 authorized_keys
c.将authorized_keys发送给slave1和slave2
[root@master .ssh]# scp authorized_keys slave1:/root/.ssh/
输入yes和slave1的密码即可
[root@master .ssh]# scp authorized_keys slave2:/root/.ssh/
(2)slave1:
a.进入到/root/.ssh路径下
[root@slave1 ~]# cd /root/.ssh/
b.更改authorized_keys的权限
[root@slave1 .ssh]# chmod 644 authorized_keys
c.将 id_rsa.pub追加到authorized_keys
[root@slave1 .ssh]# cat id_rsa.pub >> authorized_keys
d.将authorized_keys发送给slave2
[root@slave1 .ssh]# scp authorized_keys slave2:/root/.ssh/
(3)slave2:
a.进入到/root/.ssh路径下
[root@slave2 ~]# cd /root/.ssh/
b.更改authorized_keys的权限
[root@slave2 .ssh]# chmod 644 authorized_keys
c.将 id_rsa.pub追加到authorized_keys
[root@slave2 .ssh]# cat id_rsa.pub >> authorized_keys
d.将authorized_keys分别发送给master和slave1
[root@slave2 .ssh]# scp authorized_keys Master:/root/.ssh
[root@slave2 .ssh]# scp authorized_keys slave1:/root/.ssh
此处(见上图)遇见问题&解决问题:
CentOS系统配置.ssh遇到port 22-No route to host问题的解决方法参见博文:
https://blog.csdn.net/qq_43543789/article/details/108789081
(4)验证
在master上:
登录[root@master .ssh]# ssh slave1
登出[root@slave1 ~]# logout
十一、格式化节点
在master:
进入到~/hadoop/hadoop-2.9.2/路径下
[root@master ~]# cd ~/hadoop/hadoop-2.9.2/
格式化节点
[root@Master hadoop-2.9.2]# bin/hadoop namenode -format
踩雷经验:
运行后不报错并在图片标注位置出现successfully即为格式化节点成功
注意:在没有出现错误的情况下,节点格式化一次即可
十二、启动hadoop集群
master:
[root@master ~]# cd ~/hadoop/hadoop-2.9.2/sbin
[root@master sbin]# ./start-all.sh
或者:(先后顺序启动)
./start-dfs.sh
./start-yarn.sh
踩雷经验:
启动hadoop集群之 This script is Deprecated.问题分析参见:
https://blog.csdn.net/qq_43543789/article/details/108800918
[root@master sbin]# jps
踩雷啦踩雷啦!
(这颗雷踩了几个小时。暴风哭泣~)
踩雷解决方法参见博文:
Linux下jps命令找不到的问题解决小记
https://blog.csdn.net/qq_43543789/article/details/108800354
踩雷解决方法参见博文:
Hadoop之SecondaryNamenode没有启动问题解决小记:
https://blog.csdn.net/qq_43543789/article/details/108799952
对于slave1、slave2:
[root@slave1 ~]# jps
在浏览器中:
192.168.52.130:50070
YARN的Web客户端端口号是8088,通过
http://192.168.52.130 :8088/
可以查看。
运行一个样例程序:
用自带的样例测试hadoop集群能不能正常跑任务:
使用命令
hadoop jar ~/hadoop/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar pi 10 10
用来求圆周率,pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数(与计算原理有关)
最后出现结果:
恭喜你,hadoop集群搭建完成。
不能正常跑出结果的筒子可能需要自己再找找错误,遇到问题 & 解决问题。
此处再来踩雷分享:
INFO hdfs.DataStreamer: Exception in createBlockOutputStream java.net.ConnectException: 拒绝连接报错解决小记
https://blog.csdn.net/qq_43543789/article/details/108794361
小结小结
终于完成啦!持续了好久的出错&解决问题。
2万+字数,这篇博文真的花费了很多时间和心血。
啊呜卒。
再展示一下运行中的各个虚拟机:
Ending!
更多课程知识学习记录随后再来吧!
就酱,嘎啦!
注:
1、人生在勤,不索何获。
2、CentOS系统配置.ssh遇到port 22-No route to host问题的解决方法参见博文:
https://blog.csdn.net/qq_43543789/article/details/108789081
3、INFO hdfs.DataStreamer: Exception in createBlockOutputStream java.net.ConnectException: 拒绝连接报错解决小记:
https://blog.csdn.net/qq_43543789/article/details/108794361
4、启动hadoop集群之 This script is Deprecated.问题分析:
https://blog.csdn.net/qq_43543789/article/details/108800918
5、Linux下jps命令找不到的问题解决小记:
https://blog.csdn.net/qq_43543789/article/details/108800354
6、Hadoop之SecondaryNamenode没有启动问题解决小记:
https://blog.csdn.net/qq_43543789/article/details/108799952