准备工作:
1,创建一台虚拟机,安装java jdk 这里选择1.8
2,给虚拟机并配置好静态IP地址
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
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已经配置完成了。
这里请参考博客:Linux克隆虚拟机的IP地址与主机名修改(二)_linux克隆虚拟机修改ip_+uuid+的博客-CSDN博客
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
解压安装包到指定路径(这里是我的):/opt/moudle
[root@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -
C /opt/module/
#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
---yarn-site.xml
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME
--- hdfs-site.xml
---mapred-site.xml
--配置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 文件,文件同步,生效
启动历史服务器: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
添加:
分发文件—
先停止相关服务:单节点停止历史服务器
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++强制修改,即可打开网页。