尚硅谷Hadoop 02框架搭建

目录

    • 1.概念
        • 1.1 Hadoop是什么
        • 1.2 Hadoop发展历史
        • 1.3 Hadoop发行版本
        • 1.4 Hadoop优势及特点
        • 1.5 Hadoop组成(面试重点)
            • 一、Hadoop Distributed File System(HDFS)
            • 二、Yet Another Resource Negotiator(Yarn)
            • 三、Map Reduce框架
            • 四、HDFS、Yarn、Map Reduce三者关系
        • 1.6 大数据技术生态体系
        • 1.7 推荐系统案例
    • 2. 环境准备
        • 2.1 模板虚拟机准备
        • 2.2 克隆三台虚拟机
        • 2.3 安装JDK、Hadoop
    • 3. Hadoop生产集群搭建
        • 3.1 本地模式 (WordCount)
        • 3.2 完全分布式集群(核心)
            • 3.2.1 虚拟机准备
            • 3.2.2 编写集群分发脚本 xsync
            • 3.2.3 SSH 无密登录配置
            • 3.2.4 集群配置
            • 3.2.5 群起集群
            • 3.2.6 配置历史服务器
            • 3.2.7 配置日志的聚集
            • 3.2.8 集群启动/停止方式总结
            • 3.2.9 编写 Hadoop 集群常用脚本
            • 3.2.10 常用端口号说明(常见面试题一)
            • 3.2.11 集群时间同步
    • 4. 运行过程出现异常

1.概念

1.1 Hadoop是什么

  • 分布式系统:多台服务器共同完成一项任务

  • Hadoop是Apache开发的分布式体统基础架构,主要解决海量数据的存储分析计算

  • 广义来说,Hadoop指Hadoop生态圈,包括Hive、Hbase等

![在这里插入图片描述](https://img-blog.csdnimg.cn/2021031710532148.png

1.2 Hadoop发展历史

在这里插入图片描述
在这里插入图片描述

1.3 Hadoop发行版本

Apache Hadoop、Cloudera Hadoop、Hortonworks Hadoop(已被收购)

1.4 Hadoop优势及特点

  • 高可靠性:hadoop底层维护多个数据副本,即使一个副本发生故障,也不会导致数据丢失

  • 高扩展性:在集群间分配任务数据,可方便扩展数以千计的节点(双11期间,动态增加服务器)

  • 高效性:基于MapReduce并行工作
    关于并发并行线程进程

  • 高容错性:能够将失败的任务重新分配

  • 成本低:hadoop采用廉价的计算机集群,普通的用户也可以pc机搭建环境

  • 运行在linux平台上,hadoop是基于java语言开发的,可以较好的运行在linux的平台上

  • 支持多种编程语言,如:C++等

1.5 Hadoop组成(面试重点)

尚硅谷Hadoop 02框架搭建_第1张图片

资源调度:存在哪,由谁来计算,管理CPU和内存

一、Hadoop Distributed File System(HDFS)
  • Boss----NameNode(NN):(主服务器)存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),每个文件的快列表和块所在的DataNode等
  • worker—DataNode(DN):(每个服务器是一个DataNode,具体存储数据)在本地文件系统存储文件快数据,块数据的校验和
  • secretary—SecondaryNameNode(2NN):(辅助NameNode)每隔一段时间,对NameNode元数据进行备份
二、Yet Another Resource Negotiator(Yarn)
  • 另一种资源协调者,是Hadoop的资源管理器,主要管理CPU和内存

  • -client:多个客户端提交程序(Job submission),然后Yarn根据用户请求提供运算资源

  • ResourceManager(RM): 整个集群资源(内存、CPU等)的老大

  • NodeManager(NM):单个节点服务器资源老大,负责每一个具体应用程序的调度和协调

  • ApplicationMaster(AM):单个任务运行的老大
    尚硅谷Hadoop 02框架搭建_第2张图片

  • Container容器:相当于一台独立的服务器,里面封装了任务运行所需的资源,每个NodeManager里虚拟出很多服务器,比如把自己的内存和CPU分成100份从而虚拟出100台服务器,每个Container内存1-8G,至少一个CPU

  • Yarn工作原理:首先数据上传到集群中.然后将写好的程序打成架包通过命令提交MR作业.提交到集群后由集群管理者MR开始调度分配资源.到HDFS读取数据执行MapReduce相关进程对数据进行计算

  • 具体流程

    • 步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
    • 步骤2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
    • 步骤3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
    • 步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
    • 步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
    • 步骤6 NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
    • 步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
    • 步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
      参考文章

尚硅谷Hadoop 02框架搭建_第3张图片
上图显示,Application master向RM申请的资源可以跨节点
尚硅谷Hadoop 02框架搭建_第4张图片

三、Map Reduce框架

尚硅谷Hadoop 02框架搭建_第5张图片

  • Map 分
  • Reduce 汇总
四、HDFS、Yarn、Map Reduce三者关系

尚硅谷Hadoop 02框架搭建_第6张图片
step:

  1. client的任务——找15年5月无码视频,向Resource Manager提出请求
  2. RM会找一台节点,开启一个container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster
  3. AM向RM申请资源,便与对相应资源的NodeManager通信,要求它启动任务,于是开启MapTask
  4. 每一个Map task独立工作,在相应的DataNode上检索,最后将结果进行Reduce task汇总,结果写入DataNode,同时将信息汇报给NameNode,secondaryNamenode备份。

1.6 大数据技术生态体系

尚硅谷Hadoop 02框架搭建_第7张图片
Map reduce基于硬盘;spark基于内存
实时计算:storm(即将淘汰)、spark streaming、Flink(流行)
任务调度:多个任务什么时间执行
总体调度:Zookeeper

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:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

1.7 推荐系统案例

尚硅谷Hadoop 02框架搭建_第8张图片
用户行为数据以日志文件形式存在->Flume采集日志->Kafuka缓冲->Flink/spark streaming计算(推荐系统需要实时性)->计算结果后台返回(数据库/文件)->页面展示

2. 环境准备

2.1 模板虚拟机准备

VMware+centos
远程访问工具Xshell+Xftp

模板虚拟机,IP 地址 192.168.10.100
主机名称 hadoop100
内存 4G
硬盘 50G

2.2 克隆三台虚拟机

基于模板机Hadoop100克隆三台虚拟机Hadoop102、Hadoop103、Hadoop104

注意:克隆时,要先关闭hadoop100

还要设置主机名称、IP地址
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop100 ~]# vim /etc/hostname
进入文件按O后可修改
修改完成后按Esc后:wq退出(强制退出:wq!)
ping www.baidu.com
查看是否能连接外网,按Ctrl+C结束查看
以上操作要用管理员账号root实现

2.3 安装JDK、Hadoop

在Hadoop102上安装JDK和Hadoop,然后从拷贝到Hadoop103和Hadoop104

JDK:

  • 在Xshell里cd opt/software

  • 通过上传的方式(Xftp),将安装包传到software文件夹里

  • ll可以看到上传成功
    尚硅谷Hadoop 02框架搭建_第9张图片

  • tar -zxvf+安装包名称+ -C ~/opt/module安装到指定的module文件夹

  • cd jdk1.8.0_212 开始配置环境变量

  • cd /etc/profile.d

  • sudo vim my_env.sh创建一个新的文件

  • 重新进入jdk1.8.0_212输入pwb得到路径`/home/lyr/opt/module/jdk1.8.0_212
    尚硅谷Hadoop 02框架搭建_第10张图片

  • 在my_env.sh文件中输入

#JAVA_HOME
export JAVA_HOME=/home/lyr/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

  • source /etc/profile重新加载里面的文件
  • 安装成功

尚硅谷Hadoop 02框架搭建_第11张图片
Hadoop安装步骤比照JDK
配置环境变量时

#HADOOP_HOME
export HADOOP_HOME=/home/lyr/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

Hadoop的目录

尚硅谷Hadoop 02框架搭建_第12张图片

  • bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本

  • etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件

  • include目录:头文件

  • lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)

  • sbin 目录:存放启动或停止 Hadoop 相关服务的脚本

  • share 目录:存放Hadoop 的依赖 jar 包、文档、和官方案例

3. Hadoop生产集群搭建

Hadoop集群有三种模式
尚硅谷Hadoop 02框架搭建_第13张图片
本地模式:单台服务器(e.g. Hadoop100),数据存储在linux本地磁盘
伪分布式:单台服务器(e.g. Hadoop101),数据存储在HDFS
完全分布式:多台服务器(e.g. Hadoop102,Hadoop103,Hadoop104),数据存储在HDFS

3.1 本地模式 (WordCount)

  • 在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹
    [lyr@hadoop102 hadoop-3.1.3]$ mkdir wcinput
  • 在 wcinput 文件下创建一个 word.txt 文件
    [lyr@hadoop102 hadoop-3.1.3]$ cd wcinput
  • 编辑 word.txt 文件
    [lyr@hadoop102 wcinput]$ vim word.txt
  • 在文件中输入一些单词

ss ss
cls cls
bobo
banzhang
yangge

  • 保存退出::wq

  • 回到 Hadoop 目录/opt/module/hadoop-3.1.3

  • 执行程序
    [lyr@hadoop102 hadoop-3.1.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput

  • 查看结果
    尚硅谷Hadoop 02框架搭建_第14张图片

3.2 完全分布式集群(核心)

  • 准备三台客户机
  • 安装JDK
  • 配置变量环境
  • 安装Hadoop
  • 配置变量环境
  • 配置集群
  • 单点启动
  • 配置ssh
  • 群起并测试集群
3.2.1 虚拟机准备

已经完成

3.2.2 编写集群分发脚本 xsync
  • scp(secure copy)安全拷贝

    scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

    • 基本语法
      scp命令
      -r 递归
      $pdir/$fname要拷贝的文件路径/名称
      $user@$host:$pdir/$fname 目的地用户@主机:目的地路径/名称
    • 案例实操
      前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、/opt/software 两个目录,并且已经把这两个目录修改为lyr:lyr
[lyr@hadoop102	opt]$	sudo chown lyr:lyr   module
  1. 在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103 上。
[lyr@hadoop102 module]$ scp -r jdk1.8.0_212/ lyr@hadoop103:~/opt/module/

(最开始没加~一直失败)

  1. 在 hadoop103 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到
    hadoop103 上。
[lyr@hadoop103 module]$ scp -r lyr@hadoop102:~/opt/module/hadoop-3.1.3  ./
  1. 在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下所有目录拷贝到hadoop104 上。
[lyr@hadoop103 module]$ scp -r lyr@hadoop102:~/opt/module/*   lyr@hadoop104:~/opt/module/
  • rsync 远程同步工具

    rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

    rsync 和 scp 区别:
     用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。所以一般第一次拷贝用scp,后续同步用rsync

    • 基本语法:
      rsync命令
      -av 选项参数(-a 归档拷贝;-v 显示复制过程)
      $pdir/$fname要拷贝的文件路径/名称
      $user@$host:$pdir/$fname目的地用户@主机:目的地路径/名称选项参数说明

    • 案例实操

  1. 删除hadoop103 中/opt/module/hadoop-3.1.3/wcinput
[lyr@hadoop103 hadoop-3.1.3]$ rm -rf wcinput

wcinput删掉了
尚硅谷Hadoop 02框架搭建_第15张图片

  1. 同步hadoop102 中的/opt/module/hadoop-3.1.3 到 hadoop103
[lyr@hadoop102 module]$ rsync -av hadoop-3.1.3/ lyr@hadoop103:~/opt/module/hadoop-3.1.3

wcinput又回来了
尚硅谷Hadoop 02框架搭建_第16张图片

  • xsync 集群分发脚本
    • 需求:循环复制文件到所有节点的相同目录下(在hadoop102某个目录下创建一个文件a,执行完命令,hadoop103和hadoop104相同目录下也有文件a)
    • 需求分析:
      rsync 命令原始拷贝:
      rsync -av /opt/module atguigu@hadoop103:/opt/
      期望脚本:xsync +要同步的文件名称
      期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)关于环境变量
    • 脚本实现
      1. 创建bin文件夹,在bin 目录下创建 xsync 文件
      尚硅谷Hadoop 02框架搭建_第17张图片
      2. 在该文件中编写如下代码;
#!/bin/bash
#1. 判断参数个数,小于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" #-p保证哪怕已经存在也不报错
 					rsync -av $pdir/$fname $host:$pdir
              else
                    echo $file does not exists!
            fi
         done
done
  • 修改脚本 xsync 具有执行权限
[lyr@hadoop102 bin]$ chmod 777 xsync
  • 测试脚本,bin目录复制到了hadoop103,hadoop104
[lyr@hadoop102 ~]$ xsync bin/
  • 将脚本复制到/bin 中,以便全局调用
[lyr@hadoop102 bin]$ sudo cp xsync /bin/
  • 同步环境变量配置(root 所有者)
    注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。让环境变量生效
[lyr@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
  • 让环境变量生效
[lyr@hadoop103 bin]$ source /etc/profile
[lyr@hadoop104 opt]$ source /etc/profile

成功在hadoop104上运行java
尚硅谷Hadoop 02框架搭建_第18张图片

3.2.3 SSH 无密登录配置
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host
ssh user@host
如果本地用户名与远程用户名一致,登录时可以省略用户名
ssh host
退出host
exit

免密登录原理
尚硅谷Hadoop 02框架搭建_第19张图片
回到根目录ls -al查看所有隐藏目录,发现.ssh

尚硅谷Hadoop 02框架搭建_第20张图片
执行

[lyr@hadoop102 ~]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
尚硅谷Hadoop 02框架搭建_第21张图片

.ssh中可以找到这两个文件
尚硅谷Hadoop 02框架搭建_第22张图片将公钥拷贝到要免密登录的目标机器上

ssh-copy-id hadoop103

尚硅谷Hadoop 02框架搭建_第23张图片
然后从102登录103就不需要密码了
在这里插入图片描述
同样将公钥复制到102(自己)和104上
发现.ssh里增加了一个文件,表示“谁可以免密登录我”,里面显示是Hadoop102
在这里插入图片描述
尚硅谷Hadoop 02框架搭建_第24张图片

同理Hadoop103、104上也可以看到
尚硅谷Hadoop 02框架搭建_第25张图片
但是如果用root用户,还需要密码,想要免密还需要重复配置
尚硅谷Hadoop 02框架搭建_第26张图片
此时使用xsync命令将a.txt文件分发到hadoop103和hadoop104就不需要密码了
尚硅谷Hadoop 02框架搭建_第27张图片

3.2.4 集群配置

1)集群部署规划

注意:
➢ NameNode 和 SecondaryNameNode 不要安装在同一台服务器
➢ ResourceManager 也很消耗内存,不要和 NameNode、econdaryNameNode 配置在同一台机器上。
尚硅谷Hadoop 02框架搭建_第28张图片

2) 配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1) 默认配置文件:
尚硅谷Hadoop 02框架搭建_第29张图片

(2) 自定义配置文件:

core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

3)按照规划配置集群
  (1) 核心配置文件
配置core-site.xml

[lyr@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop	
 
[lyr@hadoop102 hadoop]$ 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 网页登录使用的静态用户为 lyr -->
    <property>
      <name>hadoop.http.staticuser.user</name>
      <value>lyr</value>
    </property>
</configuration>

  (2) HDFS 配置文件
配置 hdfs-site.xml

[lyr@hadoop102 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>hadoop102:9870</value>
   </property>
   <!-- 2nn web 端访问地址(2nn在104上)-->
   <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop104:9868</value>
   </property>
</configuration>

  (3) YARN 配置文件
配置 yarn-site.xml

[lyr@hadoop102 hadoop]$ vim yarn-site.xml	

文件内容如下:

<configuration>
   <!-- 指定 MR 走 shuffle -->
   <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
   </property>
   <!-- 指定 ResourceManager 的地址(在hadoop103上)-->
   <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_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>
</configuration>

  (4) MapReduce 配置文件
配置 mapred-site.xml
[atguigu@hadoop102 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>
</configuration>

4)在集群(hadoop102、103、104)上分发配置好的 Hadoop 配置文件

[lyr@hadoop102 ~]$ xsync /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop

5)去 103 和 104 上查看文件分发情况

[lyr@hadoop103 hadoop]$ cat /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

[lyr@hadoop104 hadoop]$ cat /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml 

尚硅谷Hadoop 02框架搭建_第30张图片

3.2.5 群起集群

1)配置 workers

[lyr@hadoop102 hadoop]$ vim workers

在该文件中增加如下内容(不能有空格空行等):

尚硅谷Hadoop 02框架搭建_第31张图片
同步所有节点

[lyr@hadoop102 hadoop]$ xsync workers

2)启动集群

  • 如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致NameNode 和DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化)
[lyr@hadoop102 hadoop-3.1.3]$ hdfs namenode -format	
  • 启动HDFS
[lyr@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
  • 在配置了 ResourceManager 的节点(hadoop103)启动 YARN
[lyr@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
  • Web 端查看HDFS 的 NameNode
    http://hadoop102:9870 查看HDFS 上存储的数据信息
  • Web 端查看 YARN 的 ResourceManager
    http://hadoop103:8088 查看 YARN 上运行的 Job 信息

3)集群基本测试

  • 上传文件到集群

创建文件夹input

[lyr@hadoop102 ~]$ hadoop fs -mkdir /input

尚硅谷Hadoop 02框架搭建_第32张图片

➢ 上传小文件word,txt到input文件夹

[lyr@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

尚硅谷Hadoop 02框架搭建_第33张图片

➢上传大文件到根目录

[lyr@hadoop102 ~]$ hadoop fs -put ~/opt/software/jdk-8u212-linux-x64.tar.gz /

尚硅谷Hadoop 02框架搭建_第34张图片

  • 上传文件后查看文件存放在什么位置
    网站提供一个展示页面,实际上文件被存在data文件夹,每份文件有有三个拷贝

➢查看HDFS 文件存储路径

/home/lyr/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-24577735-192.168.10.102-1616207775317/current/finalized/subdir0/subdir0

➢查看HDFS 在磁盘存储文件内容
尚硅谷Hadoop 02框架搭建_第35张图片
第一个文件就是word.txt
尚硅谷Hadoop 02框架搭建_第36张图片

  • 拼接
[lyr@hadoop102 subdir0]$ cat blk_1073741826>>tmp.tar.gz
[lyru@hadoop102 subdir0]$ cat blk_1073741827>>tmp.tar.gz
[lyr@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz

尚硅谷Hadoop 02框架搭建_第37张图片
可见,这两个文件存储的是我们上传的jdk文件

  • 执行wordcount 程序
[lyr@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

出错了
尚硅谷Hadoop 02框架搭建_第38张图片
解决方案:https://blog.csdn.net/qq_41684957/article/details/81710190
在可以http://hadoop103:8088/cluster看到一个任务正在运行
尚硅谷Hadoop 02框架搭建_第39张图片

结果:
尚硅谷Hadoop 02框架搭建_第40张图片

尚硅谷Hadoop 02框架搭建_第41张图片

尚硅谷Hadoop 02框架搭建_第42张图片
在程序运行结束后,我们想查看任务的运行情况
尚硅谷Hadoop 02框架搭建_第43张图片
发现无法打开history,因为没有配置历史服务器,下一步配置历史服务器

3.2.6 配置历史服务器

1) 配置 mapred-site.xml

[lyr@hadoop102 hadoop]$ vim 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)分发配置

[lyr@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

如果yarn开启的话,要重启一下yarn

3) 在 hadoop102 启动历史服务器

[lyr@hadoop102 hadoop]$ mapred --daemon start historyserver

4)查看历史服务器是否启动
尚硅谷Hadoop 02框架搭建_第44张图片
5) 查看 JobHistory
http://hadoop102:19888/jobhistory

3.2.7 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。

开启日志聚集功能具体步骤如下:
1)配置 yarn-site.xml

[lyr@hadoop102 hadoop]$ 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)分发配置

[lyr@hadoop102 hadoop]$ xsync yarn-site.xml

3)关闭 NodeManager 、ResourceManager 和 HistoryServer

[lyr@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[lyr@hadoop102 ~]$  mapred --daemon stop historyserver

4)启动 NodeManager 、ResourceManage 和 HistoryServer

[lyr@hadoop103 ~]$ start-yarn.sh
[lyr@hadoop102 ~]$ mapred --daemon start historyserver

5)删除 HDFS 上已经存在的输出文件

[lyr@hadoop102 ~]$ hadoop fs -rm -r /output

6)执行 WordCount 程序

[lyr@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7)查看日志
历史服务器点击logs
尚硅谷Hadoop 02框架搭建_第45张图片查看任务运行日志
尚硅谷Hadoop 02框架搭建_第46张图片

3.2.8 集群启动/停止方式总结

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

3.2.9 编写 Hadoop 集群常用脚本

1)Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):yhadoop.sh

[lyr@hadoop102 ~]$ cd /home/atguigu/bin
[lyr@hadoop102 bin]$ vim myhadoop.sh

➢ 输入如下内容

#!/bin/bash
if [ $# -lt 1 ]
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

➢ 保存后退出,然后赋予脚本执行权限
[atguigu@hadoop102 bin]$ chmod 777 myhadoop.sh
执行出现错误
尚硅谷Hadoop 02框架搭建_第47张图片
在路径前添加/home/lyr,再次尝试
尚硅谷Hadoop 02框架搭建_第48张图片
yarn和hdfs正常关闭,但是historyserver出现错误
可以看到jobHistoryServer仍在
在这里插入图片描述
尝试手动关闭,是可以成功的
进入路径
尚硅谷Hadoop 02框架搭建_第49张图片
再查看sbin目录

尚硅谷Hadoop 02框架搭建_第50张图片
发现这里有一个mr-jobhistory-daemon.sh
于是把脚本文件改成这样:

#!/bin/bash
if [ $# -lt 1 ]
then
 echo "No Args Input..."
 exit ;
fi
case $1 in
"start")
 echo " =================== 启动 hadoop 集群 ==================="
 echo " --------------- 启动 hdfs ---------------"
 ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
 echo " --------------- 启动 yarn ---------------"
 ssh hadoop103 "/home/lyr/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
 echo " --------------- 启动 historyserver ---------------"
 ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/mr-jobhistory-daemon.sh start historyserver"
;;
"stop")
 echo " =================== 关闭 hadoop 集群 ==================="
 echo " --------------- 关闭 historyserver ---------------"
 ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/mr-jobhistory-daemon.sh stop historyserver"
 echo " --------------- 关闭 yarn ---------------"
 ssh hadoop103 "/home/lyr/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
 echo " --------------- 关闭 hdfs ---------------"
 ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
 echo "Input Args Error..."
;;
esac

再次运行:不再报错,但是有warning
尚硅谷Hadoop 02框架搭建_第51张图片

2)查看三台服务器 Java 进程脚本(不需要到每个服务器查看jps):jpsall

[lyr@hadoop102 ~]$ cd /home/lyr/bin
[lyr@hadoop102 bin]$ vim jpsall

➢ 输入如下内容

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
 echo =============== $host ===============
 ssh $host jps
done

➢ 保存后退出,然后赋予脚本执行权限
[lyr@hadoop102 bin]$ chmod 777 jpsall
3)分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用
[lyr@hadoop102 ~]$ xsync /home/lyr/bin/
4) 试用
尚硅谷Hadoop 02框架搭建_第52张图片

3.2.10 常用端口号说明(常见面试题一)

尚硅谷Hadoop 02框架搭建_第53张图片
常用配置文件(常见面试题二)
3.x系列:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
workers
2.x系列
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
slaves

3.2.11 集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
1)需求:
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用 1 分钟同步一次。
2)时间服务器配置(必须 root 用户)

查看所有节点 ntpd(一种时间服务器) 服务状态和开机自启动状态

[lyr@hadoop102 ~]$ sudo systemctl status ntpd

dead
尚硅谷Hadoop 02框架搭建_第54张图片
激活

[lyr@hadoop102 ~]$ sudo systemctl start ntpd

调至开机自动启动状态

[lyr@hadoop102 ~]$ sudo systemctl is-enabled ntpd

修改 hadoop102 的 ntp.conf 配置文件
[lyr@hadoop102 ~]$ sudo vim /etc/ntp.conf

  • 修改 1(授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间)
    去掉#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap的#
  • 修改 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

  • 添加 3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

修改 hadoop102 的/etc/sysconfig/ntpd 文件
[lyr@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

重新启动 ntpd 服务
[lyr@hadoop102 ~]$ sudo systemctl start ntpd
设置 ntpd 服务开机启动
[lyr@hadoop102 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须 root 用户)

  • 关闭所有节点上 ntp 服务和自启动(不能同时跟外网和hadoop102保持同步,会混乱)
[lyr@hadoop103 ~]$ sudo systemctl stop ntpd
[lyr@hadoop103 ~]$ sudo systemctl disable ntpd
[lyr@hadoop104 ~]$ sudo systemctl stop ntpd
[lyr@hadoop104 ~]$ sudo systemctl disable ntpd
  • 在hadoop103配置 1 分钟与时间服务器同步一次
    [lyr@hadoop103 ~]$ sudo crontab -e
    编写定时任务如下:
    */1 * * * * /usr/sbin/ntpdate hadoop102
  • 修改任意机器时间
    [lyr@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"
  • 1 分钟后查看机器是否与时间服务器同步
    [lyr@hadoop103 ~]$ sudo date
    尚硅谷Hadoop 02框架搭建_第55张图片

4. 运行过程出现异常

  • 杀死进程
[lyr@hadoop102 hadoop-3.1.3]$ sbin/stop-dfs.sh
[lyr@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
  • 删除每个节点上的data和logs
[lyr@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs
  • 重新格式化
[lyr@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
  • 启动集群
[lyr@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

尚硅谷Hadoop 02框架搭建_第56张图片

你可能感兴趣的:(hadoop,hadoop,大数据)