搭建有三台集群的hadoop,cover atguigu
思路:先搭建一台虚拟机hadoop100,硬件、软件、IP、主机名称都,配好后再克隆出三台hadoop102、hadoop103、hadoop104,然后再进行集群的配置。教程分为三部:克隆前,克隆,克隆后
克隆前:
1、安装模板虚拟机(配置好内存4G、硬盘50G、IP、主机名称)
安装VMware、CentOS、远程终端工具(MobaXterm)
一台电脑需要进行的操作:
(1)安装硬件 打开VMware创建虚拟机->自定义->稍后安装操作系统(先配置好硬件再说操作系统)->客户机操作系统选择linux,版本为CentOS 7 64 位 ->虚拟机名称为hadoop100,位置为D:\centos\hadoop100->处理器数量一般为2,处理器内核总数为当前电脑核数除以4->虚拟机内存配4G->网络连接选择NAT模式->最大磁盘大小设为50G->生成的磁盘文件放在自己的目录下方便管理(D:\centos\hadoop100)->完成
(2)安装软件 点击CD/DVD(相当于插了一块儿硬盘)+连接,选择使用ISO镜像文件+确定+开启电脑
设计语言+日期&时间+软件选择(学习建议选择桌面版)+安装位置->我要配置分区->完成->点击”+“配置/boot分配1g,配置swap分配4g,配置/分配45g->点击完成,接受更改+KDUMP(崩溃前备份的,学习阶段可以关掉)+网络和主机名称(主机名称改为hadoop100、以太网打开)+开始安装 在安装过程中可以配置一下root密码:点开root密码,输入密码即可+接受协议+完成配置
(3)配置IP (IP地址有三个地方要配置1:hadoop这台服务器 2:VMware 3:window11服务器)
【1】配置VMware:点击编辑—虚拟网络编辑器—VMnet8—更改设置—再次点击VMnet8,选NAT模式—子网IP:192.168.10.0(任何一个1~10的数字 后面保持一致就行)—NAT设置—网关IP改的和子网IP一样:192.168.10.2—确定
【2】配置window11:打开网络连接
找到VMnet8—右键属性—双击(TCP/IPv4)—修改默认网关为192.168.10.2—首选DNS服务器也为192.168.10.2,备用DNS服务器为8.8.8.8
【3】配置hadoop: 进入root用户,修改IP地址 vim /etc/sysconfig/network-scripts/ifcfg- ens33,(1)配置静态IP地址:BOOTPROTD="static"(2)在下面加IP地址、网关、域名解析器
4)配置主机名称:【1】vim /etc/hostname(默认hadoop100,因为在配置软件的时候设置过了)【2】配置主机名称映射 用hadoop100来代替IP,相当于定义了全局变量,后续出行IP地址的时候统一用hadoop替换 vim /etc/hosts/ 在最后插入
然后重启即可。重启后进行验证,ifconfig验证主机名称/ping www.baidu.com验证网络/hostname验证主机名称
2、安装远程访问工具
我使用的是MobaXterm
3、修改window的主机映射文件(hosts文件)
进入C:\Windows\System32\drivers\etc 修改hosts文件 在最后加上
后面再输入hostname就能连接了
4、配置模板虚拟机(切换到root用户)
(1)安装epel-release yum install -y epel-release(有pid被锁定,只需kill -9 进程号 杀死这个进程就行)
(2)关闭防火墙 systemctl stop firewalld/systemctl disable firewalld.service
(3)为用户配置root权限,方便后期加sudo执行root权限的命令 vim /etc/sudoers/在%wheel ALL=(ALL) ALL的下面加上 用户名 ALL=(ALL) NOPASSWD:ALL (可以sudo同时不需要密码)
(4)在/opt目录下创建文件夹,并修改所属主和所属组
【1】创建 mkdir /opt/module mkdir /opt/software
【2】修改文件夹的所有者和所属组均为所创建的用户 chown 用户名:用户名 /opt/module chown 用户名:用户名 /opt/module
(5)卸载虚拟机自带的jdk
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
(6)重启虚拟机 reboot
克隆:
克隆时要先关闭hadoop100
下一步到克隆类型,选择创建完整克隆,下一步修改虚拟机名称,位置改为hadoop100存放的centos文件夹下(centos文件夹——建一个clone父文件夹——建对应虚拟机名字的文件夹)
hadoop103、hadoop104都一样
克隆后:
1、用root用户修改ip地址(vim /etc/sysconfig/network-scripts/ifcfg-ens33——IPADDR改为192.168.10.102)和主机名称(vim /etc/hostname——改为hadoop102)然后reboot。三台都一样
2、配置jdk和hadoop(先把jdk和hadoop的压缩包传到/opt/software文件夹下面——cd/opt/software/)
(1)jdk:安装——tar -zxvf jdk-8u212-linux-x64.tay.gz -C /opt/module/
进入jdk配置环境变量——以前配都是vim /etc/profile,但本质是系统启动时会加载/etc/profile.d/里的sh脚本,让里面的变量全局生效。所以现在改为在etc/profile.d/下写一个自己的sh脚本 sudo vim my_env.sh
我们要把jdk的环境变量加载到PATH上,先取出PATH路径上原来的值:$PATH再拼接下一个环境变量:$JAVA_HOME/bin export是全局变量的声明
配完后还要再source /etc/profile
(2)hadoop:安装——cd /opt/software然后tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
进入hadoop配置环境变量——sudo vim /etc/profile.d/my_env.sh
然后source /etc/profile
注:hadoop目录结构和重要目录
重要目录:
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
3、分发jdk与hadoop
(1)使用scp:
在102上的/opt/module:(推过去)
scp -r jdk1.8.0_212 用户名@hadoop103:/opt/module
在103上的/opt/module:(拉过去)
scp -r 用户名@hadoop102:/opt/module/hadoop-3.1.3 ./
在103上的/opt/module把jdk和hadoop传给104:
scp -r 用户名@hadoop102:/opt/module/* 用户名''@hadoop104:/opt/module/
(2)使用xsync:(创建xsync脚本,实现分发功能——执行xsync a.txt该文件能传到其他的服务器上相同目录下)
【1】希望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
可以把脚本写到/home/用户名/bin下
【2】在/home/用户名/bin目录下创建xsync文件
cd /home/用户名-->mkdir bin-->cd bin-->vim xsync
在该文件中编写如下代码:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
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
【3】修改脚本权限使之可以执行
chmod +x xsync / chmod 777 xsync
【4】希望分发环境变量my_env.sh(/etc/profile.d/my_env.sh)
如果是xsync /etc/profile.d/my_env.sh无权限,
如果加sudo就找不到了 sudo xsync /etc/profile.d/my_env.sh
因为我的脚本在/home/用户名/bin/下,使用sudo就切换到root账户下,这时的登录shell环境变量中就只包含/root/bin。所以可以使用绝对路径:
sudo /home/用户名/bin/xsync /etc/profile.d/my_env.sh
hadoop103、hadoop104还要 source /etc/profile
4、ssh无秘登录
(1)免密登录原理:
(2)生成公钥和私钥(执行过ssh会有一个隐藏文件.ssh)
来到家目录(/home/用户名)查看隐藏文件(ls -al)进去(cd .ssh)
输入ssh-keygen -t rsa三次回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上(自己访问自己也要密码所以自己也要配置一下)
ssh-copy-id hadoop102/ssh-copy-id hadoop103/ssh-copy-id hadoop104
5、集群配置(让102,103,104上的hadoop之间产生关系,不然只是安装了hadoop而没有联系)
(1)规划
注意:NameNode和SecondaryNameNode不要安装在同一台服务器(因为他俩都很耗内存)+ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
(2)说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认配置文件:core-default.xml(对应common)hdfs-default.xml(对应hdfs)yarn-default.xml(对应yarn)mapred-default.xml(对应mapreduced)
自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml在$HADOOP_HOME/etc/hadoop这个路径上
(3)配置集群(cd $HADOOP_HOME/etc/hadoop)
【1】配置core-site.xml(放到两个<configuration>)
vim core-site.xml
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
【2】配置hdfs-site.xml
vim hdfs-site.xml
<!-- 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>
【3】配置yarn-site.xml
vim yarn-site.xml
<!-- 指定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_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
【4】配置mapred-site.xml
vim mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(4)在集群上分发配置好的Hadoop配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
(5)在103和104上查看文件分发情况
[hadoop103]cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[hadoop104]cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
6、群起集群
(1)配置workers(workers说明机器上有几台结点就配置几个主机名称)
cd /opt/module/hadoop-3.1.3/etc/hadoop/
vim workers(删掉默认的localhost)
改为:
hadoop102
hadoop103
hadoop104
这个workers文件会作为启动脚本的一个获取输入文件,从这个文件获取主机名称所以每个主机名称都不能有空格
同步一下所有节点配置文件
xsync /opt/module/hadoop-3.1.3/et
(2)启动集群
如果是第一次启动,需要在hadoop102节点格式化NameNode(格式化后会产生新的集群id)
hdfs namenode -format
初始化完毕后会多了两个路径,一个是data(里面有一个dfs,dfs里面有name再进有current,里面有镜像文件和当前服务器的版本号version)一个是logs
正式启动集群 启动的脚本都在sbin目录下 (可以使用jps查看)
【1】启动HDFS:/sbin/start-dfs.sh
【2】在配置了ResourceManager的节点(hadoop103)启动YARN:sbin/start-yarn.sh
Web端查看HDFS的NameNode——http://hadoop102:9870
Web端查看YARN的ResourceManager——http://hadoop103:8088
上传到hdfs的文件存储在/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0 这个路径上
在集群上的文件其路径应该也是集群的路径(web上的路径)