环境:CentOS7 64位 3台
centos7-1 192.168.190.130 master
centos7-2 192.168.190.129 slave1
centos7-3 192.168.190.131 slave2
hadoop 下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/ 选则3.1.0版本
1.安装三台虚拟机(centos7),安装jdk,实现节点间免密码登陆。
#安装虚拟机不做说明,可查看相关文章资料。
#安装jdk,配置JAVA_HOME环境变量,不做说明,自行百度。
#三个虚拟机都需要修改hostname,修改/etc/hosts
#vim /etc/hostname //分别写成master,slave1,slave2,修改后需要重新启动reboot
#vim /etc/hosts
#192.168.190.130 master
#192.168.190.129 slave1
#192.168.190.131 slave2
#给三台机器设置面密码ssh登陆
#ssh-keygen -t rsa //生成密钥,三台机器都需要执行相同的命令
#authorized_keys
#touch /root/.ssh/authorized_keys //master节点上
#cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
#把slave1、slave2上的id_rsa.pub都拷贝到master节点上,直接追加到authorized_keys
#scp -r /root/.ssh/id_rsa.pub root@masterIP:/root/.ssh/slave1.id_rsa.pub //slave1
#scp -r /root/.ssh/id_rsa.pub root@masterIP:/root/.ssh/slave2.id_rsa.pub //slave2
#cat /root/.ssh/slave1.id_rsa.pub >> /root/.ssh/authorized_keys //master
#cat /root/.ssh/slave2.id_rsa.pub >> /root/.ssh/authorized_keys //master
#authorized_keys内容如下:
#通过scp命令将master的authorized_keys拷贝到slave1/slave2的/root/.ssh/下
#scp -r /root/.ssh/authorized_keys root@Slave1IP:/root/.ssh/
#scp -r /root/.ssh/authorized_keys root@Slave2IP:/root/.ssh/
#ssh 目标域名 //master、slave1、slave2,第一次需要确认一下输入yes,后面就不用了
到此免密码登陆已经完成。
2.载hadoop,解压tar.gz文件
#cd /usr
#mkdir hadoop
#cd hadoop
#wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.0.tar.gz
#tar -zxvf hadoop-3.1.0.tar.gz
解压后,出现hadoop-3.1.0工作目录,既可以使用。
#cd /usr/hadoop/hadoop-3.1.0
#mkdir tmp
#./bin/hadoop -version //检验是否可以使用
2.设置环境变量,全局(/etc/profile)
#vim /etc/profile
设置HADOOP_HOME,并加到PATH路径下
HADOOP_HOME=/usr/hadoop/hadoop-3.1.0
PATH=$PATH:$HADOOP_HOME/bin
#source /etc/profile
3.配置hadoop
#hadoop主要的文件,路径hadoop-3.1.0/etc/hadoop/下
hadoop-env.sh //
core-site.xml //
hdfs-site.xml //
mapred-site.xml //
yarn-site.xml //
workers // 只要配置namenode节点,用于发现slave节点
a.hadoop-env.sh配置
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-0.b13.el7_3.x86_64
b.core-site.xml配置
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<description>HDFS的URI,文件系统://namenode标识:端口号</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
<description>namenode上本地的hadoop临时文件夹</description>
</property>
</configuration>
c.配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>副本个数,配置默认是3,应小于datanode机器数量</description>
</property>
</configuration>
d.配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</nam
<value>yarn</value>
</property>
</configuration>
e.配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
f.配置workers(slaves)文件,这里特别注意一下版本不同可能没有slaves文件,删除localhost,一行一个,填写ip地址也可以(只在namenode节点配置)
slave1
slave2
4.将/usr/hadoop复制到其他服务器:
#scp -r /usr/hadoop root@目标ip:/usr/hadoop
5.格式化namenode:
#CD /usr/hadoop/hadoop-3.1.0
./bin/hdfs namenode -format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错;备注:只需格式化namenode,datanode不需要格式化(若格式化了,可将/usr/hadoop/tmp目录下文件都删除),所以先将安装文件夹复制到其他服务器,再格式化
6.启动hadoop
#cd /usr/hadoop/hadoop-3.1.0
#sbin/start-all.sh
8.检查启动结果
#jps
总结:
a.访问http://192.168.190.130:9000时发现,端口拒绝访问
关闭防护墙,依然没有用,查看端口占用情况(netstat -npl | grep 9000)发现没有被占用,后来看到hadoop namenode -format消息发现定位到了127.0.0.1,无法远程访问,通过修改hosts文件可以解决这个问题:
#cd /etc/hosts //三台虚拟机都要修改
#vim /etc/hosts //将下面的写在文件最前面
#192.168.190.130 master
#192.168.190.129 slave1
#192.168.190.131 slave2
重新格式化namenode节点:
#cd /usr/hadoop/hadoop-3.1.0/bin
#./hadoop namenode -format
b.发现经过a后,可以访问9000端口,但是如下图:
但是访问8088端口可以进入,如下:
发现只有一个节点启动了,所以现在的问题是:namenode启动起来了,但是slave1,slave2两个datanode没有启动起来,那么这个集群启动就失败了,分别在两台datanode节点查看jps,发现确实没有启动,继续找问题。
查看别人的安装过程,发现有个叫做slaves的文件,作用于namenode节点,用于发现slave节点,在配置文件etc/hadoop中我找了半天没有找到,我最后自己创建slaves文件,依然没有用,然后看这路径里的workers文件发现了些什么,于是就打开一看果然就是他,然后重新操作就可以了。
3.1.0版本的slaves文件换成了workers文件,需要特别注意。
c.启动时可以直接把所有都启动,命令如下:
#cd /usr/hadoop/hadoop-3.1.0
#sbin/start-all.sh
d.#sbin/start-dfs.sh执行脚本报错,如下:
ERROR: Attempting to launch hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.
Starting datanodes
ERROR: Attempting to launch hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting launch.
Starting secondary namenodes [localhost.localdomain]
ERROR: Attempting to launch hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting launch.
解决方法:
在start-dfs.sh 、stop-dfs.sh加如下配置
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
添加后可能还是会报如下警告:
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER.
解决办法:替换上述的解决方法
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
d.#sbin/start-yarn.sh执行脚本报错,如下:
Starting resourcemanager
ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.
解决办法:start-yarn.sh、stop-yarn.sh添加如下配置
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
本文是查看了网络博客与官方文档,结合自己操作所记录的所有过程,如果有不对或者错误,请留言指正,如有侵权,请联系本人删除。
参考博客:https://www.linuxidc.com/Linux/2018-02/150812.htm
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/195030.html