准备工作:
1,创建一台虚拟机,安装java jdk 这里选择1.8
2,给虚拟机并配置好静态IP地址
一:Java jdk安装
1.1检查安装环境,是否已安装其他版本的jdk,有的话卸载。
# 查看系统JDK进程
[root@hadoop102 ~]# 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@hadoop102 ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
[root@hadoop102 ~]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
1.2安装jdk通过xftp或者terminus将安装包放到Linux指定目录
1.3解压jdk安装包到指定目录
# tar -zxvf jdk的压缩包 -C 目标路径
[root@hadoop102 software]# tar -zxvf jdk-8u131-linux-x64.tar.gz -C /opt/module
1.4配置环境变量
方法一:直接在系统文件后面追加(不建议)
# sudo以管理员的权限编辑
[root@hadoop102 ~]# sudo vim /etc/profile
# 修改文件
[root@hadoop102 ~]# sudo vim /etc/profile
# 在文件末尾追加
export JAVA_HOME=/opt/module/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
方法二:新定义一个配置文件
# 在profile.d目录下创建一个自己的.sh文件 my_env.sh
[root@hadoop102 profile.d]# sudo vim my_env.sh
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_131(注意这里是自己jdk的安装路径)
export PATH=$PATH:$JAVA_HOME/bin
1.5刷新配置文件使其生效
# 刷新环境变量,配置文件更新
[root@hadoop102 ~]# source /etc/profile
# 查看JDK版本
[root@hadoop102 ~]# java -version
二:Linux集群搭建
2.1首先创建好一台虚拟机然后配置好静态IP
2.11这里记录安装好之后配置静态IP的流程。(虚拟机安装可以参考:https://blog.csdn.net/s980629/article/details/130265746?spm=1001.2014.3001.5502
静态IP配置:
2.12在VMware虚拟机左上角任务栏点击编辑(E),点击虚拟网络编辑器(N),点击类型是NAT模式那一栏,记住最下面的ip地址
2.13设置网关:再点击 NAT设置 按钮
2.21 在本机配置虚拟网卡的IP地址。
可以直接在电脑的任务栏中选中网络那里右键打开 网络和共享中心,在左边点击 更改适配器设置,然后右键选属性打开 VMare Network Adapter VMnet8, 在打开的页面上选 Internet协议版本4,点击属性,在打开的页面选择 使用下面的ip地址 ,ip地址可以填192.168.110.1 默认网关必须与前面的第三步配好的网关ip一致也就是 192.168.110.2,就此虚拟机的固定ip地址就配完了
2.3进入/etc/sysconfig/network-scripts/目录:
cd /etc/sysconfig/network-scripts/
查看目录下的文件:ls,找到ifcfg-ens32(你们不一定是32,可能是33等数字不相同,反正就是他)
2.4 编辑ifcfg-ens33文件:vim ifcfg-ens32(你们是33就输入:vim ifcfg-ens33)
修改:
BOOTPROTO=static
ONBOOT=yes
然后最下面添加(前3位与记录的ip一致即可,我的是192.168.110):
注:GATEWAY 是网关,DNS1 与网关保持一致,并且二者与上面记下来的网关一致,我这里是192.168.110.2
IPADDR=192.168.110.110
GATEWAY=192.168.110.2
NETMASK=255.255.255.0
DNS1=192.168.110.2
强制保存退出。:wq!
2.5 重启服务器:service network restart
输入 Ifconfig 查看现在的地址是否是新配置的地址。
至此静态IP已经配置完成了。
2.2 虚拟机集群克隆
这里请参考博客:Linux克隆虚拟机的IP地址与主机名修改(二)_linux克隆虚拟机修改ip_+uuid+的博客-CSDN博客
2.3 集群之间通信配置
2.31
关闭防火墙 :systemctl stop firewalld
禁止防火墙开机自启动:systemctl disable firewalld
重启:reboot
2.32 etc/hots 文件配置
集群中的每一个虚拟机都要修改/etc//hosts文件,添加所有的虚拟机到文件中其他虚拟机访问(根据自己的IP去修改)
# 在/etc/hosts文件中添加集群主机IP地址+hostname+别名
[root@hadoop102 ~]$ vim /etc/hosts
# 添加的内容
192.168.110.122 hadoop102 hadoop102
192.168.110.123 hadoop103 hadoop103
192.168.110.124 hadoop104 hadoop104
2.33将该文件同步给其他两个主机:
scp可以实现服务器与服务器之间的数据拷贝。( from server1 to server2 )
scp -r $pdir/$fname $user@host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
案例1:在hadoop102机器上拷贝jdk到hadoop103机器中
# 将hadoop102服务器的jdk拷贝到hadoop103的/opt/module/目录下
[root@hadoop102 module]$ scp -r jdk1.8.0_131/ root@hadoop103:/opt/module/
案例2:在hadoop103机器上拉取hadoop102的jdk到本机中
# 将hadoop102服务器的jdk拉取到hadoop103的/opt/module/目录下
[root@hadoop103 module]$ scp -r root@hadoop102:/opt/module/hadoop-3.1.3 ./
案例3: 在hadoop103机器上拉取hadoop102的jdk拷贝到hadoop104机器中
# 在hadoop103机器上拉取hadoop102的jdk拷贝到hadoop104机器中
[root@hadoop103 module]$ scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module/
2.34 rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别: 用rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp是把所有文件都复制过去。
rsync -av $pdir/$fname $user@host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
案例:删除hadoop103中/opt/module/hadoop-3.1.3/下的wciput与 wcoutput文件
[root@hadoop103 hadoop-3.1.3]$ rm -rf wcinput wcoutput
同步hadoop102中的/opt/module/hadoop-3.1.3/到hadoop103中,恢复这两个文件。
[root@hadoop102 module]$ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
2.35配置集群分发 xsync 集群分发
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a) rsync 命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/module/
(b)期望脚本: 命令后直接跟文件名就可直接为集群中的其他服务器同步。
xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[root@hadoop102 ~]$ echo $PATH
脚本实现:
上面已经查看了环境配置,其中有一个/root/bin目录,我们查看/root目录下并没有该bin目录,我们可以先创建一个bin目录,在bin目录中创建文件编写内容,就可实现全局生效。
[root@hadoop102 bin]$ vim xsync
添加:
# !/bin/bash
# 1. 判断参数个数(是否小于1,小于1直接退出)
if [ $# -lt 1 ]
then
echo Not Enough Arguemnet!
exit;
fi
# 2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ===================== $host =====================
# 3. 遍历所有目录,挨个发送
for file in $@
do
# 4. 判断文件是否存在
if [ -e $file ]
then
# 5. 获取父目录
pdir=$(cd -P $(dirname $file);pwd)
# 6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
添加权限:chmod 777 xsync
测试:[root@hadoop102 ~]$ xsync bin 把bin文件夹分到另外两个主机中。
可以用全路径,也可以用相对路径:
xsync /etc/profile.d/my_env.sh
2.36 配置集群之间免密登录
查看.ssh文件
# -la 查看文件的所有文件/目录包含隐藏文件/目录
[root@hadoop102 ~]$ ls -la
查看.ssh 文件
因为xsync文件执行过ssh命令,所以会有一个.ssh文件
[root@hadoop102 .ssh]$ cat known_hosts
配置102 无密访问103,104
# 生成公钥与私钥,需要敲三次回车
[root@hadoop102 .ssh]$ ssh-keygen -t rsa
将102上的公钥拷贝到103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
对自己也发一份(自己访问时也需要密码)
配置完会多一个文件 authorized_keys,存储着其他服务器的公钥,用于免密访问。
103 104 同样的操作即可。
补充:查看集群所有的进程。
[root@hadoop102 ~]# vim /bin/jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ========================= $host =========================
ssh $host jps
done
三:Hadoop集群搭建(前面是准备工作)
3.1准备好hadoop3.1.3安装包
解压安装包到指定路径(这里是我的):/opt/moudle
[root@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -
C /opt/module/
3.2添加环境变量
#HADOOP_HOME
export HADOOP_HOME=/opt/moudle/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HIVE_HOME=/opt/moudle/hive
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile 更新配置文件
编写配置文件:core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/moudle/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!--配置所有节点的atguigu用户都可作为代理用户-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--配置atguigu用户能够代理的用户组为任意组-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!--配置atguigu用户能够代理的用户为任意用户-->
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
</configuration>
---yarn-site.xml
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
--- hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
---mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/moudle/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/moudle/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/moudle/hadoop-3.1.3</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
--配置workers
hadoop102
hadoop103
hadoop104
以上配置文件要根据自己的IP的主机名适当修改。
初始化:Hdfs namenode -format
如果没报错就是执行成功了。(故障处理:先停进程,删除data和logs,再格式化,最后起进程即可, --注意如果报错要查看配置文件是不是配置错了,修改完配置文件之后要把 data 和logs这两个文件夹删除之后再次初始化)
之后会出现两个文件夹:
启动集群:hadoop102 sbin/start-dfs.sh sbin/stop-dfs.sh
hadoop fs -mkdir /wcinput hdfs上创建文件夹
hadoop fs -put wcinput/word.txt /wcinput 上传本地文件到hdfs上面
本地上传的文件的存储路径就在这个位置:
/opt/moudle/hadoop-3.1.3/data/dfs/data/current/BP-743871107-192.168.220.131-1682467906068/current/finalized/subdir0/subdir0
配置历史服务器:修改mapred-site 文件,文件同步,生效
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
启动历史服务器:bin/mapred --daemon start historyserver 然后jps 查看
hadoop fs -mkdir /input 在hdfs上面创建文件夹
hadoop fs -put wcinput/word.txt /input 上传文件到指定的hdfs目录,注意要在
/opt/moudle/hadoop-3.1.3 下面执行命令
执行命令 输出文件夹不能存在,输入的要有。
配置日志聚集功能:
编辑yarn-site.xml
添加:<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分发文件—
先停止相关服务:单节点停止历史服务器
bin/mapred --daemon stop historyserver
sbin/stop-yarn.sh
再起来即可:
sbin/start-yarn.sh
bin/mapred --daemon start historyserver
再去执行以下:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput3
整体启动停止hdfs
Start-dfs.sh/stop-dfs.sh
整体启动停止yarn
Start-yarn.sh stop-yarn.sh
各个组件逐一启动:
分别启动hdfs
Hdfs –daemon start/stop namenode/datanode/secondarynamenode
启动停止yarn
Yarn –daemon start/stop resourcemanager/nodemanager
编写脚本停止启动:myhadoop.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop002 "/opt/moudle/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop003 "/opt/moudle/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop002 "/opt/moudle/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop002 "/opt/moudle/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop003 "/opt/moudle/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop002 "/opt/moudle/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
Esac
赋予权限:Chmod 777 myhadoop.sh
执行:myhadoop.sh stop
执行可能会报一个错:在start-dfs.sh stop-dfs.sh添加如下脚本即可:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
记得分发,
再次执行myhadoop.sh stop
全部关闭了。
通过jps挨个查看。
Bin下面建立 jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
chmod 777 jpsall
直接常看所有的进程。
关闭集群的顺序:
Hadoop 002 中:bin/mapred --daemon stop historyserver
3中:sbin/stop-yarn.sh
2中:sbin/stop-dfs.sh
注意要在:/opt/moudle/hadoop-3.1.3 下面
关闭后再查看即可。
安装问题记录:
问题1:
yum 不能用的时候记得先挂载:先挂载再去执行即可。只读文件必须先修改权限再去编辑。
mount -t iso9660 -o,loop /dev/sr0 /mnt
yum list all
vi /etc/fstab
yum install vim
问题2:当执行文件分发的时候个别主机无法连接,最有可能是: 先看配置文件主机名称地址有没有配置错误,地址错误之后改回来,然后删除 4中的 .Ssh文件下的 rf-rm knows_hosts文件,因为里面有之前的密钥信息,必须删除,之后再把4的密钥给1发一次就可以了。
问题3:
安装hodoop的时候所有命令失效是因为配置文件的时候出现错误导致的,解决办法:
执行:
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
然后找到错误的配置文件修改回来,source /etc/profile 执行即可。
问题4:ifconfig没有地址出现
问题5:注意主机名不能有下划线,英文加数字即可。
问题6:yarn地址不能访问? 原因是起节点的时候没有在指定的主机上起来。
问题7:无法通过主机名去打开网页,原因是本机电脑没有配置
C:\Windows\System32\drivers\etc 可以通过napad++强制修改,即可打开网页。