1.概念
1.Hadoop是什么
分布式系统基础架构
2.主要解决,海量数据的存储和海量数据的分析计算问题
Hadoop生态圈
2.Hadoop发展历史
Doug Cutting,为了实现与Google类似的全文搜索功能,他在Lucene框架基础上进行优化升级,查询引擎和索引引擎
2.对于海量数据的场景,Lucene框架面对与Google同样的困难,存储海量数据困难,检索海量速度慢。
3.Google是Hadoop的思想之源(Google在大数据方面的三篇论文)
1.GFS → HDFS
2.Map-Reduce → MR
3.BigTable → HBase
3.三大发行版本
1.Apache(2006年)
2.Cloudera(2008年)
3.Hortonworks(2011)
4.Hadoop的优势(4高)
1.高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
2.高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点(动态增加或删除)
并行工作的,以加快任务处理速度
4.高容错性:能够自动将失败的任务重新分配
5.Hadoop的组成
版本 | 辅助工具 | 数据存储 | 计算 | 资源调度 |
Hadoop1.x | Common | HDFS | MapReduce | MapReduce |
Hadoop2.x | Common | HDFS | MapReduce | Yarn |
Hadoop3.x | Common | HDFS | MapReduce | Yarn |
1.HDFS架构概述(分布式文件系统)
元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),*以及每个文件的块列表和块所在的DataNode等
存储文件块数据,以及块数据的校验和
3.Secondary NameNode(2NN):每隔一段时间对NameNode元数据备份
2.YARN架构概述
1.ResourceManager (RM):整个集群资源(内存、CPU等)的老大
2.NodeManager (NM):单个节点服务器资源老大
3.ApplicationMaster (AM):单个任务运行的老大
如内存、CPu、磁盘、网络等
5.说明
1.客户端可以有多个
2.集群上可以运行多个ApplicationMaster
3.每个NodeManager上可以有多个Container
3.MapReduce架构概述
1.Map阶段并行处理输入数据
2.Reduce阶段对Map结果进行汇总
6.大数据技术生态体系
1.Sqoop:Sqoop是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如:MysQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中
2.Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据
3.Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统
4.Spark: Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop 上存储的大数据进行计算
5.Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多
6.Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统
7.Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库
8.Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9.ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等
7.推荐系统案例
2.环境准备
1.模板虚拟机的准备
1.安装centos7的linux虚拟机
2.配置IP和主机名称(root用户下)
1.ip:vim /etc/sysconfig/network-scripts/ifcfg-ens33
1.IPADDR=IP地址
2.GATEWAY=网关
2.DNS1=和网关一样
2.主机名称:vim /etc/hostname
3.主机映射:vim /etc/hosts
1.IP 主机名称
3.Xshell远程访问
1.文件 → 新建 → 输入地址和名字 → 连接
4.本地映射
1.C:\Windows\System32\drivers\etc 找hosts文件添加
5.配置虚拟机
1.测试网络:ping www.baidu.com
2.添加软件仓库
1.yum install -y epel-release
2.如果安装的是最小系统版,还需要安装如下工具:
1.yum install -y net-tools(工具包集合)
2.yum install -y vim(编辑器)
3.防火墙
1.关闭防火墙:systemctl stop firewalld
2.关闭防火墙开机自启:systemctl disable firewalld.service
4.创建用户,并修改密码
1.useradd xxx(创建用户)
2.passwd xxx(修改密码)
5.修改用户权限
1.vim /etc/sudoers
2.找到 Allow root to run any commands anywhere 下的一行命令
3.复制到 Allow people in group wheel to run all commands ,并且设置切换时不需要密码(完成后,:wq!保存)
6.在/opt目录下创建文件夹,并修改所属组
1.cd /opt/
2.sudo rm -rf rh/
3.sudo mkdir module
4.sudo mkdir software
5.sudo chown hadoop100:hadoop100 module/ software/
7.卸载自带的JDK:rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
1.rpm -qa:查询所安装的所有rpm软件包
· 2.grep -i:忽略大小写
3.xargs -n1:表示每次只传递一个参数
4.rpm -e --nodeps:强制卸载软件
8.重启虚拟机:reboot
2.克隆
1.右键点击需要克隆的虚拟机 → 管理 → 克隆 → 创建完整克隆
2.修改配置(ip和主机名称)
3.Xshell配置
3.安装JDK(以jdk-8u212为例)
1.用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面
2.在 Linux 系统下的 opt 目录中查看软件包是否导入成功:ls /opt/software/
3.解压 JDK 到/opt/module 目录下:tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
4.配置 JDK 环境变量
1.新建/etc/profile.d/my_env.sh 文件:sudo vim /etc/profile.d/my_env.sh
2.添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
3.保存后退出::wq
4.source 一下/etc/profile 文件,让新的环境变量 PATH 生效:source /etc/profile
5.测试 JDK 是否安装成功:java -version
4.安装Hadoop(以hadoop-3.1.3为例)
Hadoop 下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
1.用XShell文件传输工具将hadoop的jar包导入到opt目录下面的software文件夹下面
2.进入到Hadoop安装包路径下:cd /opt/software/
3.解压安装文件到/opt/module下面:tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
4.查看是否解压成功:ls /opt/module/hadoop-3.1.3
5.将Hadoop添加到环境变量
1.获取Hadoop安装路径(pwd),并进入(cd xxx)
2.开/etc/profile.d/my_env.sh文件:sudo vim /etc/profile.d/my_env.sh,在my_env.sh文件末尾添加如下内容:(shift+g)
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
3.保存并退出::wq
6.让修改后的文件生效:source /etc/profile
7.注意:重启(如果Hadoop命令不能用再重启虚拟机):sudo reboot
5.hadoop目录结构
1.查看Hadoop目录结构(进入hadoop中):ll
bin |
etc |
include |
lib |
libexec |
LICENSE.txt |
NOTICE.txt |
README.txt |
sbin |
share |
2.重要目录
1.bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
2.etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
3.lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
4.sbin目录:存放启动或停止Hadoop相关服务的脚本
5.share目录:存放Hadoop的依赖jar包、文档、和官方案例
3.Hadoop运行模式
1.Hadoop官方网站:http://hadoop.apache.org/
2.Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式
1.本地模式:单机运行,只是用来演示一下官方案例。生产环境不用
2.伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用
3.完全分布式模式:多台服务器组成分布式环境。生产环境使用
1.创建在hadoop-3.1.3文件下面创建一个wcinput文件夹:mkdir wcinput
2.在wcinput文件下创建一个word.txt文件:cd wcinput/
3.编辑word.txt文件:vim word.txt(随便写内容,完成后:wq保存退出)
hadoop
yarn
hadoop
mapreduce
4.回到Hadoop目录/opt/module/hadoop-3.1.3
5.执行程序:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput(输出路径不存在才能执行)
6.查看结果:cat wcoutput/part-r-00000(结果如下)
hadoop 2
mapreduce 1
yarn 1
4.完全分布式运行模式(开发重点)
1.分析
关闭防火墙、静态IP、主机名称)
2.安装JDK并配置环境变量
3.安装Hadoop并配置环境变量
4.配置集群
5.单点启动
6.配置ssh
7.群起并测试集群
2.虚拟机准备
3.编写分发脚本xsync
1.scp(secure copy)安全拷贝
1.scp定义:scp可以实现服务器与服务器之间的数据拷贝。(fromserver1to server2)
2.基本语法:scp -r $pdir/$fname $user@$host:$pdir/$fname(命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称)
2.rsync远程同步工具
1.rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
2.rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
3.基本语法:rsync- av $pdir/$fname $user@$host:$pdir/$fname(命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称)
选项参数说明 | |
选项 | 功能 |
-a | 归档拷贝 |
-v | 显示复制过程 |
3.xsync集群分发脚本
1.在/home/xxx/bin目录下创建xsync文件(xxx为根目录)
1.cd /home/xxx
2.mkdir bin
3.cd bin
4.vim xsync
2.编写脚本
3.修改脚本xsync具有执行权限:chmod 777 xsync
./bin/xsync /etc/profile.d/my_env.sh(注意:如果用了sudo,那么xsync一定要给它的路径补全)
5.让环境变量生效:在被分发的主机上:source /etc/profile
4.ssh免密登录配置
1.原理
2.生成公钥和私钥
1.cd /home/xxx/.ssh(如果找不到,就ssh一下其他主机)
2.ssh-keygen -t rsa,然后敲三次回车
3.将公钥拷贝到要免密登录的目标机器上
1.ssh-copy-id 目标主机
注意:(只有配置了的账户才可以免密登录,root没有配置的话也不可以)
1.还需要在hadoop103上采用xxx账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
2.还需要在hadoop104上采用xxx账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
3.还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
3..ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
5.集群配置
1.集群部署规划
1.NameNode和SecondaryNameNode不要安装在同一台服务器(都比较耗内存)
2.ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode | SecondaryNameNode | |
DataNode | DataNode | DataNode | |
YARN | ResourceManager | ||
NodeManager | NodeManager | NodeManager |
2.配置文件说明
1.Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值
2.默认配置文件
要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
3.自定义配置文件
配置文件 | 路径 |
core-site.xml | $HADOOP_HOME/etc/hadoop |
hdfs-site.xml | |
yarn-site.xml | |
mapred-site.xml |
3.配置集群
1.核心配置文件(配置core-site.xml)
1.cd $HADOOP_HOME/etc/hadoop
2.vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定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>
</configuration>
2.HDFS配置文件(配置hdfs-site.xml) → 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>hadoop102:9870</value>
</property>
<!--2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
3.YARN配置文件(配置yarn-site.xml) → 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>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>
</configuration>
4.MapReduce配置文件(配置mapred-site.xml) → 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>
</configuration>
4.在集群上分发配置好的Hadoop配置文件:xsync /opt/module/hadoop-3.1.3/etc/hadoop/
5.去其他主机上查看文件分发情况:cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
6.群起集群
1.配置workers(以hadoop-3.1.3为例)
vim/opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
xsync /opt/module/hadoop-3.1.3/etc
2.启动集群(在hadoop-3.1.3目录下)
1.如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format
启动HDFS
sbin/start-dfs.sh
3.在配置了ResourceManager的节点(hadoop103)启动YARN
sbin/start-yarn.sh
4.Web端查看HDFS的NameNode
1.浏览器中输入:http://hadoop102:9870
2.查看HDFS上存储的数据信息
5.Web端查看YARN的ResourceManager
1. 浏览器中输入:http://hadoop103:8088
2.查看YARN上运行的Job信息
3.集群基本测试
1.上传文件到集群
1.上传小文件
1.hadoop fs -mkdir /input
2.fs -put $HADOOP_HOME/wcinput/word.txt /input
2.上传大文件
hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
2.上传文件后查看文件存放在什么位置
1. 查看HDFS文件存储路径
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
2.查看HDFS在磁盘存储文件内容
cat blk_xxx
3.拼接(subdir0目录下)
1.数据
blk_1073741836
blk_1073741836_1012.meta
blk_1073741837
blk_1073741837_1013.meta
2.cat blk_1073741836 >> tmp.tar.gz
>> tmp.tar.gz
tar -zxvf tmp.tar.gz
4.下载
hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
5.执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
7.配置历史服务器(为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下) → hadoop目录下
1.配置mapred-site.xml
vim mapred-site.xml
在该文件里面增加如下配置:
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
<!--历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!--历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2.分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3.在hadoop102启动历史服务器
mapred --daemon start historyserver
4.查看历史服务器是否启动
jps
5.查看JobHistory:http://hadoop102:19888/jobhistory
8.配置日志的聚集(hadoop目录下)
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试
注意:开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryServer
1.配置yarn-site.xml
vim 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>
2.分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3.关闭NodeManager、ResourceManager和HistoryServer
1.sbin/stop-yarn.sh
2.mapred --daemon stop historyserver
4.启动NodeManager、ResourceManage和HistoryServer
1.start-yarn.sh
2.mapred --daemon start historyserver
5.删除HDFS上已经存在的输出文件
hadoopfs -rm -r /output
6.执行WordCount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
7.查看日志
1.历史服务器地址
http://hadoop102:19888/jobhistory
2.历史任务列表
3.查看任务运行日志
4.运行日志详情
9.集群启动/停止方式总结
1.各个模块分开启动/停止(配置ssh是前提)常用
1.整体启动/停止HDFS:start-dfs.sh/stop-dfs.sh
2.整体启动/停止YARN:start-yarn.sh/stop-yarn.sh
2.各个服务组件逐一启动/停止
1.分别启动/停止HDFS组件:
hdfs --daemon start/stop namenode/datanode/secondarynamenode
2.启动/停止YARN:
yarn --daemon start/stop resourcemanager/nodemanager
10.编写Hadoop集群常用脚本
1.Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
1.cd /home/atguigu/bin
2.vim myhadoop.sh
3.输入如下内容:
#!/bin/bash
if [ $# -lt1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动hadoop集群 ==================="
echo " --------------- 启动hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭hadoop集群 ==================="
echo " --------------- 关闭historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
4.保存后退出,然后赋予脚本执行权限
chmod +x myhadoop.sh
2.查看三台服务器Java进程脚本:jpsall
1.cd /home/atguigu/bin
2.vim jpsall
3.输入如下内容:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
4.保存后退出,然后赋予脚本执行权限
chmod +x jpsall
3.分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
xsync /home/atguigu/bin/
11.常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
常用的配置文件 | |
Hadoop2.x | core-site.xml |
hdfs-site.xml | |
yarn-site.xml | |
mapred-site.xml | |
slaves | |
Hadoop3.x | core-site.xml |
hdfs-site.xml | |
yarn-site.xml | |
mapred-site.xml | |
workers |
12.集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步
1.需求
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2.时间服务器配置(必须root用户)
1.查看所有节点ntpd服务状态和开机自启动状态
1.sudo systemctl statusntpd
2.sudo systemctl start ntpd
3.sudos ystemctlis-enabled ntpd
2.修改hadoop102的ntp.conf配置文件
sudo vim /etc/ntp.conf
修改内容如下:
10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodifynotraprestrict 192.168.10.0 mask 255.255.255.0 nomodifynotrap
2.修改2(集群在局域网中,不使用其他互联网上的时间)
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 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
3.修改hadoop102的/etc/sysconfig/ntpd文件
sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
4.重新启动ntpd服务
sudo systemctl start ntpd
5.设置ntpd服务开机启动
sudo systemctl enable ntpd
3.其他机器配置(必须root用户)
1.关闭所有节点上ntp服务和自启动
1.sudo systemctl stop ntpd
2.sudo systemctl disable ntpd
3.sudo systemctl stop ntpd
4.sudo systemctl disable ntpd
2.在其他机器配置1分钟与时间服务器同步一次
sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
3.修改任意机器时间
sudo date -s "2021-9-11 11:11:11"
4.1分钟后查看机器是否与时间服务器同步
sudo date
4.常见错误的解决方案
1.防火墙没关闭、或者没有启动YARN
INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
2.主机名称配置错误
3.IP地址配置错误
4.ssh没有配置好
5.root用户和atguigu两个用户启动集群不统一
6.配置文件修改不细心
7.不识别主机名称
java.net.UnknownHostException: hadoop102: hadoop102
at java.net.InetAddress.getLocalHost(InetAddress.java:1475)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
解决办法:
1.在/etc/hosts文件中添加192.168.10.102 hadoop102
2.主机名称不要起hadoop hadoop000等特殊名称
8.DataNode和NameNode进程同时只能工作一个
9.执行命令不生效,粘贴Word中命令时,遇到-和长–没区分开。导致命令失效
解决办法:尽量不要粘贴Word中代码
10.jps发现进程已经没有,但是重新启动集群,提示进程已经开启
原因是在Linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群
11.jps不生效
原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件
12.8088端口连接不上
1.cat /etc/hosts
2.注释掉如下代码
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 hadoop102