目录
本案例中模板虚拟机的Linux用CentOS-7.5-x86-1804,IP地址固定为192.168.243.100,主机名设置为hadoop100,?内存为4G。
修改网络IP地址为静态IP地址,避免IP地址经常变化,从而方便服务器间的通信。
[root@hadoop100 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
内容修改:
#网络类型(通常是Ethemet)
TYPE=Ethernet?
PROXY_METHOD=none
BROWSER_ONLY=no
?#IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议),这里启用静态IP
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33?
UUID=e83804c1-3257-4584-81bb-660665ac22f6 ??#接口名(设备,网卡)
DEVICE=ens33 ??
?# 系统启动的时候网络接口是否有效(yes/no),ping不通的时候需要设置为yes
ONBOOT=yes
# 个人配置的静态IP地址,跟网关同个网段即可
IPADDR=192.168.243.100
# 配置网关,用于虚拟机需要与外围通信(网关IP具体值看扩展1)
GATEWAY=192.168.243.8
# 域名解析器:DNS值与GATEWAY的值配置一样即可
DNS1=192.168.10.243.8
修改完成后,保存并退出::wq
(1)查看网关地址
在VMware虚拟机上查看服务器的网关地址,点左上角的【编辑】-->【虚拟网络编辑器】-->【VMnet8】-->【NAT设置】-->【网关IP】,即可获取网关IP地址。
?VMware中的NAT设置中的网关IP为192.168.243.8,第三个位置中的十进制数表示网段,所以VMware给Linux虚拟机分配的IP在243网段。
(2)修改本机上的虚拟网卡
快捷键Win+R,输入control,打开控制面板,在网络和Internet中找到VM8网卡,右击选择属性,选中Internet协议4,在选择属性,设置对应的IP地址。
1、IP地址:本地配置和虚拟机IP地址在同一个网段才能正常通信,虚拟机是在243网段,这里IP地址范围为192.168.243.1到192.168.243.255,可以配置其中任意一个IP,这里配置的是192.168.243.15。
2、子网掩码:与虚拟机中的子网掩码保持一致即可
3、默认网关:与虚拟机的网关IP一致。
(3)重启网卡,配置即可生效
[root@hadoop100 ~]#service network restart
[root@hadoop100 ~]# vim /etc/hostname
hadoop100
重启虚拟机hadoop100,主机名即可生效。(可不重启网卡,直接修改主机名后,重启虚拟机,所有配置均可生效)
?[root@hadoop100 ~]# reboot
?安装epel-release
[root@hadoop100 ~]# yum install -y epel-release
安装 net-tool:工具包集合,包含ifconfig等命令
[root@hadoop100 ~]# yum install -y net-tools
安装 vim:编辑器
[root@hadoop100 ~]# yum install -y vim
关闭防火墙
[root@hadoop100 ~]# systemctl stop firewalld
关闭防火墙开机自启
[root@hadoop100 ~]# systemctl disable firewalld.service
注意:企业开发是,通常单个服务器防火墙是关闭的,整体对外会设置非常安全的防火墙。
(1)创建hadoop用户,并修改用户的密码
[root@hadoop100 ~]# useradd hadoop
[root@hadoop100 ~]# passwd hadoop
(2)配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令
[root@hadoop100 ~]# vim /etc/sudoers
修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ???ALL=(ALL) ????ALL## Allows people in group wheel to run all commands
%wheel?? ??? ?ALL=(ALL) ??????ALL
hadoop ???? ?ALL=(ALL) ?? ??? ?NOPASSWD:ALL
hadoop用户不能放在root下面,由于所以用户都属于wheel组,如果先配置了hadoop用户功能,当程序执行到%wheel时,功能会被覆盖回原样。所以得放在%wheel这行下面。
(3)切换为hadoop用户,在/opt目录下创建文件夹
[root@hadoop100 ~]# su hadoop
[hadoop@hadoop100 ~]# mkdir /opt/module
[hadoop@hadoop100 ~]# mkdir /opt/software
注意:如果在root用户下,创建的文件夹,则需要修改所属主和所属组
[hadoop@hadoop100 ~]# chown hadoop:hadoop/opt/module
[hadoop@hadoop100 ~]# chown hadoop:hadoop/opt/software
查看文件下的所属组
[hadoop@hadoop100 ~]$ ll /opt
总用量 4
drwxr-xr-x. 4 hadoop hadoop ? 46 11月 26 17:09 module
drwxr-xr-x. 2 hadoop hadoop ? 67 11月 21 16:44 software
Linux环境安装JDKhttps://blog.csdn.net/qq_39512532/article/details/135133353
Linux环境安装Hadoophttps://blog.csdn.net/qq_39512532/article/details/135134503?spm=1001.2014.3001.5501
根据模板虚拟机克隆两台虚拟机hadoop101、hadoop102。
VMware克隆虚拟机https://blog.csdn.net/qq_39512532/article/details/135135585?spm=1001.2014.3001.5501
每台虚拟机都需配置主机名称映射hosts文件。
[root@hadoop100 ~]# vim /etc/hosts
添加下面内容
192.168.243.100 hadoop100
192.168.243.101 hadoop101
192.168.243.102 hadoop102
集群分发脚本https://blog.csdn.net/qq_39512532/article/details/135138861?spm=1001.2014.3001.5501
SSH无密登陆配置https://blog.csdn.net/qq_39512532/article/details/135139292?spm=1001.2014.3001.5502
(1)目前3台服务器的集群部署配置如下:
注意:
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
(2)集群中需要修改的配置文件
(3)Hadoop相关的访问地址(在浏览器中访问相关页面)
作用 | 访问地址 |
查看HDFS上存储的数据信息 | http://hadoop102:9870 |
查看YARN上运行的Job信息 | http://hadoop103:8088 |
查看历史服务器 | http://hadoop102:19888/jobhistory |
扩展:
通过域名访问地址,则需要在本电脑上修改windows的主机映射文件(hosts文件)。
进入C:\Windows\System32\drivers\etc路径,在hosts文件下添加下面内容:
192.168.243.100 hadoop100
192.168.243.101 hadoop101
192.168.243.102 hadoop102
[hadoop@hadoop100 .ssh]$ cd $HADOOP_HOME/etc/hadoop
[hadoop@hadoop100 hadoop]$ vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录,/data是新建的 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
</configuration>
[hadoop@hadoop100 hadoop]$ vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop100:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop102:9868</value>
</property>
</configuration>
[hadoop@hadoop100 hadoop]$ vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</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>
<!-- 开启日志聚集功能:方便的查看到程序运行详情,方便开发调试-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop100:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
[hadoop@hadoop100 hadoop]$ vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop100:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop100:19888</value>
</property>
<!--配置mapreduce加载的路径-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>
在集群上分发配置好的Hadoop配置文件,然后去其他两台服务器上看是否分发成功。
通过workers文件定义集群的数据节点:
[hadoop@hadoop100 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:(注意不需有空格、空行)
hadoop100
hadoop101
hadoop102
同步该配置文件到所有节点:
[hadoop@hadoop100 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
NameNode节点是部署到hadoop100服务器上,在第一次启动集群前,需要在hadoop100节点上格式化NameNode。
[hadoop@hadoop100 hadoop-3.1.3]$ hdfs namenode -format
注意:
1、格式化NameNode会产生新的集群ID,导致NameNode和DataNode的集群id不一致,集群找不到之前的数据。
2、如果集群在运行过程中报错需重新格式化NameNode之前,先停掉NameNode和DataNode两个进程,并删除所有机器的data和logs目录,然后再重新格式化。
需求:通过脚本快速启停Hadoop的hdfs、yarn、historyserver服务
脚本命令:xhadoop start/stop
(1)在/bin目录下创建xsync文件,以便全局调用
[hadoop@hadoop100 ~]$ cd bin
[hadoop@hadoop100 bin]$ vim xhadoop
主要根据之前的集群规划来对服务进行启停操作:
在该文件下编写如下代码:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
保存后退出::wq
(2)修改脚本xhadoop具有执行权限
[hadoop@hadoop100 bin]$ chmod +x xhadoop
(3)集群启停操作
启动集群:
停止集群:
(4)查看三个节点任务启动状态
(5)同步集群启停脚本到别的节点
[hadoop@hadoop100 bin]$ xsync /bin/xhadoop
扩展:
(1)整体启动 / 停止HDFS
? ? ? ? start-dfs.sh/stop-dfs.sh
(2)整体启动 / 停止YARN
????????start-yarn.sh/stop-yarn.sh
(3)各个服务组件逐一启动/停止
? ? ? ? 1)分别启动/停止HDFS组件
????????hdfs --daemon start/stop namenode/datanode/secondarynamenode
????????2)启动/停止YARN
????????yarn --daemon start/stop resourcemanager/nodemanager
(1)上传小文件
# 创建hdfs服务器上创建名称为input的文件夹
[hadoop@hadoop100 ~]$ hadoop fs -mkdir /input
# 上传word.txt文件到hdfs服务器的/input目录下
[hadoop@hadoop100 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
(2)上传大文件
# 上传jdk压缩包到hdfs服务器的/input目录下
[hadoop@hadoop100 ~]$ hadoop fs -put /opt/software/jdk-8u391-linux-x64.tar.gz /input
?(1)通过命令查看是否成功上传大小文件到hdfs服务器上
?(2)下载之前解压的/jdk-8u391-linux-x64.tar.gz
[hadoop@hadoop100 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
(1)上传文件后,查看hdfs文件的存储路径
[hadoop@hadoop100 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
(2)小文件:直接查看磁盘中的存储文件
[hadoop@hadoop100 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
coffce
coffce
(3)大文件:通过拼接磁盘中相关的文件才能获得完整的大文件(大文件上传时候会被切片)
-rw-rw-r--. 1 hadoop hadoop? ? 134217728? ? ?12月 25? 15:40 blk_1073741843
-rw-rw-r--. 1 hadoop hadoop? ? 1048583 ????????12月 25? 15:40 blk_1073741843_1019.meta
-rw-rw-r--. 1 hadoop hadoop? ? 7669514 ????????12月 25? 15:40 blk_1073741844
-rw-rw-r--. 1 hadoop hadoop ? ?59927 ????????????12月?25? 15:40 blk_1073741844_1020.meta
[hadoop@hadoop100 subdir0]$ cat blk_1073741843>>tmp.tar.gz
[hadoop@hadoop100 subdir0]$ cat blk_1073741844>>tmp.tar.gz
[hadoop@hadoop100 subdir0]$ tar -zxvf tmp.tar.gz
注意:拼接的时候大文件一定要按后缀的顺序正序拼接,否则该文件会出问题解压不了。
[hadoop@hadoop100 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
(1)web端查看运行结果
(2)命令行查看运行结果
[hadoop@hadoop100 hadoop-3.1.3]$ hadoop fs -ls /output
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2023-11-26 18:58 /output/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 35 2023-11-26 18:58 /output/part-r-00000
[hadoop@hadoop100 hadoop-3.1.3]$ hadoop fs -cat /output/part-r-00000
2023-11-26 19:17:39,999 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
hadoop 2
mapreduce 1
test 2
yarn 1
(3)在历史服务器查看日志
(1)查看ntpd 服务状态及开机自启动状态
# 查看ntpd服务的开启状态
[hadoop@hadoop100 ~]$ sudo systemctl status ntpd
# 启动ntpd服务
[hadoop@hadoop100 ~]$ sudo systemctl start ntpd
# 查看ntpd服务开机自启动的开启状态
[hadoop@hadoop100 ~]$ sudo systemctl is-enabled ntpd
(2)修改hadoop100的ntp.conf配置文件
[hadoop@hadoop100 ~]$ sudo vim /etc/ntp.conf
# 授权192.168.10.0-192.168.10.255网段所以机器都可以从这台机器上查询和同步时间(去掉注释)
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap# hadoop集群在局域网中,不使用其他互联网上的时间?(以下四条加上注释)
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst#?当该节点丢失网络连接,依然可以采用本地时间作为服务器时间为集群中的其他节点提供时间同步 (添加上以下两条)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[hadoop@hadoop100 ~]$ sudo vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
[hadoop@hadoop100 ~]$ sudo systemctl start ntpd
(5)设置 ntpd 服务开机启动
[hadoop@hadoop100 ~]$ sudo systemctl enable ntpd
[hadoop@hadoop101 ~]$ sudo systemctl stop ntpd
[hadoop@hadoop101 ~]$ sudo systemctl disable ntpd
[hadoop@hadoop102 ~]$ sudo systemctl stop ntpd
[hadoop@hadoop102 ~]$ sudo systemctl disable ntpd
[hadoop@hadoop101 ~]$ sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop100
[hadoop@hadoop101 ~]$ sudo date -s "2021-12-12 12:12:12"
[hadoop@hadoop101 ~]$ sudo date