环境准备:centOS7,hadoop3
步骤:
第一步:修改静态ip
查看当前网卡名称
ifconfig
编辑ip地址配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改BOOTPROTO的值为static,ONBOOT为yes,并在末尾添加IPADDR,NETMASK等
BOOTPROTO=static
ONBOOT=yes
IPADDR=“192.168.209.130”
NETMASK=“255.255.255.0”
GATEWAY=“192.168.209.2”
DNS1=“8.8.8.8”
DNS2=“8.8.4.4”
重启
service network restart
第二步:修改主机名
vim /etc/hosts
添加如下代码,三台虚拟机对应的IP地址和主机名
192.168.209.128 hadoop1
192.168.209.129 hadoop2
192.168.209.130 hadoop3
第三步:关闭防火墙
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
第四步:安装JDK
1、创建 java文件夹
mkdir /opt/software
2、切换到java目录下
cd /opt/software
3、下载Jdk
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
4、解压
tar -zxvf jdk-8u141-linux-x64.tar.gz
5、编辑配置文件
vim /etc/profile 增加如下配置
JAVA_HOME=/opt/software/jdk1.8.0_141
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
6、使配置文件生效 source /etc/profile
第五步:安装hadoop
1、切换到压缩目录下
cd /opt/software/
2、解压
tar -xzvf hadoop-3.1.2.tar.gz
3、配置hadoop中的hadoop-env.sh
cd /hadoop-3.1.2/etc/hadoop/
vim hadoop-env.sh
4、修改hadoop-env.sh文件中JAVA_HOME 路径
export JAVA_HOME=/opt/software/jdk1.8.0_141
5、编辑配置文件
vim /etc/profile
6、在文件末尾添加内容
export HADOOP_HOME=/opt/software/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
7、让修改后的文件生效
source /etc/profile
第六步:ssh免密配置
1、因为我是使用root用户进行操作的,所以我切换到root目录下
cd /root/
2、如果没有使用ssh进行连接过其他服务器,那么此目录下不会有.ssh文件夹,此时需要执行以下命令生成.ssh文件,如果已存在则进行下一步
mkdir .ssh
3、进.ssh目录
cd .ssh/
4、创建公钥和私钥
ssh-keygen -t rsa
5、不断的按enter键,自动生成公钥和私钥
6、把公钥拷贝到需要无密连接的主机中
ssh-copy-id hadoop2
到此,hadoop1可以实现免密登录hadoop2,但是hadoop2不能免费登录hadoop1,可以重复以上方法进行相互配置
第七步:nodepad++远程连接hadoop
参考博客:https://blog.youkuaiyun.com/pdsu161530247/article/details/81702176
可能会遇到的问题:连接成功后目录只有root,没有其它目录
解决办法:“Initial remote directory”设置成“/”就可以看到根目录了
第八步:配置文件
(一) 配置core-site.xml文件
1.打开hadoop1下面的core-site.xml
/opt/software/hadoop-3.1.2/etc/hadoop/core_site
2.在core-site.xml文件末尾指定NameNode地址和存储目录
<configuration>
<!--指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:8020</value>
</property>
<!--指定hadoop运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop-3.1.2/data/tmp</value>
</property>
</configuration>
(二)配置HDFS
1.配置hadoop-env.sh文件(前文已经配置过,此处不再配置)
(1).打开hadoop1下面的hadoop-env.sh
/opt/software/hadoop-3.1.2/etc/hadoop/hadoop-env.sh
(2).在文件中添加代码
export JAVA_HOME=/opt/software/jdk1.8.0_141
2.配置hdfs-site.xml文件
(1)打开hadoop1下面的hdfs-site.xml
/opt/software/hadoop-3.1.2/etc/hadoop/hdfs-site.xml
(2)在文件中添加代码
<configuration>
<property>
<name>dfs.replication</name> //hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>//SNN的tracker页面监听地址和端口
<value>hadoop3:9870</value> //此处千万不要写50070,50070这是hadoop2配置的端口,hadoop3请配置9870,否则后面登录192.168.209.128:50070无法进入
</property>
</configuration>
(3)slaves
hadoop3.0以后slaves更名为workers,所以只要配置workers就行。
3.配置yarn
配置yarn-site.xml文件
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
</configuration>
4.mapreduce
配置mapred-site.xml文件
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(三)在集群上分发所有文件
- 编写集群分发脚本xsync:循环复制文件到所有节点的相同目录下
(1)在/usr/local/bin目录下创建xsync文件(在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行,需要制定路径。),文件内容如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(2)修改脚本 xsync 具有执行权限
chmod 777 xsync //777 是最高权限,有读、写、执行权限
(3)利用xsync脚本分发hadoop文件(即把hadoop1中的hadoop文件分发到Hadoop2和hadoop3中)
cd /opt/software/hadoop-3.1.2/etc/ //切换到hadoop目录下
xsync hadoop/ //实现分发
(四)查看文件分发情况
1.编写xcall脚本:为了在所有主机上同时执行相同的命令
在/usr/local/bin目录下创建xcall文件,文件内容如下:
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
echo -------------localhost----------
$@
for((host=1; host<=8; host++)); do
echo ----------hadoop$host---------
ssh hadoop$host $@
done
2.修改脚本 xcall 具有执行权限
chmod 777 xcall
3.查看文件分发情况
xcall cat /opt/software/hadoop-3.1.2/etc/hadoop/workers
第六步:集群启动及测试
1.第一次启动,需要先格式化namenode
hdfs namenode -format
2.修改start-dfs.sh,stop-dfs.sh,start-yarn.sh,stop-yarn.sh四个文件
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
3.启动
[root@hadoop1 hadoop]# start-dfs.sh
此时会有如下报错:
[root@hadoop1 hadoop]# start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [hadoop1]
上一次登录:六 8月 10 20:01:51 CST 2019pts/0 上
hadoop1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Starting datanodes
上一次登录:六 8月 10 22:28:39 CST 2019pts/0 上
hadoop1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Starting secondary namenodes [hadoop1]
上一次登录:六 8月 10 22:28:40 CST 2019pts/0 上
hadoop1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
4.配置免密登陆(对本机配置)
报这个错说明本机没有配置免密登陆,这里有个疑问,前面已经配置过了,为什么这里还要配置,这是因为前面对别的主机进行配置,对本机也要进行配置
ssh-keygen -t rsa
一直按enter之后,输入命令:
[root@hadoop1 hadoop]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop1
5.启动
[root@hadoop1 hadoop]# start-all.sh
可能会有如下报错
[root@hadoop1 phil]# start-all.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [hadoop1]
上一次登录:六 8月 17 11:35:11 CST 2019pts/0 上
Starting datanodes
上一次登录:六 8月 17 11:36:03 CST 2019pts/0 上
Starting secondary namenodes [hadoop1]
上一次登录:六 8月 17 11:36:08 CST 2019pts/0 上
Starting resourcemanager
上一次登录:六 8月 17 11:36:22 CST 2019pts/0 上
Starting nodemanagers
上一次登录:六 8月 17 11:38:21 CST 2019pts/0 上
解决办法:
vim sbin/start-dfs.sh
vim sbin/stop-dfs.sh
把
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
改成
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root