2024海南省大数据教师培训-Hadoop集群部署

前言

       本文将详细介绍Hadoop分布式计算框架的来源,架构和应用场景,并附上最详细的集群搭建教程,能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。


一、Hadoop介绍

       Hadoop是一个开源的分布式计算框架,由Apache软件基金会维护,专为处理和存储大规模数据集(大数据)而设计。它最初由Doug Cutting和Mike Cafarella开发,灵感来源于Google的两篇论文:《Google File System》和《MapReduce: Simplified Data Processing on Large Clusters》。Hadoop的核心优势在于其高度可扩展性、容错性和成本效益,使得它成为大数据处理领域的基石。

下面详细解析Hadoop的各个方面:


1. Hadoop分布式文件系统(HDFS)

       HDFS是Hadoop的核心组件之一,它是一个高度容错性的分布式文件系统,旨在运行在低成本的硬件设备上。HDFS的设计理念是“一次写入,多次读取”,特别适合大规模数据集的存储。

  • 架构:HDFS采用主/从(Master/Slave)架构,其中NameNode作为主节点管理文件系统的元数据(文件名、文件位置等),而DataNodes作为从节点负责实际存储数据块。每个文件会被分割成固定大小的块(默认64MB),并复制到多个DataNode上,通常复制因子为3,以确保数据的高可用性和容错性。
  • 数据复制策略:第一个副本放置在客户端所在节点或随机节点,第二个副本放置在不同机架的节点上,第三个副本则位于与第二个副本相同机架的另一个节点上,以此来优化数据访问速度和容错能力。

2. MapReduce核心分布式计算模型

        MapReduce是Hadoop中最核心的分布式计算模型,它是一种编程范式,允许开发者在分布式系统上处理和生成大数据集。MapReduce的概念最早由Google提出,并在Apache Hadoop项目中得到实现和广泛应用。以下是关于MapReduce的详细解释:

基本概念

        MapReduce的核心思想是将复杂的计算任务分解为两个主要阶段:Map(映射)和Reduce(归约)。这两个阶段分别对应两个用户自定义的函数:map()reduce()

  • Map阶段:此阶段负责接收输入数据集并对数据进行初步处理。它将输入数据切分成多个小块(Splits),每个Split由一个Map任务处理。Map任务对每条记录执行用户定义的map()函数,产生一系列的中间键值对(Intermediate Key-Value Pairs)。

  • Shuffle & Sort阶段:在Map和Reduce阶段之间,有一个重要的步骤称为Shuffle(洗牌)和Sort(排序)。在这个阶段,Map任务产生的中间键值对会被按照键进行排序、分区,并且可能需要在网络上传输到相应的Reduce任务节点。

  • Reduce阶段:Reduce任务负责接收来自各个Map任务的特定键的所有值,对它们进行聚集操作(例如求和、平均、最大值等)。用户定义的reduce()函数会对相同键的所有值进行迭代处理,生成最终的输出键值对。

关键特性

  • 并行处理:Map和Reduce任务可以在Hadoop集群中的多个节点上并行执行,大大加快了数据处理的速度。
  • 容错性:Hadoop MapReduce框架自动处理任务失败的情况,通过重新执行失败的任务来保证计算的完整性。
  • 扩展性:可以通过向集群添加更多的节点来线性地扩展计算能力,处理更大的数据集。
  • 资源管理:在Hadoop 2.x及之后的版本中,YARN(Yet Another Resource Negotiator)负责集群资源的管理和调度,使得MapReduce作业能够更高效地与其他计算框架共享资源。

使用场景

       MapReduce适用于处理大规模离线数据,如日志分析、网页索引构建、数据统计分析等场景。它尤其适合那些可以被分解为大量独立操作的任务,但对实时性要求不高的情况。

缺点与限制

     尽管MapReduce非常强大,但它也有一定的局限性:

  • 延迟较高:由于数据处理流程涉及多次磁盘I/O和网络传输,MapReduce不适合低延迟或实时处理需求。
  • 编程模型限制:所有的计算都必须能够表达为Map和Reduce操作,这在处理某些复杂计算逻辑时可能会显得笨拙。
  • 资源消耗:在处理大量小文件时,MapReduce可能会因为启动大量任务而导致较高的资源开销。

3. YARN(Yet Another Resource Negotiator)

       YARN(Yet Another Resource Negotiator)是Apache Hadoop项目中的一个关键组件,它作为从Hadoop 2.x版本开始引入的资源管理系统,彻底改变了Hadoop的工作方式,特别是对于如何管理集群资源以及运行各种类型的应用程序。YARN的设计目标是为了提高Hadoop的灵活性和通用性,使其不仅仅局限于批处理作业,还能支持流处理、交互式查询、机器学习等多种计算框架。

核心架构

       YARN架构分为几个关键组件,这些组件协同工作,提供了动态、可伸缩的资源管理能力:

  1. ResourceManager (RM): 负责整个集群的资源管理和分配。它是集群的中心管理者,接收来自各个应用的资源请求,并基于容量调度器(Capacity Scheduler)或公平调度器(Fair Scheduler)策略决定如何分配资源给各个应用程序。

  2. NodeManager (NM): 部署在每个节点上,负责容器管理与监控,以及向ResourceManager报告本节点的资源使用情况和健康状况。容器是YARN中资源抽象的基本单位,包括CPU、内存等。

  3. ApplicationMaster (AM): 每个应用程序在运行时会启动一个ApplicationMaster实例,负责向ResourceManager协商资源,并与NodeManager通信来启动和监控该应用的具体任务(比如MapReduce任务、Spark executor等)。ApplicationMaster是特定于应用程序的,了解如何运行和管理该类型的应用。

  4. Client: 提交应用程序到ResourceManager的客户端。它还负责监控应用程序的状态,并在应用程序完成后获取其输出。

工作流程

  1. 应用提交:客户端向ResourceManager提交应用的资源请求。
  2. 资源分配:ResourceManager为应用分配一个ApplicationMaster,并在某个NodeManager上启动它。
  3. 任务调度:ApplicationMaster进一步向ResourceManager请求具体任务所需的资源,ResourceManager根据当前集群资源状况分配容器。
  4. 任务执行:ApplicationMaster与对应的NodeManager通信,指示其在分配的容器中启动任务。
  5. 监控与状态更新:ApplicationMaster监控所有任务的执行进度,并向ResourceManager报告应用状态。同时,NodeManager也定期向ResourceManager发送心跳,报告容器状态。
  6. 应用完成:当所有任务执行完毕,ApplicationMaster通知ResourceManager,然后关闭自己并释放资源。

优势

  • 灵活性:YARN允许多种计算框架共存于同一集群中,不再局限于MapReduce。
  • 高效资源利用:通过细粒度的资源分配和动态调整,提高了集群资源的利用率。
  • 可扩展性:设计上支持大规模集群,容易横向扩展以处理更多数据和运行更多应用程序。
  • 故障恢复:提供快速故障检测和恢复机制,确保应用程序的高可用性。

YARN的引入,使得Hadoop生态系统更加健壮,为大数据处理提供了更强大的支撑平台。 

4. Hadoop生态系统

       Hadoop生态系统是一个围绕Apache Hadoop核心组件(主要包括HDFS、MapReduce和YARN)构建起来的庞大而多样化的工具和框架集合,旨在解决大数据处理、存储、分析、管理和访问的各种需求。以下是一些关键组件和工具的概述:

核心组件

  1. HDFS (Hadoop Distributed File System): 一个高度容错性的分布式文件系统,设计用于运行在商用硬件上。它将大文件分割成块并存储在不同的节点上,同时保持多个副本以确保数据的可靠性和高可用性。

  2. MapReduce: 一个分布式计算框架,允许在大量计算节点上并行处理大规模数据集。它将数据处理任务分为两个阶段:Map(映射)和Reduce(归约),非常适合批处理任务。

  3. YARN (Yet Another Resource Negotiator): Hadoop 2.x版本引入的资源管理器,它分离了资源管理与任务调度/监控,使Hadoop能够支持多种计算框架,而不仅仅是MapReduce。

重要工具和框架

  1. Hive: 提供了一种类似SQL的查询语言(HQL),允许用户对存储在Hadoop中的数据进行查询和分析,适合大数据仓库应用。

  2. Pig: 是一种数据流语言,设计用于处理大规模数据集,通过其Pig Latin脚本语言,用户可以编写复杂的数据转换和分析任务。

  3. HBase: 是一个分布式、列式存储的NoSQL数据库,建立在HDFS之上,适合随机读写访问和实时查询。

  4. ZooKeeper: 一个分布式的、开放源码的协调服务,提供配置管理、命名服务、分布式同步和组服务等功能,常作为其他组件的依赖。

  5. Spark: 虽然不是Hadoop直接的组成部分,但常与Hadoop生态系统集成使用,提供了一个更快、更通用的数据处理框架,支持批处理、交互式查询、流处理和机器学习等多种计算模型。

  6. Flume: 一个高可用、高可靠的系统用于收集、聚合和移动大量日志数据到HDFS或其他存储系统中。

  7. Sqoop: 用于在Hadoop和关系型数据库之间高效传输数据,支持批量导入导出操作。

  8. Oozie: 一个工作流调度系统,用于管理Hadoop作业的执行顺序,支持定时执行、依赖管理和错误处理。

  9. Kafka: 虽然是一个独立的项目,但在Hadoop生态系统中常用于构建实时数据管道,作为高吞吐量的分布式消息系统。

  10. Ambari: 一个用于管理和监控Hadoop集群的工具,提供了Web UI用于配置、管理和监控Hadoop生态系统中的各种服务。

5. 应用场景

        Hadoop作为一个强大的大数据处理平台,其应用场景广泛且多样,涵盖了众多行业和领域。以下是一些典型的Hadoop应用场景:

(1). 在线旅游和电子商务

  • 全球众多在线旅游网站(如Expedia)利用Hadoop处理和分析用户行为数据,优化搜索排名,个性化推荐旅行套餐,以及进行市场趋势分析。
  • 电商平台(如eBay)使用Hadoop处理海量交易数据,进行用户行为分析、库存管理、价格优化以及销售预测。

(2). 移动数据分析

  • Hadoop用于处理和分析来自智能手机的大量数据,包括用户行为、应用使用情况、位置服务等,帮助电信运营商优化网络性能、设计定制化服务和广告投放策略。

(3). 金融服务

  • 金融机构运用Hadoop处理交易数据,进行风险评估、欺诈检测、信用评分以及市场趋势分析。
  • 银行和保险公司使用Hadoop进行大规模数据的ETL(抽取、转换、加载)处理,构建数据仓库和数据湖。

(4). 社交媒体和内容平台

  • 社交媒体公司利用Hadoop分析用户生成的内容、情感分析、趋势预测以及进行推荐系统的优化。
  • 视频和内容分享平台使用Hadoop处理视频转码、内容分类和用户行为分析,以提升用户体验。

(5). 能源与公共事业

  • 能源公司(如Chevron)利用Hadoop进行地质数据的分析,辅助油气勘探和开采决策。
  • 公用事业公司(如Opower)使用Hadoop分析用户电表数据,提供节能建议和预测性维护服务。

(6). 医疗健康

  • 医疗机构和研究机构利用Hadoop处理和分析电子病历、基因组数据,支持疾病研究、药物开发和个性化医疗。

(7). 广告技术和市场营销

  • 广告公司利用Hadoop分析用户浏览习惯、点击流数据,进行精准营销和广告效果评估。

(8). 政府和公共部门

  • 政府机构使用Hadoop整合和分析跨部门数据,进行人口统计分析、城市规划、公共安全监测等。

(9). 物联网(IoT)和传感器数据

  • Hadoop处理来自智能设备和传感器的大量数据,用于预测性维护、能耗管理、环境监测等。

(10). 科研和学术

  • 在科学研究中,Hadoop帮助处理天文观测、气候模拟、粒子碰撞实验等产生的庞大数据集,加速科学发现。

       这些应用场景展示了Hadoop在处理大数据挑战方面的灵活性和强大能力,无论是数据存储、处理还是分析,Hadoop都能提供强大的支持。随着技术的进步和行业需求的增长,Hadoop的应用范围预计还会继续扩大。

6. 优缺点

优点

  • 高扩展性:容易横向扩展,支持处理PB级数据。
  • 容错性强:通过数据复制和故障恢复机制保证数据安全。
  • 成本效益:可在低成本硬件上运行,减少投入成本。
  • 易于编程:MapReduce模型简化了分布式编程。

缺点

  • 低延迟问题:Hadoop更擅长批处理,对于实时或低延迟要求的处理不够理想。
  • 小文件问题:处理大量小文件时效率较低。
  • 复杂性:维护和管理一个Hadoop集群可能需要专门的技术团队。

      Hadoop通过其强大的数据存储和处理能力,成为了大数据时代的重要基础设施,不断推动着数据驱动的决策制定和业务创新。


社区版和商业版

       Hadoop 发行版本分为开源 社区版 商业版 。 社区版是指由 Apache 软件基金会维护的版本,是官方维护的版本体系。

社区版

Apache Hadoopicon-default.png?t=N7T8https://hadoop.apache.org/

商业版

        商业版Hadoop是指由第三方商业公司在社区版Hadoop基础上进行了一些修
改、整合以及各个服务组件兼容性测试而发行的版本,比较著名的有 cloudera
的 CDH 、mapR、hortonWorks 等
Open Source & Open Standards | Clouderaicon-default.png?t=N7T8https://www.cloudera.com/open-source.html

分支发展

       Hadoop 的版本很特殊,是由多条分支并行的发展着。大的来看分为 3 个大 的系列版本:1.x、2.x、3.x。

       Hadoop1.0 由一个分布式文件系统 HDFS 和一个离线计算框架 MapReduce 组
成。架构落后,已经淘汰。
       Hadoop 2.0 则包含一个分布式文件系统 HDFS,一个资源管理系统 YARN 和一
个离线计算框架 MapReduce。相比于 Hadoop1.0,Hadoop 2.0 功能更加强大,且
具有更好的扩展性、性能,并支持多种计算框架。

       Hadoop 3.0 相比之前的 Hadoop 2.0 有一系列的功能增强。目前已经趋于稳

定,可能生态圈的某些组件还没有升级、整合完善。
本次教学使用的是 Apache Hadoop 3.3.0

Hadoop 集群搭建

       搭建教程中使用到的所有文件和工具都可以在我的资源中下载到。

1、集群简介

      HADOOP 集群具体来说包含两个集群:HDFS 集群和 YARN 集群,两者逻辑上分 离,但物理上常在一起。
      HDFS 集群负责海量数据的存储,集群中的角色主要有:
NameNode
DataNode
SecondaryNameNode
     YARN 集群负责海量数据运算时的资源调度,集群中的角色主要有:
ResourceManager
NodeManager
        mapreduce 是一个分布式运算编程框架,是应用程序开 发包,由用户按照编程规范进行程序开发,后打包运行在 HDFS 集群上,并且受 到 YARN 集群的资源调度管理。
Hadoop 部署方式分三种:
Standalone mode(独立模式)
Pseudo-Distributed mode(伪分布式模式)
Cluster mode(群集模式)
其中前两种都是在单机部署。
        独立模式又称为单机模式,仅 1 个机器运行 1 个 java 进程,主要用于调试。 伪分布模式也是在 1 个机器上运行 HDFS 的 NameNode 和 DataNode、YARN 的 ResourceManger 和 NodeManager,但分别启动单独的 java 进程,主要用于调试。 集群模式主要用于生产环境部署。会使用 N 台主机组成一个 Hadoop 集群。 这种部署模式下,主节点和从节点会分开部署在不同的机器上。

2、搭建角色分配

      以3 节点为例进行搭建,角色分配如下:
node1   NameNode          DataNode               ResourceManager
node2    DataNode         NodeManager         SecondaryNameNode
node3    DataNode         NodeManager

3、网络环境配置

检查你的VMware网络配置,NAT的网段是多少,我的是172.16.10.0/24
node1、node2、node3均为CentOS7服务器,将他们划入NAT虚拟网络中,并且给他们配置固定IP。DNS按照最初NAT模式分配的来设置,我的是172.16.10.2
node 1  inet 172.16.10.129  netmask 255.255.255.0  broadcast 172.16.10.255  
node 2  inet 172.16.10.130  netmask 255.255.255.0  broadcast 172.16.10.255
node 3  inet 172.16.10.131  netmask 255.255.255.0  broadcast 172.16.10.255
 图形化设置:
应用后重启网卡即可。(关闭一下再打开)
物理机能通就表示配置完成。
node2和node3同理。
命令行配置:
可参考下面的博文,这里不过多讲解。 CentOS 7 的网络配置及部分基础操作命令_centos7网络配置-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/lvhezhong123/article/details/111597641

(2)、修改各个虚拟机主机名

       Linux中修改配置文件会频繁使用到vim这个工具,如果不会使用的可以点击下面的链接跳转到vim工具的认识和基础使用。Linux中vim编辑器的使用方法及命令详解_使用vim工具编写程序并显示行号,保存为文件txt-CSDN博客文章浏览阅读1.4w次,点赞14次,收藏63次。文章目录Vim编辑器的使用Vi简述vim的三种模式概述转换方式文本编辑1. 命令行模式功能键2.底行模式功能键上机任务:vi编辑器Vim编辑器的使用Vi简述Linux 提供了一系列功能强大的编辑器,如 vi 和 Emacs 。 vi 是 linux 系统的第一个全屏幕交互式编辑器。vim是vi的强化版本,完全兼容vi操作。vim的一般使用方法:# vim filepath //如..._使用vim工具编写程序并显示行号,保存为文件txthttps://blog.csdn.net/Sevel7/article/details/105189768

vi /etc/hostname
node1

这样就修改完了,注销或重启后主机名就会改变为node1。
reboot #重启 

node 2 node 3 执行相同操作。

(3)、修改主机名和 IP 的映射关系

        修改node1、node2、node3的hosts文件,添加以下几项映射关系。

vi /etc/hosts172.16.10.129 node1
172.16.10.130 node2
172.16.10.131 node3

node1

node2
node3
修改完后重启网络即可生效。
/etc/init.d/network restart

测试:

node1:

node2:

node3:

测试映射关系没问题,进行下一步。

(4)、关闭防火墙

#查看防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#关闭防火墙开机启动
systemctl disable firewalld.service

node1、node2、node3都要关闭防火墙。

node1:

node2:
node3:

(5)、配置 ssh 免登陆

      ( 配置 node1-->node1,node2,node3)=node1免密登录node1、node2、node3(没错,自己要给自己也免密),node1 生成 ssh 免登陆密钥
ssh-keygen -t rsa (一直回车)
执行完这个命令后,会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3拷贝过程中首先会出现要求你输入yes确认,然后输入拷贝目标主机的ssh密码,输入完成后回车即可

测试:

      这里进入node2后又退出的原因是因为我们只做了node1免密node2和node3,而node2、3并没有免密node1和相互免密!!!

      为了后面少出bug,我这里直接给node1、2、3全部配置上免密登录ssh。方法同上操作,一定要给自己也配置免密!!

从这里我将使用xshell7工具连接node1、2、3来操作。

(6)、同步集群时间

yum install ntpdate
ntpdate cn.pool.ntp.org

       集群无法部署成功,很大一部分是集群的系统时间不同,因为同步集群时间不只这两行代码能完成,所以这里给出一个跳转链接,需要同步集群时间操作的可以去看看。CentOS-7的集群时间同步(ntp方式)_centos cluster ntp-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zhangbeizhen18/article/details/107602525

查看系统时间:
CentOS 7 查看系统时间、更新系统时间 、修改系统时间_cento系统时间-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_37779570/article/details/81979263
date

      因为多台服务器,你没必要i同时三台输入命令,查看系统时间,所以一般对上分钟就没多大问题。

node1:

node2:
node3:
集群时间同步,测试通过,进行下一步。

4、JDK 环境安装

卸载虚拟机自带的 JDK

注意:如果你的虚拟机是最小化安装不需要执行这一步。
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa :查询所安装的所有 rpm 软件包
  grep -i :忽略大小写
xargs -n1 :表示每次只传递一个参数
rpm -e –nodeps :强制卸载软件
node1、2、3全部都要删除自带java

上传 jdk

jdk-8u241-linux-x64.tar.gz   #资源在我主页资源中自行查找
连接xftp或者cd进入root目录下,直接拖拽文件进入xshell的命令行,也可以实现上传。上传jdk,注意上传的路径!这里建议跟我上传的路径一致,方便后续操作。上传到/root目录下。

创建目录

Linux常用命令:

Linux mkdir命令教程:如何创建目录(附实例详解和注意事项)_创建目录,mkdir.未定义标识符要怎么办?-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u012964600/article/details/136169415node1、2、3都要创建。

Mkdir -p /export/server

解压 jdk

解压刚刚上传的jdk到刚创建的目录。(node1、2、3)
tar -zxvf jdk-8u241-linux-x64.tar.gz -C /export/server

将 java 添加到环境变量中

先在node1配置,配置完成后使用scp命令同步到node2和node3即可。

vim /etc/profile.d/my_env.sh#在文件最后添加
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#刷新配置(会跟随profile.d文件同步刷新)
source /etc/profile

测试java环境变量
java -version

没问题。继续手动配置node2和node3.

Java环境配置完成。

5、Hadoop 重新编译

       Hadoop 官方一般都给出了对应版本安装包,一般情况下是不需要自己进行编译的,但是由于官方编译好的 hadoop 的安装包没有提供带 C 程序访问的接口, 所以在使用本地库(本地库可以用来做压缩,以及支持 C 程序等等 )的时候就会 出问题,因此生产环境中,一般会重新编译。
        此外,作为开源软件,针对源码进行修改某些属性,之后也需要重编译。 可以使用课程提供编译好的安装包。

6、Hadoop 安装包目录结构

       解压 hadoop-3.3.0-Centos7-64-with-snappy.tar.gz,目录结构如下:
bin Hadoop 最基本的管理脚本和使用脚本的目录 ,这些脚本是 sbin 目录 下管理脚本的基           础实现,用户可以直接使用这些脚本管理和使用 Hadoop。
etc Hadoop 配置文件所在的目录 ,包括 core-site,xml、hdfs-site.xml、 mapred-site.xml               等从 Hadoop1.0 继承而来的配置文件和 yarn-site.xml 等
       Hadoop2.0 新增的配置文件。
include :对外提供的编程库头文件(具体动态库和静态库在 lib 目录中), 这些头文件均是                  用 C++定义的,通常用于 C++程序访问 HDFS 或者编写 MapReduce 程序。
lib :该目录包含了 Hadoop 对外提供的编程动态库和静态库,与 include 目录中的头文件结           合使用。
libexec :各个服务对用的 shell 配置文件所在的目录,可用于配置日志输 出、启动参数(比                  如 JVM 参数)等基本信息。
sbin Hadoop 管理脚本所在的目录 ,主要包含 HDFS 和 YARN 中各类服务的 启动/关闭脚             本
share Hadoop 各个模块编译后的 jar 包所在的目录,官方自带示例

7、解压Hadoop3.3.0

将Hadoop上传到/exprot/server路径下,在此路径解压。

tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz 

删除安装包。

给Hadoop-3.3.0目录赋予权限

chmod -R 777 hadoop-3.3.0/

8、Hadoop 配置文件修改

       Hadoop 安装主要就是配置文件的修改,一般在主节点进行修改,完毕后 scp 下发给其他各个从节点机器

(1)、hadoop-env.sh

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

       文件中设置的是 Hadoop 运行时需要的环境变量。JAVA_HOME 是必须设置的, 即使我们当前的系统中设置了 JAVA_HOME,它也是不认识的,因为 Hadoop 即使 是在本机上执行,它也是把当前的执行环境当成远程服务器。
export JAVA_HOME=/export/server/jdk1.8.0_241
#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

编辑hadoop-env.sh文件,修改并添加上述参数。

vim hadoop-env.sh

修改完成,保存退出。
:wq  #保存退出

(2)、core-site.xml

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

      hadoop 的核心配置文件,有默认的配置项 core-default.xml。 core-default.xml 与 core-site.xml 的 功 能 是 一 样 的 , 如 果 在 core-site.xml 里没有配置的属性,则会自动会获取 core-default.xml 里的相 同属性的值。
编辑core-site.xml文件,将以下代码放入<configuration> </configuration>中,具体看例图:
vim core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置 HDFS web UI 用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合 hive -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
这里的8020默认为数据接口,后续大数据接入需要用到。修改完成,保存退出。
:wq  #保存退出

(3)、hdfs-site.xml

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

      HDFS 的核心配置文件,有默认的配置项 hdfs-default.xml。hdfs-default.xml 与 hdfs-site.xml 的功能是一样的 , 如果在 hdfs-site.xml 里没有配置的属性,则会自动会获取 hdfs-default.xml 里的相 同属性的值。
编辑 hdfs-site.xml文件,将以下代码放入<configuration> </configuration>中,具体看例图:
vim hdfs-site.xml
<!-- 指定 secondarynamenode 运行位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>

:wq  #保存退出

(4)、mapred-site.xml

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

       MapReduce 的核心配置文件,有默认的配置项 mapred-default.xml。 mapred-default.xml与mapred-site.xml的功能是一样的 ,如果在mapred-site.xml里没有配置的属性,则会自动会获取 mapred-default.xml里的相同属性的值。
编辑 mapred-site.xml文件,将以下代码放入<configuration> </configuration>中,具体看例图:
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

(5)、yarn-site.xml

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

       YARN 的核心配置文件,有默认的配置项 yarn-default.xml。 yarn-default.xml与yarn-site.xml的功能是一样的 ,如 果 在 yarn-site.xml 里没有配置的属性,则会自动会获取yarn-default.xml里相同属性的值。
编辑 yarn-site.xml文件,将以下代码放入<configuration> </configuration>中,具体看例图:
vim yarn-site.xml
<!-- 指定 YARN 的主角色(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<!-- NodeManager 上运行的附属服务。需配置成 mapreduce_shuffle,才可运行 MapReduce
程序默认值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置 yarn 历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
:wq  #保存退出

(6)、workers

所在目录:/export/server/hadoop-3.3.0/etc/hadoop

        workers 文件里面记录的是集群主机名。主要作用是配合一键启动脚本如 start-dfs.sh、stop-yarn.sh 用来进行集群启动。这时候workers文件里面的主机标记的就是从节点角色所在的机器。
编辑 workers文件,将以下代码放入,具体看例图:
vim workers 
node1
node2
node3
:wq  #保存退出

9. scp 同步安装包

cd /export/server
scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD
       在 node1 上进行了配置文件的修改,使用 scp 命令将修改好之后的安装包同 步给集群中的其他节点。

10Hadoop 环境变量

3 台机器都需要配置环境变量文件。
vim /etc/profile.d/my_env.sh
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile
这里记得同步手动修改node2和node3的环境变量配置:
Hadoop环境变量配置完成。

Hadoop 集群启动

初始-格式化

         要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。 注意: 首次启动 HDFS 时,必须对其进行格式化操作 。本质上是一些清理和 准备工作,因为此时的 HDFS 在物理上还是不存在的。必须进行初始的格式化操作!!(node1、node2、node3全部都要格式化!!)
hadoop namenode -format

node1:

成功。
node2:
成功。
node3:
成功。
怎么查看成功?往上翻,看见这个就可以算作是初始化成功了。
现在开始启动

单节点逐个启动

主节点(node1)、从节点(node2、node3)

在主节点上使用以下命令启动 HDFS NameNode:(node1)
     $HADOOP_HOME/bin/ hdfs --daemon start namenode
在每个从节点上使用以下命令启动 HDFS DataNode:(node 1 、2、3)
     $HADOOP_HOME/bin/hdfs --daemon start datanode
在 node2 上使用以下命令启动 HDFS SecondaryNameNode:
     $HADOOP_HOME/bin/hdfs --daemon start secondarynamenode
在主节点上使用以下命令启动 YARN ResourceManager:(node1)
     $HADOOP_HOME/bin/ yarn --daemon start resourcemanager
在每个从节点上使用以下命令启动 YARN nodemanager:(node 1 、2、3)
     $HADOOP_HOME/bin/yarn --daemon start nodemanager
如果想要停止某个节点上某个角色,只需要把命令中的 start 改为 stop 即可。

脚本一键启动-(建议选择单节点逐个启动,两种方式任选一种即可)

       如果配置了 etc/hadoop/workers 和 ssh 免密登录,则可以使用程序脚本启 动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
hdfs:$HADOOP_PREFIX/sbin/start-dfs.sh
yarn: $HADOOP_PREFIX/sbin/start-yarn.sh
停止集群:stop-dfs.sh、stop-yarn.sh

集群 web-ui

一旦 Hadoop 集群启动并运行,可以通过 web-ui 进行集群查看,如下所述:

NameNode

http://172.16.10.129:port/ 默认 9870
可以看到有三个节点在线。

ResourceManager

http://172.16.10.129:port/ 默认 8088
这边也可以看到三个活动节点。

Hadoop 体验

HDFS 使用

从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /test/input     #创建一个目录
hadoop fs -put /root/somewords.txt /test/input   #上传文件到这个目录

你可能会碰到的报错:

       遇到这个错误提示“put: /test/input': No such file or directory:        hdfs://node1:8020/test/input'”时,意味着你在尝试使用Hadoop的hadoop fs -put命令上传文件到HDFS时,指定的目标目录不存在。Hadoop要求上传文件的目标路径必须是已存在的。这个问题可以通过以下几个步骤解决:

  1. 创建缺失的目录: 在上传文件之前,首先确保目标目录已经存在。你可以使用hadoop fs -mkdir命令来创建所需的目录。例如,如果想要上传到/test/input目录,先创建这个目录:

    Bash
    1hadoop fs -mkdir -p /test/input

    -p选项表示如果父目录不存在,也会一并创建。

  2. 再次尝试上传: 一旦目标目录创建成功,就可以重新尝试使用put命令上传文件了。例如,如果你要上传本地的localfile.txt到HDFS的/test/input目录下,命令如下

    Bash
    1hadoop fs -put localfile.txt /test/input/

    注意路径末尾的斜杠是可选的,但加上它可以明确表示这是一个目录。

  3. 检查权限: 如果问题仍然存在,可能是因为权限问题。确保你有权限在HDFS上创建目录和上传文件。这通常涉及到HDFS的权限设置,可以通过Hadoop的ACL(Access Control List)或者HDFS的配置来管理。

  4. 检查Hadoop集群状态: 确保Hadoop集群运行正常,尤其是NameNode(在你的例子中是node1:8020)是活动且可访问的。可以通过检查集群的日志文件或使用Hadoop的管理工具(如Ambari、Cloudera Manager等)来验证。

上传成功。

运行 mapreduce 程序

       在 Hadoop 安装包的 share/hadoop/mapreduce 下有官方自带的 mapreduce 程 序。我们可以使用如下的命令进行运行测试。
示例程序 jar:
hadoop-mapreduce-examples-3.3.0.jar
计算圆周率:
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 20 50
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。
计算 wordcount:
hello hello tom hello allen hello
allen tom mac apple
hello apple spark allen tom
hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount/input /wordcount/output

MapReduce jobHistory

       JobHistory 用来记录已经 finished 的 mapreduce 运行日志,日志信息存放 于 HDFS 目录中,默认情况下没有开启此功能,需要在 mapred-site.xml 中配置并手动启动。

1. 修改 mapred-site.xml

cd /export/servers/hadoop-3.3.0/etc/hadoop
vim mapred-site.xml
MR JobHistory Server 管理的日志的存放位置
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
查看历史服务器已经运行完的 Mapreduce 作业记录的 web 地址,需要启动该
服务才行
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>

2. 分发配置到其他机器

cd /export/servers/hadoop-3.3.0/etc/hadoop
scp -r mapred-site.xml node2:$PWD
scp –r mapred-site.xml node3:$PWD

3. 启动 jobHistoryServer 服务进程

mapred --daemon start historyserver
如果关闭的话 用下述命令
mapred --daemon stop historyserver

4. 页面访问 jobhistoryserver

http://node1:19888/jobhistory

HDFS 的垃圾桶机制

1. 垃圾桶机制解析

         每一个文件系统都会有垃圾桶机制,便于将删除的数据回收到垃圾桶里面去, 避免某些误操作删除一些重要文件。回收到垃圾桶里里面的资料数据,都可以进行恢复。

2. 垃圾桶机制配置

       HDFS 的垃圾回收的默认配置属性为 0,也就是说,如果你不小心误删除了 某样东西,那么这个操作是不可恢复的。 修改 core-site.xml : 那么可以按照生产上的需求设置回收站的保存时间,这个时间以分钟为单位, 例如 1440=24h=1 天。
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
然后重启 hdfs 集群

3. 垃圾桶机制验证

         如果启用垃圾箱配置,dfs 命令删除的文件不会立即从 HDFS 中删除。相反, HDFS 将其移动到垃圾目录(每个用户在/user/<username>/.Trash 下都有自己的 垃圾目录)。只要文件保留在垃圾箱中,文件可以快速恢复。 使用 skipTrash 选项删除文件,该选项不会将文件发送到垃圾箱。它将从 HDFS 中完全删除

文末

     部署是真麻烦,各种文档查半天,但是应用场景和功能都挺好的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客java基础(一)

A 解析 : java源程序只允许一个public类存在 &#xff0c;且与文件名同名 ; D hashCode方法本质就是一个哈希函数&#xff0c;这是Object类的作者说明的。Object类的作者在注释的最后一段的括号中写道&#xff1a;将对象的地址值映射为integer类型的哈希值。但hashCode()并不…

SQL Chat:从SQL到SPEAKL的数据库操作新纪元

引言 SQL Chat是一款创新的、对话式的SQL客户端工具。 它采用自然语言处理技术&#xff0c;让你能够像与人交流一样&#xff0c;通过日常对话的形式对数据库执行查询、修改、创建及删除操作 极大地简化了数据库管理流程&#xff0c;提升了数据交互的直观性和效率。 在这个框…

【虚拟现实】一、AR与VR的基本原理

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;技术已经从科幻小说走入现实&#xf…

UltraScale+系列模块化仪器,可以同时用作控制器、算法加速器和高速数字信号处理器

基于 XCZU7EG / XCZU4EG / XCZU2EG • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 &#xff0c;基于 IP 核的软件库 基于 Xilinx Zynq UltraScaleMPSoC 的 FPGA 技术&#xff0c;采用 Xilinx Zynq UltraScale&a…

Spring-Security(二)OAuth2认证详解(持续更新)

Spring Security & Oauth2系列&#xff1a; Spring Security&#xff08;一&#xff09; 源码分析及认证流程 Spring Security&#xff08;二&#xff09;OAuth2认证详解及自定义异常处理 文章目录 1、OAuth2.0 简介1.1 OAuth2.0 相关名词解释1.2 四种授权模式 1.3 、OAu…

接口(API)开发,测试工具-apifox

前言 为什么需要接口&#xff08;API&#xff09;? 因为不同的平台或系统可能使用不同的技术栈、编程语言或数据格式。API提供了一个标准化的方式&#xff0c;使得这些不同的系统可以相互交换数据和功能调用&#xff0c;实现互操作性 在开发日常的项目交互中&#xff0c;不…

内网穿透的方式有哪些——快解析的优势

外网穿透内网技术&#xff0c;即内网映射&#xff0c;是把目标本地内网地址和端口发布到互联网&#xff0c;是一种由内网开放到外网的权限操作。那么&#xff0c;内网穿透的方法有哪些呢&#xff1f;做映射外网的方法。需要结合自己本地网络环境和应用场景来实施。这里分享三种…

Python Excel 指定内容修改

需求描述 在处理Excel 自动化时,财务部门经常有一个繁琐的场景,需要读取分发的Excel文件内容复制到汇总Excel文件对应的单元格内,如下图所示: 这种需求可以延申为,财务同事制作一个模板,将模板发送给各员工,财务同事需收取邮件将员工填写的excel文件下载到本机,再类似…

[FreeRTOS 基础知识] 任务调度 与 链表

文章目录 任务并行的概念RTOS如何实现多任务调度&#xff1f; 任务并行的概念 在生活中&#xff0c;经常出现一心多用的情况。比如你需要一边吃饭一边手机回复信息&#xff0c;这里面就存在两个任务&#xff1a;任务一、吃饭。任务二、手机回复信息。 假如你无法一心多用&…

FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉

在调试串口任务中增加如下代码&#xff0c;发现可以用keil进行仿真&#xff0c;但是烧录程序后&#xff0c;调试串口没有打印&#xff0c;状态灯也不闪烁&#xff0c;单片机完全起不来 博主就纳了闷了&#xff0c;究竟是什么原因&#xff0c;这段代码可是公司永流传的老代码了&…

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们&#xff0c;今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版&#xff01;&#x1f929;✨作为一名专业的图形设计师&#xff0c;我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星&#xff01;&#…

【MySQL数据库】:MySQL索引特性

目录 索引的概念 磁盘 磁盘的基本特征 MySQL与磁盘交互的基本单位 索引的理解 建立测试表 理解单个Page 理解多个Page 页目录 单页情况 多页情况 索引的数据结构 聚簇索引 VS 非聚簇索引 索引操作 创建主键索引 创建唯一索引 创建普通索引 创建全文索引 查询…

每日一题——Python实现PAT乙级1099 性感素数(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 综合点评 我要更强 优化点 …

力扣每日一题130:被围绕的区域

题目 中等 相关标签 相关企业 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["X","X","X"…

U盘文件系统结构损坏的应对与预防

在数字化时代&#xff0c;U盘作为便携式存储设备&#xff0c;其重要性不言而喻。然而&#xff0c;当U盘文件系统结构损坏时&#xff0c;我们可能会面临数据丢失的风险。本文将深入探讨U盘文件系统结构损坏的问题&#xff0c;分析其产生的原因&#xff0c;并给出相应的数据恢复方…

基于pytoch卷积神经网络水质图像分类实战

具体怎么学习pytorch&#xff0c;看b站刘二大人的视频。 完整代码&#xff1a; import numpy as np import os from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data…

时序数据库是Niche Market吗?

引言 DB-Engines的流行程度排行从其评估标准[4]可以看出完全不能够做为市场规模的评估标准。甚至于在知道市场规模后可以用这个排行作为一个避雷手册。毕竟现存市场小&#xff0c;可预见增长规模小&#xff0c;竞争大&#xff0c;创新不足&#xff0c;那只能卷价格&#xff0c…

【文献阅读】LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

目录 1. motivation2. overall3. model3.1 low rank parametrized update matrices3.2 applying lora to transformer 4. limitation5. experiment6. 代码7. 补充参考文献 1. motivation 常规的adaptation需要的微调成本过大现有方法的不足&#xff1a; Adapter Layers Introd…

.net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript

.net core 使用js&#xff0c;.net core 使用javascript&#xff0c;在.net core项目中怎么使用javascript 我项目里需要用到“文字编码”&#xff0c;为了保证前端和后端的编码解码不处bug, 所以&#xff0c;我在项目中用了这个 下面推荐之前在.net F4.0时的方法 文章一&#…

操作系统真象还原:中断

第7章-中断 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 7.2操作系统是中断驱动的 没有中断&#xff0c;操作系统几乎什么都做不了&#xff0c;操作系统是中断驱动。 7.3中断分类 7.3.1外部中断 外部中断是指来自 CPU 外部的中断&#xff0c;而…