1.简介:
(1)Hadoop项目为可靠、可扩展的分布式计算开发开源软件。
(2)Hadoop 软件库是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据
集。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是
依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,因此在计算机集群之上
提供高可用性服务,每台计算机都可能容易出现故障。
(4)Hadoop项目模块:
Hadoop 分布式文件系统 (HDFS):一种分布式文件系统,提供对程序数据高吞吐量访问
(存储)。
Hadoop YARN:作业调度和集群资源管理的框架(调度)。
Hadoop MapReduce:基于 YARN 的系统,用于并行处理大型数据集(运算)。
2.官网:
官网链接:Apache Hadoop
3.准备:
(3.1)模板虚拟机安装及配置:
参考:Linux虚拟机_huivictor的博客-CSDN博客
(1)Centos7系统安装配置:
设置日期、软件桌面、内存分区(1g(/boot:启动所需资源)、4g(swap:内存不
够了,用硬盘当作成内存,以保持正常运行)、45g(/:根目录))、KDUMP(可
在系统崩溃前备份一部分数据,需要分配内存,保存备份数据,段暂不开启,实际开
发中可以开启)、网络和主机名( _N)(打开以太网)、SECURITY POLICY(安全策
略:默认打开)、设置root账号密码(默认root)
(2)网络配置: VMware虚拟网络(NAT):(VMware编辑==>选虚拟网络编辑器)
如图:
Window配置:
(网络和 Internet\高级网络设置\网络连接,备用DNS服务器表公网解析器)
如图:
(3)修改ip地址:
修改内容:BOOTPROTO="static"(设置虚拟机ip为静态,默认值为dhcp动态ip)
添加内容:
IPADDR=192.168.10.100(主机静态IP地址)
GATEWAY=192.168.10.2 (网关IP地址)
DNS1=192.168.10.2 (域名解释器IP地址)
命令操作:
#编辑ifcfg-ens33文件(ifcfg-enp0s3)[root@hadoopTemplate ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33#查看文件[root@hadoopTemplate ~]$ cat /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"......BOOTPROTO="static"......DEVICE="ens33"ONBOOT="yes" #添加内容IPADDR=192.168.10.100GATEWAY=192.168.10.2DNS1=192.168.10.2
(4)修改主机名称:
修改内容:hadoopTemplate
操作命令:
#编辑hostname文件[root@hadoopTemplate ~]$ vim /etc/hostname#查看文件[root@hadoopTemplate ~]$ cat /etc/hostnamehadoopTemplate
(5)主机名称映射:
添加内容:(后续配置三台集群的服务:hadoop101、hadoop102、hadoop103)
192.168.10.100 hadoopTemplate
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
命令操作:
#编辑hosts文件[root@hadoopTemplate ~]$ vim /etc/hosts#查看文件[root@hadoopTemplate ~]$ cat /etc/hosts ......192.168.10.100 hadoopTemplate192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103
(5)主机名称映射:
(6)重启虚拟机:reboot 或 shutdown -r now
(7)查看虚拟机ip:ip addr
如图:
(8)测试网络:ping www.baidu.com
如图:按Ctrl + c 停止访问
(9)Xshell连接虚拟机:
Window配置虚拟机(ip对应虚拟机主机名称)映射,注:如Window10由于权限管理
较严,修改不成功,可将hosts文件拷到桌面配置,再放入原位置覆盖。
添加内容:Window的hosts文件位置:C:\Windows\System32\drivers\etc
192.168.10.100 hadoopTemplate192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103
测试:使用Xshell连接虚拟机(主机:IP 改成 虚拟机主机名称)
(3.2)模板虚拟机环境的配置:
(1)检查网络:
命令操作:
#检查是否正常上网[root@hadoopTemplate ~]$ ping www.baidu.com#安装epel-release:提供高质量软件包,相当于添了一个第三方源[root@hadoopTemplate ~]$ yum install -y epel-release#注意:如虚拟机安装的Centos7系统是最小系统版,#还需要安装如下工具(桌面标准版不用)#工具包集合,包含ifconfig 等命令[root@hadoopTemplate ~]$ yum install -y net-tools#安装编辑器[root@hadoopTemplate ~]$ yum install -y vim#文件传输rsync安装(注:传输的服务器双方都需安装)[root@hadoopTemplate ~]$ yum -y install rsync#ntp服务安装:hadoop集群时间同步设置时使用[root@hadoopTemplate ~]$ yum install -y ntp
(2)防火墙:
命令操作:
#关闭防火墙[root@hadoopTemplate ~]$ systemctl stop firewalld#关闭防火墙开机自启[root@hadoopTemplate ~]$ systemctl disable firewalld.service#查看防火墙状态[root@hadoopTemplate ~]$ systemctl status firewalld
(3)创建用户:(参考:Linux虚拟机)
创建普通用户,并修改普通用户的密码
命令:useradd 用户名、passwd 用户名(注:记一下密码)
(4)创建目录:
(配置hui普通用户,在hui用户下,可使用sudo+命令=root权限的任意命令)
命令操作:
#opt目录下创建文件夹:软件解压文件存储位置[root@hadoopTemplate ~]$ mkdir /opt/module[root@hadoopTemplate ~]$ mkdir /opt/software#修改所属用户和所属组:软件压缩包存储位置[root@hadoopTemplate ~]$ chown 用户名:用户名 /opt/module[root@hadoopTemplate ~]$ chown 用户名:用户名 /opt/software
(5)卸载自带JDK:
(注:如果你的虚拟机安装的Centos7系统是最小化安装,则无需执行这一步)
命令操作:
#查看是否有自带jdk[root@hadoopTemplate ~]$ rpm -qa | grep -i java#卸载虚拟机自带jdk[root@hadoopTemplate ~]$ rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
注:rpm -qa: 查询所安装的所有rpm软件包
grep -i: 忽略大小写
xargs -n1: 每次只传一个参数
rpm -e --nodeps:强制卸载
(6)重启虚拟机:reboot 或 shutdown -r now
(3.3)克隆模板虚拟机及设置:(注:克隆时,先关闭克隆的模板虚拟机,选择完全克隆)
(1) 修改主机ip地址:
修改内容:IPADDR=192.168.10.101(主机静态IP地址,根据添加ip映射名称配置)
命令操作:
#编辑ifcfg-ens33文件(ifcfg-enp0s3) [root@hadoopTemplate ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33#查看文件[root@hadoopTemplate ~]$ cat /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"......BOOTPROTO="static"......DEVICE="ens33"ONBOOT="yes" #修改内容IPADDR=192.168.10.101......
(2)修改主机名称:
修改内容:hadoop101(根据添加ip映射名称配置)
命令操作:
#编辑hostname文件[root@hadoopTemplate ~]$ vim /etc/hostname #查看文件[root@hadoopTemplate ~]$ cat /etc/hostnamehadoop101
(3)重启虚拟机:reboot 或 shutdown -r now
(4)查看主机名称配置成功:
[root@hadoopTemplate ~]$ hostnamehadoop101
(5)检查是否正常上网:ping www.baidu.com
(3.4)安装软件及配置的环境:
(1)将jdk1.8、hadoop-3.1.3软件压缩包通过Xftp上传至Linux虚拟机的/opt/software目录
(2)解压文件:
命令操作:
#切换到新创建的用户账号(su 用户名 或 直接以新账号连接虚拟机)[root@hadoopTemplate ~]$ su hui 密码:#进入software软件压缩包存放目录[hui@hadoopTemplate root]$ cd /opt/software #进入software软件压缩包存放目录(直接以新账号连接虚拟机)[hui@hadoopTemplate ~]$ cd /opt/software #查看文件:ll 或 ls[hui@hadoopTemplate software]$ ll总用量 474692-rw-rw-r--. 1 hui hui 338075860 9月 26 15:57 hadoop-3.1.3.tar.gz-rw-rw-r--. 1 hui hui 148003999 9月 26 15:57 jdk-8u331-linux-x64.tar.gz #解压文件到指定目录(-C:解压到指定目录)[hui@hadoopTemplate software]$ tar -zxvf JDK压缩包 -C /opt/module[hui@hadoopTemplate software]$ tar -zxvf hadoop压缩包 -C /opt/module#进入module软件解压文件存放目录[hui@hadoopTemplate software]$ cd ../module/#查看解压文件[hui@hadoopTemplate module]$ ll总用量 0drwxr-xr-x. 9 hui hui 149 9月 12 2019 hadoop-3.1.3drwxr-xr-x. 8 hui hui 273 3月 10 2022 jdk1.8.0_331
(3)环境配置:将jdk、hadoop环境配置到Linux虚拟机PATH系统变量上
编辑my_env.sh文件:
编辑内容如下:(注:export表全局生效,$属性表获取对应值)
#JAVA_HOME环境配置export JAVA_HOME=/opt/module/jdk1.8.0_331export PATH=$PATH:$JAVA_HOME/bin#HADOOP_HOME环境配置export HADOOP_HOME=/opt/module/hadoop-3.1.3export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin
命令操作:
#编辑my_env.sh文件[hui@hadoopTemplate ~]$ sudo vim /etc/profile.d/my_env.sh#查看文件[hui@hadoopTemplate ~]$ cat /etc/profile.d/my_env.sh
保存退出时出现如下错误:权限不足问题
(解决:不保存退出,加上sudo+编辑命令再执行即可)
"/etc/profile.d/my_env.sh" "/etc/profile.d/my_env.sh" E212: 无法打开并写入文件请按 ENTER 或其它命令继续
(4)重新加载profile文件:source /etc/profile
(5)检查环境配置是否成功:java、hadoop,echo $PATH(查看本机环境变量)
(6)hadoop安转目录:目录文件分析
bin(重点命令:hdfs、mapred、yarn)etc(提供大量配置信息,重点:进入hadoop目录core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlworkers)include(C语言头文件)lib(native:本地动态链接库,后面hadoop增加压缩功能使用,重新编译源码)libexecLICENSE.txt(扩展)NOTICE.txt (扩展)README.txt (扩展)sbin(重要:(start-dfs.sh: hadoop专门启动集群的命令start-yarn.sh:hadoop启动资源调度器的命令)这两个命令经常使用mr-jobhistory-daemon.sh:启动list服务器hadoop-daemon.sh:单节点启动(偶尔用一下))share(doc:各种说明文档,hadoop:mapreduce目录中有由官方提供的案例)
4.使用:
(4.1)由官网可知:有三种运行模式
(1)本地(数据存于服务器本地):测试偶尔用一下
(2)伪分布式集群(数据存于服务器HDFS):少部分企业使用
(3)完全分布式集群(数据存于服务器HDFS,多台服务器工作):
企业大量使用(开发重点)
(4.2)本地运行模式:
编辑内容:任意拼音或英文,如:abc abc、aa、bbb
目标:统计每次出现的次数
(hadoop处理过程:输入文本=>mapreduce=>输出统计清单)
命令操作:(编辑完,按Esc,接着输入 :wq! 保存退出,:q! 不保存退出)
#进入hadoop101安转目录[hui@hadoop101 ~]$ cd /opt/module/hadoop-3.1.3#创建winput目录[hui@hadoop101 hadoop-3.1.3]$ mkdir winput#编辑word.txt文件[hui@hadoop101 hadoop-3.1.3]$ vim winput/word.txt#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat winput/word.txtabc abcaabbb#执行hadoop的wordcount程序统计案例#bin/hadoop jar share/ (按Tab键提示补全(按2次),注:需指定输入路径)#(需指定输入路径(如:winpu),但输出路径(如:woutput)不能存在,否则抛异常)#执行成功:会在hadoop安装目录生成woutput目录,#并生成有两个文件part-r-00000、_SUCCESS[hui@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-3.1.3.jar wordcount winput/ ./woutput#查看woutput目录文件[hui@hadoop101 hadoop-3.1.3]$ ll woutput总用量 4-rw-r--r--. 1 hui hui 17 9月 26 19:41 part-r-00000-rw-r--r--. 1 hui hui 0 9月 26 19:41 _SUCCESS#查看woutput目录的part-r-00000文件[hui@hadoop101 hadoop-3.1.3]$ cat woutput/part-r-00000aa 1abc 2bbb 1
(4.3)完全分布式集群运行模式:(开发重点)
前提准备:便于服务器间文件传输及访问
(参考:Linux虚拟机_huivictor的博客-CSDN博客)
(将jdk、hadoop解压文件及环境配置文件传输到其它集群服务器)
文件传输:使用scp(拷贝)、rsync(同步)命令进行文件传输
xsyns文件分发脚本:循环复制文件到所有节点的相同目录下
(循环将文件传给各个服务器)
服务器间免密登录:无需输入密码,即可登录其它服务操作其它服务器(ssh免密登录)
(1)hadoop集群文件配置:
集群规划:
NameNode 和 SecondaryNameNode 不要装在同一台服务器。
ResourceManager也很消耗内存,不要和 NameNode、SecondaryNameNode
不要装在同一台服务器。
如图:集群规划节点分布图
配置文件说明:默认和自定义配置文件两种
如图:
自定义文件配置:在hadoop-3.1.3/etc/hadoop目录下
(1.1)编辑core-site.xml文件:
添加内容如下:
<configuration><!-- 指定 NameNode 的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop101:8020</value> <!-- <hadoop的一个内部通讯地址 --></property><!-- 指定 hadoop 数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.1.3/data</value></property><!-- 配置 HDFS 网页登录使用的静态用户为 hui --><property><name>hadoop.http.staticuser.user</name><value>hui</value></property></configuration>
命令操作:
#编辑core-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/core-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/core-site.xml
(1.2)编辑hdfs-site.xml文件:
添加内容如下:
<configuration><!-- nn web 端访问地址--><property><name>dfs.namenode.http-address</name><value>hadoop101:9870</value><!-- 暴露给外部web端访问地址--></property><!-- 2nn web 端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop103:9868</value></property></configuration>
命令操作:
#编辑hdfs-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/hdfs-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/hdfs-site.xml
(1.3)编辑yarn-site.xml文件:
添加内容如下:
<configuration><!-- 指定 MR 走 shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定 ResourceManager 的地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop102</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></configuration>
命令操作:
#编辑yarn-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/yarn-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/yarn-site.xml
(1.4)编辑mapred-site.xml文件:
添加内容如下:
<configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
命令操作:
#编辑mapred-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/mapred-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml
(1.5)分发文件:
将101服务器配置好hadoop的文件通过xsync脚本分发到集群其它服务器
命令操作:
#分发文件(xsync.sh)[hui@hadoop101 hadoop-3.1.3]$ xsync etc/hadoop#查看其它服务器是否收到文件[hui@hadoop102 hadoop-3.1.3]$ cat etc/hadoop/core-site.xml[hui@hadoop103 hadoop-3.1.3]$ cat etc/hadoop/core-site.xml
(2)hadoop群起集群:
编辑内容如下:
(注:内容不允许有空个或 空行,配置内容为集群服务器 映射名称 或 IP)
hadoop101hadoop102hadoop103
命令操作:
#编辑群起集群的workers文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/workers#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/workers#分发文件(xsync.sh)[hui@hadoop101 hadoop-3.1.3]$ xsync etc/hadoop/workers#查看其它服务器是否收到文件[hui@hadoop102 hadoop-3.1.3]$ cat etc/hadoop/workers[hui@hadoop103 hadoop-3.1.3]$ cat etc/hadoop/workers
(3)hadoop启动集群:
命令操作:
#第一次需初始化hadoop集群(在hadoop101服务节点 格式化 NameNode件)[hui@hadoop101 hadoop-3.1.3]$ hdfs namenode -format#查看文件:ll 或 ls#初始化成功,会在hadoop安装目录产生data、logs两个文件[hui@hadoop101 hadoop-3.1.3]$ ll#在hadoop101服务启动集群的HDFS[hui@hadoop101 hadoop-3.1.3]$ sbin/start-dfs.sh#在hadoop102服务启动集群的YARN[hui@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh#查看hadoop101、hadoop102、hadoop103各服务器节点(参考:集群规划节点分布图)[hui@hadoop101 hadoop-3.1.3]$ jps[hui@hadoop102 hadoop-3.1.3]$ jps[hui@hadoop103 hadoop-3.1.3]$ jps
Web 端查看 HDFS 的 NameNode:(HDFS 数据存储界面)
浏览器输入:http://hadoop101:9870/,查看存储 HDFS 上存储的数据信息
Web 端查看 YARN 的 ResourceManager(YARN 资源调度界面)
浏览器输入:http://hadoop102:8088/,查看 YARN 上运行的 Job 信息
(4)hadoop集群基本测试:上传文件到hadoop集群
命令操作:
#查看文件:ll 或 ls[hui@hadoop101 hadoop-3.1.3]$ ll#上传小文件#在hadoop集群上创建winput目录[hui@hadoop101 hadoop-3.1.3]$ hadoop fs -mkdir /winput#上传本地winput目录中word.txt文件(/winput:上传至hadoop集群winput目录)[hui@hadoop101 hadoop-3.1.3]$ hadoop fs -put winput/word.txt /winput#上传大文件#上传software目录中jdk压缩包(/:上传至hadoop集群根目录)[hui@hadoop101 hadoop-3.1.3]$ hadoop fs -put /opt/software/jdk-8u331- linux-x64.tar.gz /
浏览器输入:http://hadoop101:9870/explorer.html
(可看到:有一行 wcinput 文件信息,点击一下winput)
刷新浏览器:http://hadoop101:9870/explorer.html
(可看到:有一行 word.txt 文件信息)
数据存于hadoop集群位置==> DataNode节点hadoop集群存放数据位置参考此目录:/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-73686039-192.168.10.101-1663830882077/current/finalized/subdir0/subdir0在subdir0目录中的文件:由数据上传顺序可知如下(先不用管名字,看文件内容即可)blk_1073741825(word.txt文件数据)查看文件:cat blk_1073741825(word.txt文件数据)blk_1073741825_1001.metablk_1073741826(jdk部分数据)blk_1073741826_1002.metablk_1073741827(jdk部分数据)blk_1073741827_1003.meta拼接文件:(追加文件)cat blk_1073741826 >> tem.tar.gzcat blk_1073741827 >> tem.tar.gz解压文件:tar -zxvf tem.tar.gz查看文件:ll jdk目录
下载文件:从hadoop集群中下载文件
#从hadoop集群下载jdk压缩包文件(./:当前目录)[hui@hadoop101 hadoop-3.1.3]$ hadoop fs -get /jdk-8u331-linux-x64.tar.gz ./#查看下载文件:ll 或 ls[hui@hadoop101 hadoop-3.1.3]$ ll
(5)hadoop集群高可用:
(配置的是三台集群服务器,注:如出现第四台服务器,也仅使用其中三台)
查看浏览器:http://hadoop101:9870/explorer.html(HDFS 数据存储界面)
数据行表头有 Replication 属性,此处值为3,则表有三个副本,即配置集群中的服务
器都有存储HDFS 数据。
进入hadoop102数据存储目录:(查看是否有存储文件)cd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-73686039-192.168.10.101-1663830882077/current/finalized/subdir0/subdir0/
(6)执行 wordcount 程序:上传至hadoop集群
执行wordcount程序报如下错误:
错误1:
Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
Please check whether your etc/hadoop/mapred-site.xml contains the below configuration
编辑mapred-site.xml文件:
添加内容如下:
<configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 -->......<!-- hadoop运行环境配置-解决执行 wordcount 程序错误 --><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>
错误2:/bin/bash: /bin/java: No such file or directory
编辑hadoop-env.sh文件:
添加内容如下:
#配置 JAVA_HOME 环境export JAVA_HOME=/opt/module/jdk1.8.0_331
命令操作:
#执行 wordcount 程序(上传至hadoop集群)[hui@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-3.1.3.jar wordcount /winput /woutput#执行wordcount程序报错#错误1-解决方案如下:#编辑mapred-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/mapred-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml#错误2-解决方案如下:(注:集群中其它服务器都执行一下软连接命令)#设置/bin/java软连接[hui@hadoop101 hadoop-3.1.3]$ sudo ln -s /opt/module/jdk1.8.0_331/bin/java /bin/java#编辑hadoop-env.sh文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/hadoop-env.sh#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/hadoop-env.sh#分发修改文件(xsync.sh)[hui@hadoop101 hadoop-3.1.3]$ xsync etc/hadoop/#查看其它服务器是否收到修改文件[hui@hadoop102 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml[hui@hadoop103 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml#停止hadoop集群的HDFS、YARN服务[hui@hadoop101 hadoop-3.1.3]$ sbin/stop-dfs.sh[hui@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh#重启hadoop集群的HDFS、YARN服务[hui@hadoop101 hadoop-3.1.3]$ sbin/start-dfs.sh[hui@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh#查看hadoop101、hadoop102、hadoop103各服务器节点[hui@hadoop101 hadoop-3.1.3]$ jps[hui@hadoop102 hadoop-3.1.3]$ jps[hui@hadoop103 hadoop-3.1.3]$ jps#再次执行 wordcount 程序(上传至hadoop集群)[hui@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-3.1.3.jar wordcount /winput /woutput
(7)hadoop集群崩溃解决:data文件不小心删除 或 其它问题 导致集群不可用的解决方案
命令操作:
#第一步:停止hadoop集群所有服务[hui@hadoop101 hadoop-3.1.3]$ sbin/stop-dfs.sh[hui@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh#第二步:删除所有集群服务hadoop安装目录中的data、logs文件[hui@hadoop101 hadoop-3.1.3]$ rm -rf data/ logs/[hui@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/[hui@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/#第三步:重新初始化hadoop集群[hui@hadoop101 hadoop-3.1.3]$ hdfs namenode -format#第四步:重启hadoop集群所有服务[hui@hadoop101 hadoop-3.1.3]$ sbin/start-dfs.sh[hui@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh#第五步:查看各服务器节点是否正常启动[hui@hadoop101 hadoop-3.1.3]$ jps[hui@hadoop102 hadoop-3.1.3]$ jps[hui@hadoop103 hadoop-3.1.3]$ jps
总结:为何删除data、logs,因为每次启动集都有一个固定版本号对应,而这个版本号信 息存于data目录中,在current目录有一个VERSION文件。参考此目录:/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-184433685- 192.168.10.101-1663842476125/current查看此文件:cat VERSION参考内容如:#Fri Sep 23 13:20:09 CST 2022namespaceID=1769509812(hadoop集群服务唯一标识ID)cTime=1663842476125blockpoolID=BP-184433685-192.168.10.101-1663842476125layoutVersion=-57
(8)hadoop集群配置历史服务器:
编辑mapred-site.xml文件:
添加内容:
<configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 -->......<!-- hadoop运行环境配置-解决执行 wordcount 程序错误 -->......<!-- 历史服务器端地址 --><property><name>mapreduce.jobhistory.address</name><value>hadoop101:10020</value></property><!-- 历史服务器 web 端地址 --><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop101:19888</value></property></configuration>
命令操作:
#编辑mapred-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/mapred-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml#分发文件:分发修改内容到集群其它服务器(xsync.sh)[hui@hadoop101 hadoop-3.1.3]$ xsync etc/hadoop/mapred-site.xml#查看集群其它服务是否收到修改内容[hui@hadoop102 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml[hui@hadoop103 hadoop-3.1.3]$ cat etc/hadoop/mapred-site.xml#启动历史服务器[hui@hadoop101 hadoop-3.1.3]$ bin/mapred --daemon start historyserver#查看历史服务器节点(会有个JobHistoryServer节点)[hui@hadoop101 hadoop-3.1.3]$ jps
测试:
浏览器输入:http://hadoop101:9870/, 删除woutput文件
重新执行wordcount程序,上传至hadoop集群
浏览器输入:http://hadoop102:8088/,查看 YARN 上运行的 Job 信息
History(点击)
(9)hadoop集群日志聚集功能配置:
编辑yarn-site.xml文件:
添加内容:
<configuration><!-- 指定 MR 走 shuffle -->......<!-- 指定 ResourceManager 的地址-->......<!-- 环境变量的继承 -->......<!-- 开启日志聚集功能 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- 设置日志聚集服务器地址 --><property> <name>yarn.log.server.url</name> <value>http://hadoop101:19888/jobhistory/logs</value></property><!-- 设置日志保留时间为 7 天 --><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property></configuration>
命令操作:
#编辑yarn-site.xml文件[hui@hadoop101 hadoop-3.1.3]$ vim etc/hadoop/yarn-site.xml#查看文件[hui@hadoop101 hadoop-3.1.3]$ cat etc/hadoop/yarn-site.xml#分发文件:分发修改内容到集群其它服务器(xsync.sh)[hui@hadoop101 hadoop-3.1.3]$ xsync etc/hadoop/yarn-site.xml#查看集群其它服务是否收到修改内容[hui@hadoop102 hadoop-3.1.3]$ cat etc/hadoop/yarn-site.xml[hui@hadoop103 hadoop-3.1.3]$ cat etc/hadoop/yarn-site.xml#单个停止JobHistoryServer历史服务器节点[hui@hadoop101 hadoop-3.1.3]$ mapred --daemon stop historyserver #停止并重启hadoop集群的YARN服务[hui@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh[hui@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh#查看hadoop102服务器节点[hui@hadoop102 hadoop-3.1.3]$ jps#重启历史服务器[hui@hadoop101 hadoop-3.1.3]$ bin/mapred --daemon start historyserver#查看历史服务器节点[hui@hadoop101 hadoop-3.1.3]$ jps#执行wordcount程序上传文件测试:(查看YARN工作行,点击logs,即可查看日志)[hui@hadoop101 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput2
(10)hadoop集群启动/停止方式总结:
各模块分别启动:
start-dfs.sh(整体启动HDFS)、start-yarn.sh(整体启动YARN)
各服务组件逐一启动:
hdfs --daemon start/stop namenode / datanode / secondarynamenode
yarn --daemon start/stop resourcemanager / nodemanager
(11)Hadoop 集群常用脚本:
Hadoop 集群群启、群停
编辑myhadoop.sh文件:
编辑内容如下:
#!/bin/bash if [ $# -lt 1 ]thenecho "No Args Input..."exit ; ficase $1 in "start")echo " =================== 启动 hadoop 集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop")echo " =================== 关闭 hadoop 集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *)echo "Input Args Error..." ;; esac
命令操作:
#查看文件:ll 或 ls[hui@hadoop101 ~]$ ll总用量 0lrwxrwxrwx. 1 hui hui 3 9月 21 21:42 bbb -> aaa(软引用表现)drwxrwxr-x. 2 hui hui 55 9月 23 17:43 bin(前面编写xsync脚本已创建的目录)drwxr-xr-x. 2 hui hui 6 9月 20 17:57 公共(桌面版才有此目录,最小化版没有)......#查看当前所在路径[hui@hadoop101 ~]$ pwd/home/hui#编辑myhadoop.sh脚本文件[hui@hadoop101 ~]$ sudo vim bin/myhadoop.sh#查看文件[hui@hadoop101 ~]$ cat bin/myhadoop.sh#授权脚本文件,使其变为可执行文件(授权成功,脚本文件会变成绿色)[hui@hadoop101 ~]$ chmod 777 bin/myhadoop.sh#使用hadoop集群群启/群停脚本(最小版需加上myhadoop.sh后缀名执行)[hui@hadoop101 ~]$ myhadoop start/stop#分发脚本文件到集群其它服务器(xsync.sh)[hui@hadoop101 ~]$ xsync bin/#查看hadoop集群其它服务是否收到脚本文件[hui@hadoop102 ~]$ ll bin/[hui@hadoop103 ~]$ ll bin/
单服务查看所有服务节点脚本:
编辑jpsall.sh文件:
编辑内容如下:
#!/bin/bashfor host in hadoop101 hadoop102 hadoop103doecho =============== $host ===============ssh $host jpsdone
命令操作:
#编辑jpsall.sh脚本文件[hui@hadoop101 ~]$ sudo vim bin/jpsall.sh#查看文件[hui@hadoop101 ~]$ cat bin/jpsall.sh#授权脚本文件,使其变为可执行文件(授权成功,脚本文件会变成绿色)[hui@hadoop101 ~]$ chmod 777 bin/jpsall.sh#集群中任意一个服务即可查看所有服务节点(最小版需加上jpsall.sh后缀名执行)[hui@hadoop101 ~]$ jpsall#分发脚本文件到集群其它服务器(xsync.sh)[hui@hadoop101 ~]$ xsync bin/#查看hadoop集群其它服务是否收到脚本文件[hui@hadoop102 ~]$ ll bin/[hui@hadoop103 ~]$ ll bin/
(12)hadoop集群时间同步:服务能连外网,则不用同步时间
(注:一般实际开发中,无需配置,会影响性能,因为服务会连外网更新时间)
编辑ntp.conf 文件:
配置内容如下:
#hadoop集群时间同步配置1:hadoop集群网段,使此网段中服务器间互访restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap#hadoop集群时间同步配置2:去除服务访问外部网络,使用上述配置1中的内部网段#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#hadoop集群时间同步配置3:#当该节点丢失网络连接,#依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步server 127.127.1.0fudge 127.127.1.0 stratum 10
编辑ntpd文件:SYNC_HWCLOCK=yes(让硬件时间与系统时间一起同步)
在其他机器配置 1 分钟与时间服务器同步一次:sudo crontab -e
编写定义任务:*/1 * * * * /usr/sbin/ntpdate hadoop101
命令操作:
#切换root账号[hui@hadoop101 ~]$ su root密码:#查看ntpd状态[root@hadoop101 hui]$ systemctl status ntpd#开启ntpd[root@hadoop101 hui]$ systemctl start ntpd#开机自启ntpd[root@hadoop101 hui]$ systemctl is-enabled ntpd#编辑ntp.conf文件[root@hadoop101 hui]$ vim /etc/ntp.conf #查看文件[root@hadoop101 hui]$ cat /etc/ntp.conf #编辑ntpd文件[root@hadoop101 hui]$ vim /etc/sysconfig/ntpd#查看文件[root@hadoop101 hui]$ cat /etc/sysconfig/ntpdSYNC_HWCLOCK=yes#关闭集群中其它服务的ntpd:先断开与外网连接 [root@hadoop102 hui]$ systemctl stop ntpd[root@hadoop102 hui]$ systemctl disable ntpd[root@hadoop103 hui]$ systemctl stop ntpd[root@hadoop103 hui]$ systemctl disable ntpd#在其他机器配置 1 分钟与时间服务器同步一次[root@hadoop102 hui]$ sudo crontab -e#退出root账号[root@hadoop101 hui]$ exit[root@hadoop102 hui]$ exit#查看hadoop101、hadoop102服务日期时间[hui@hadoop101 ~]$ date[hui@hadoop102 ~]$ date#测试日期时间同步#更改hadoop102服务日期时间[hui@hadoop102 ~]$ sudo date -s "2023-11-11 11:11:11"#查看hadoop102服务日期时间[hui@hadoop102 ~]$ date2023年 11月 11日 星期六 11:11:11 CST#等待1分钟后再查看hadoop102服务日期时间,是否被hadoop101服务同步时间[hui@hadoop102 ~]$ date