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.mzph.cn/pingmian/26264.shtml

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

相关文章

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词&#xff1a;高粱基因分析&#xff1b;基因组变异检测&#xff1b;全基因组重测序&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题&#xff08;中文…

【Linux系统化学习】传输层——TCP协议

目录 预备知识 全双工协议 协议缓冲区 TCP协议 TCP协议格式 六个标志位 两个问题 确认应答机制 流量控制 超时重传机制 连接管理机制 CLOSE_WAIT状态 TIME_WAIT状态 滑动窗口 拥塞控制 延迟应答 捎带应答 粘包问题 TCP的异常情况 TCP小结 TCP/UDP协议对比…

MAC认证

简介 MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法&#xff0c;它不需要用户安装任何客户端软件。设备在启动了MAC认证的接口上首次检测到用户的MAC地址以后&#xff0c;即启动对该用户的认证操作。认证过程中&#xff0c;不需要用户手动输入用户名…

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代&#xff0c;抖音小店以其独特的平台优势和庞大的用户基础&#xff0c;吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一&#xff0c;它的抖音小店究竟靠不靠谱呢&#xff1f;今天&#xff0c;我们就来一起揭开这个谜底。 首…

刷题训练之分治归并

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握分治归并算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

神经气体生长算法【GNG】

当德国计算神经学家 Bernd Fritzke 在其 1995 年的开创性论文中提出后来被称为神经气体生长&#xff08;GNG&#xff09;的算法时&#xff0c;机器学习还是一个相对较新的领域&#xff0c;并且受到实际神经科学的极大启发。 当时&#xff0c;神经科学正处于一个突破性的时代—…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…

电子元器件批发的几种模式

电子元器件的批发模式多种多样&#xff0c;以下是几种常见的模式&#xff1a; 传统批发模式&#xff1a;传统的电子元器件批发模式是指厂商或代理商通过与制造商签订合同&#xff0c;大批量购买元器件&#xff0c;并将其以较低的价格批发给零售商或其他中小型企业。这种模式通常…

【ARM Cache 及 MMU 系列文章 6.4 -- Cache miss 统计详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

2. pytorch环境安装

概述 ​ 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置&#xff0c;需要保证电脑配有独立显卡&#xff0c;并且显卡驱动安装正常&#xff0c;详情见前文。 1. 创建新的虚拟环境用来配置Pyt…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

什么是AIGC?AIGC是否会颠覆未来的内容生产模式?普通人如何利用好AI提高内容生产效率?

2024年是AI元年&#xff0c;正好我在AI公司里面工作&#xff0c;对AIGC有着几年的研究&#xff0c;接下来把我这对AIGC的学习经验毫无保留的给大家分享一下 AIGC 的简要介绍 在狭义上&#xff0c;AIGC是指利用AI自动生成内容的生产方式&#xff0c;比如自动写作、自动设计等。…

诊所管理系统有没有免费的?

随着消费市场的不断变化&#xff0c;消费型医疗领域逐渐受到重视&#xff0c;医疗机构面临激烈的行业竞争。为了提升诊所的经营管理效率和营销能力&#xff0c;选择一款合适的诊所管理系统变得尤为重要。然而&#xff0c;面对市场上众多的系统选择&#xff0c;如何找到适合自己…

在线课堂知识付费小程序源码系统 带完整的安装代码包以及搭建教程

系统概述 在线课堂知识付费小程序源码系统是基于当前主流技术栈开发的&#xff0c;支持微信小程序端的在线教育平台解决方案。它不仅包含了课程发布、在线学习、支付系统等基础功能&#xff0c;还融入了社区互动、用户管理、数据分析等高级特性&#xff0c;旨在打造一个全方位…

梯度提升树GBDT系列算法

Boosting方法的基本元素与基本流程&#x1f4ab; 在Boosting集成算法当中&#xff0c;我们逐一建立多个弱评估器&#xff08;基本是决策树&#xff09;&#xff0c;并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果&#xff0c;最终综合多个弱评估器的结果进行输出…

01 Linux网络设置

目录 1.1 查看及测试网络 1.1.1 查看网络配置 1. 查看网络接口地址 1. 查看活动的网络接口设备 2. 查看指定的网络接口信息 2. 查看主机名称 3. 查看路由表条目 4. 查看网络连接情况 1.1.2 测试网络连接 1. 测试网络连通性 2. 跟踪数据包的路由途径 3. 测试DNS域名解析 1.2 设…

亚信安慧AntDB数据库与云信达eCloud Data Master 云数据管理系统软件V4完成兼容性互认证

日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;与南京云信达科技有限公司&#xff08;简称&#xff1a;云信达&#xff09;&#xff0c;完成了AntDB数据库产品与云信达eCloud Data Master云数据管理系统软件V4的兼容性互认证。 双…

Linux LCD屏幕上电不显示

一、问题描述 LCD屏幕点不亮 二、相关配置 timing获取&#xff1a;&#xff08;1280x800) 最好的获取方式是通过询问LCD屏厂获得确切的时序参考值。其次或是从屏手册或者Driver IC手册中查找&#xff08;向屏厂索要这些文档&#xff09;。 至少需要从屏厂获得Width&#xff…

C++入门 string(2)

目录 string类的常用接口说明 string类对象的容量操作 size & max_size & length & capacity empty & clear reserve & resize string类对象的元素访问 at & back & front string类对象的修改操作&#xff08;字符串操作&#xff09; sub…

FlowUs息流:新媒体运营者的智能协作解决方案

新媒体和自媒体运营者在日常工作中经常面临信息管理复杂、创意记录不便、团队协作效率低等痛点。FlowUs作为一款多功能的协作工具&#xff0c;能够针对性地解决这些问题。 FlowUs息流是一款专为新媒体从业者设计的协作文档工具&#xff0c;它具备以下功能特色&#xff1a; 中文…