总体目录
一、虚拟机及CentOS安装配置
1、 软件准备
2、 虚拟机网络配置
二、单节点Hadoop
1、安装hadoop
2、配置hadoop
3、启动运行hadoop
三、集群Hadoop
1、克隆其他节点
2、配置集群
3、启动运行集群
内容简介:本文详细讲解了大数据应用重要系统Hadoop的安装和部署,包括Linux相关配置、单节点、集群的配置方法和MapReduce任务的验证,本文分成三个部分,请参阅。原创不易,转载请声明。
《大数据Hadoop安装部署-1-CentOS》
《大数据Hadoop安装部署-2-单节点配置》
《大数据Hadoop安装部署-3-集群配置》

二、单节点Hadoop

1、安装hadoop

我们使用的是原生hadoop,即Apache版本的,还有一个是CDH版的不在本文讲解范围内。

Apache版本的官网地址是https://hadoop.apache.org/,我们使用2.7.3版本,下载地址为https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

解压安装tar包

进入到tar上传到的那个目录内

cd /home/hadoop/Downloads

执行下面指令

tar -xvf hadoop-2.7.3.tar.gz -C /usr/local/apps

配置环境变量

vi /etc/profile

输入i,进入编辑模式,接前,添加修改下面代码

export JAVA_HOME=/usr/local/apps/jdk1.8.0_77
export HADOOP_HOME=/usr/local/apps/hadoop-2.7.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

然后输入:wq保存退出

刷新配置文件

source /etc/profile

检查效果,打出hadoop版本,检查是否一致

 hadoop version
Hadoop2.7.3
Subversionhttps://git-wip-us.apache.org/repos/asf/hadoop.git-rbaa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiledbyrooton2016-08-18T01:41Z
Compiledwithprotoc2.5.0
Fromsourcewithchecksum2e4ce5f957ea4db193bce3734ff29ff4
Thiscommandwasrunusing/usr/local/apps/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

创建必要的运行目录并授权

mkdir -p /opt/hadoop/tmp
mkdir -p /opt/hadoop/hdfs/name
mkdir -p /opt/hadoop/hdfs/data
chmod -R 755 /opt/hadoop

‌755权限值‌:

‌所有者(Owner)‌:7(读4+写2+执行1)

‌所属组(Group)‌:5(读4+执行1)

‌其他用户(Others)‌:5(读4+执行1)

‌效果‌:所有者可读写执行,组用户和其他用户仅可读和执行。

2、配置hadoop

2.1检查java关联

检查/usr/local/apps/hadoop-2.7.3/etc/hadoop/hadoop-env.sh文件

vi /usr/local/apps/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

确保存在如下配置

#The java implementation to use.
export JAVA_HOME=${JAVA_HOME}

2.2配置全局核心参数

此配置文件位于/usr/local/apps/hadoop-2.7.3/etc/hadoop/core-site.xml。是Hadoop的核心配置文件,主要用于定义Hadoop集群的全局参数,直接影响HDFS、MapReduce和YARN等组件的运行机制。其核心作用如下:

‌1.基础文件系统配置‌

‌默认文件系统URI‌:通过fs.defaultFS指定HDFS的访问地址(如hdfs://namenode-host:9000),集群内所有节点和客户端均依赖此配置与NameNode通信。

‌临时目录‌:hadoop.tmp.dir定义临时文件存储路径(如/tmp/hadoop-${user.name}),该目录被HDFS、YARN等组件共用。

‌2.I/O与网络优化‌

‌缓冲区大小‌:io.file.buffer.size控制读写操作的缓冲区容量(默认4KB,建议调整为128KB以上以提升性能)。

‌压缩编解码器‌:io.compression.codecs指定支持的压缩算法(如org.apache.hadoop.io.compress.GzipCodec)。

‌3.安全与权限管理‌

‌认证方式‌:hadoop.security.authentication设置安全认证模式(如kerberos或simple)。

‌代理用户‌:通过hadoop.proxyuser.配置允许代理访问的主机和用户组(如hadoop.proxyuser.hadoop.hosts=)。

‌4.其他关键参数‌

‌垃圾回收‌:fs.trash.interval定义删除文件的保留时间(分钟),避免误删。

‌本地库支持‌:io.native.lib.available启用本地库加速压缩/解压操作。

本次单节点,用vi检查只要配置如下关键点即可

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-server-00:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/apps/hadoop-2.7.3/tmp/</value>
    </property>
</configuration>

2.3配置分布式文件系统

此配置文件位于/usr/local/apps/hadoop-2.7.3/etc/hadoop/hdfs-site.xml。是Hadoop分布式文件系统(HDFS)的核心配置文件,用于定制HDFS的运行时参数,覆盖默认配置以满足集群需求。其核心作用如下:

‌1.数据存储与副本管理‌

‌副本数量‌:

通过dfs.replication设置文件块的副本数(默认3),确保数据冗余和容错能力。

‌块大小‌:

dfs.blocksize定义文件块大小(如128MB),影响MapReduce任务的分片策略和NameNode内存消耗。

‌2.NameNode与DataNode配置‌

‌元数据存储路径‌:

dfs.namenode.name.dir指定NameNode元数据(如文件系统镜像)的存储目录。

‌数据存储路径‌:

dfs.datanode.data.dir配置DataNode存储实际数据的本地路径(支持多目录以提升I/O性能)。

‌高可用(HA)‌:

dfs.nameservices定义名称服务标识。dfs.ha.namenodes列出HA集群中的NameNode节点。

dfs.namenode.shared.edits.dir设置共享编辑日志的JournalNode地址。

‌3.网络与访问控制‌

‌RPC/HTTP地址‌:

dfs.namenode.rpc-address设置NameNode的RPC通信端口(默认9000)。

dfs.namenode.http-address配置WebUI访问地址(如0.0.0.0:9870)。

‌短路本地读取‌:

dfs.client.read.shortcircuit启用本地数据块直接读取,减少网络开销。

‌4.安全与故障处理‌

‌故障转移‌:

dfs.ha.automatic-failover.enabled启用自动故障转移功能。

‌防脑裂机制‌:

dfs.ha.fencing.methods配置隔离方法(如sshfence)防止多NameNode同时活跃。

本次单节点,用vi检查只要配置如下关键点即可

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

2.4配置MapReduce框架

此配置文件位于/usr/local/apps/hadoop-2.7.3/etc/hadoop/mapred-site.xml。可以通过mapred-site.template复制而来,或者vi直接创建。是Hadoop中专门用于配置‌MapReduce框架‌的核心文件,主要定义作业调度、资源分配、任务执行等关键参数,直接影响MapReduce任务的性能和稳定性。其核心作用如下:

‌1.框架运行模式‌

‌指定计算框架‌:

通过mapreduce.framework.name设置MapReduce的运行模式(如yarn或local),决定任务由YARN管理还是本地执行。

‌类路径配置‌:

mapreduce.application.classpath定义任务依赖的库路径,确保分布式环境下任务能访问所需资源。

‌2.任务调度与资源分配‌

‌内存管理‌:

mapreduce.map.memory.mb和mapreduce.reduce.memory.mb分别设置Map/Reduce任务的堆内存上限,需与YARN的容器资源限制匹配。

mapreduce.map.java.opts可细化JVM参数(如-Xmx)优化内存使用。

‌CPU资源‌:

mapreduce.map.cpu.vcores控制任务占用的虚拟CPU核数。

‌3.性能优化参数‌

‌排序与溢写‌:

mapreduce.task.io.sort.mb调整排序缓冲区大小(默认100MB),影响磁盘I/O频率。

mapreduce.map.sort.spill.percent设置溢写阈值(默认80%)。

‌并行度控制‌:

mapreduce.job.reduces指定Reduce任务数量,默认基于输入数据分片自动计算。

‌4.日志与容错‌

‌日志聚合‌:

yarn.log-aggregation-enable启用日志聚合功能,便于调试。

‌任务重试‌:

mapreduce.map.maxattempts定义Map任务失败后的最大重试次数。

本次单节点,用vi检查只要配置如下关键点即可

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2.5配置YARN框架

此配置文件位于/usr/local/apps/hadoop-2.7.3/etc/hadoop/yarn-site.xml。由于我们在MapReduce框架配置中定义了运算任务由YARN(YetAnotherResourceNegotiator)来管理,因此需要进一步配置yarn-site.xml,主要用于定义YARN集群的资源管理、任务调度、节点通信等关键参数。其核心作用如下:

‌1.资源管理配置‌

‌ResourceManager地址‌:

通过yarn.resourcemanager.hostname指定ResourceManager的主机名,yarn.resourcemanager.address设置其RPC通信端口(默认8032),客户端通过该地址提交应用程序。

‌NodeManager资源限制‌:

yarn.nodemanager.resource.memory-mb定义单个节点可用的物理内存总量(如8192MB)。yarn.nodemanager.resource.cpu-vcores设置虚拟CPU核数(默认8)。

‌2.任务调度与容器配置‌

‌容器资源范围‌:

yarn.scheduler.minimum-allocation-mb和yarn.scheduler.maximum-allocation-mb分别指定容器可申请的最小/最大内存(如1024MB和8192MB)。yarn.scheduler.minimum-allocation-vcores限制单个容器的虚拟CPU核数。

‌调度器选择‌:

yarn.resourcemanager.scheduler.class配置调度器类型(如CapacityScheduler或FairScheduler)。

‌3.高可用(HA)与容错‌

‌HA配置‌:

yarn.resourcemanager.ha.enabled启用ResourceManager高可用。

yarn.resourcemanager.ha.rm-ids列出多个RM节点标识(如rm1,rm2)。

‌故障恢复‌:

yarn.resourcemanager.recovery.enabled启用RM状态恢复功能。

‌4.辅助服务与日志‌

‌Shuffle服务‌:

yarn.nodemanager.aux-services必须设置为mapreduce_shuffle以支持MapReduce任务。

‌日志聚合‌:

yarn.log-aggregation-enable启用日志聚合功能,便于任务调试。

本次单节点,用vi检查只要配置如下关键点即可

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-server-00</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

3、启动运行hadoop

3.1启动hadoop

1、格式化HDFS

进入/usr/local/apps/hadoop-2.7.3/bin目录下,由于已经配置了环境变量$HADOOP_HOME,下面的命令可以在任意路径下运行

hadoop namenode -format

或者

hdfs namenode -format

其目的是‌初始化NameNode元数据存储目录‌,会生成fsimage(文件系统镜像)和edits(操作日志)文件,存储HDFS的命名空间和块映射信息。生成全局唯一标识符,确保NameNode和DataNode的元数据一致性。

格式化会清空原有元数据,需提前备份关键数据,即备份元数据目录(如dfs.name.dir配置的路径)。

2、启动NameNode守护进程服务

NameNode进程,负责管理文件系统元数据。

我们使用的是hadoop2.X,启动命令需要进入/usr/local/apps/hadoop-2.7.3/sbin目录下去运行相应的SH脚本

./hadoop-daemon.sh start namenode

关闭是

./hadoop-daemon.sh stop namenode

Hadoop3.X,这个SH脚本方式被废弃了,改用了hdfs命令

hdfs --daemon start namenode

运行完成后,用jps检查当前进程中是否已经运行了namenode

 jps
4483 NameNode
4776 Jps

有任何异常,按照提示去查看日志文件的内容,分析出错原因/usr/local/apps/hadoop-2.7.3/logs/hadoop-root-namenode-CentOS.log

权限问题:若以root用户执行,可能导致权限冲突,需切换至Hadoop专用用户(如hadoop)再启动

su hadoop

主机名解析失败:/etc/hosts中未正确映射主机名,按上文3.2检查处理

端口冲突:NameNode默认端口9000是否被占用,检查端口

netstat  -tulnp|grep  9000

修改core-site.xml中的fs.defaultFS的端口配置或终止占用进程

3、 启动datanode 守护 进程 服务

DataNode进程,负责存储和管理数据块。

我们使用的是hadoop2.X,启动命令需要进入/usr/local/apps/hadoop-2.7.3/sbin目录下去运行相应的SH脚本

./hadoop-daemon.sh start dataenode

关闭是

./hadoop-daemon.sh stop datanode

Hadoop3.X,这个SH脚本方式被废弃了,改用了hdfs命令

hdfs --daemon start datanode

运行完成后,用jps检查当前进程中是否已经运行了datanode

 jps
20887 NameNode
21415 Jps
21231 DataNode

有任何异常,按照提示去查看日志文件的内容,分析出错原因/usr/local/apps/hadoop-2.7.3/logs/hadoop-root-datanode-CentOS.log

‌端口冲突‌:datanode默认端口50010是否被占用,检查端口

netstat -tulnp|grep 50010

需修改hdfs-site.xml中的dfs.datanode.address端口配置或终止占用进程

‌ClusterID不匹配‌:若DataNode的VERSION文件与NameNode的ClusterID不一致,需手动同步或重新格式化。

4、启动secondarynamenode守护进程服务

SecondaryNameNode进程,负责定期合并NameNode的编辑日志(EditLog)和文件系统镜像(FsImage),生成新的FsImage并回传给NameNode,以减轻NameNode的负担。

我们使用的是hadoop2.X,启动命令需要进入/usr/local/apps/hadoop-2.7.3/sbin目录下去运行相应的SH脚本

./hadoop-daemon.sh start secondarynamenode

关闭是

./hadoop-daemon.sh stop secondarynamenode

Hadoop3.X,这个SH脚本方式被废弃了,改用了hdfs命令

hdfs --daemon start secondarynamenode

运行完成后,用jps检查当前进程中是否已经运行了secondarynamenode

 jps
40703 SecondaryNameNode

端口冲突‌:确认hdfs-site.xml中的dfs.namenode.secondary.http-address或dfs.secondary.http.address配置正确(默认端口为50090)。若默认端口被占用,需修改配置或终止占用进程。

‌ClusterID不匹配‌:若SecondaryNameNode的VERSION文件与NameNode的ClusterID不一致,需手动同步或重新格式化。

‌重复格式化问题‌:多次格式化可能导致元数据不一致,需清理/tmp和Hadoop数据目录后重新初始化。

5、Hadoop的Web管理界面

如果以上进程服务都正常启动了,就可以访问到Hadoop的Web管理界面了,在宿主机里启动浏览器,输入虚拟机的IP地址和端口号即可访问,如果宿主机配置了hosts,亦可以通过机器名来访问。
在这里插入图片描述
Hadoop的Web管理界面(默认端口50070)是监控和管理HDFS集群的重要工具。以下是对该页面各功能的详细解析:

(一)核心功能模块

1、‌Overview(概览)‌

  • ‌ClusterID‌:显示集群唯一标识符

  • ‌Version‌:Hadoop版本信息

  • ‌Compiled‌:编译时间和开发者信息

  • ‌ClusterStatus‌:集群存储使用情况(总容量/已用/剩余)

2、‌Datanodes(数据节点)

  • 显示所有活跃/死亡节点列表

  • 每个节点的存储容量、使用率、最后心跳时间

  • 节点状态可视化(正常/异常)

3、‌Snapshot(快照)

  • 文件系统快照管理界面

  • 创建/删除/查看快照功能

(二)高级功能入口

1、‌Utilities(工具集)‌

  • ‌Browsethefilesystem‌:可视化文件浏览器

  • ‌Logs‌:查看NameNode日志

  • ‌Configuration‌:查看当前生效的配置参数

  • ‌Threadstacks‌:查看线程堆栈信息

2、‌StartupProgress(启动进度)‌

  • NameNode启动各阶段耗时分析

  • 关键初始化步骤状态监控

(三)运维操作指南

1、‌文件系统检查

  • 通过"BrowseDirectory"可查看所有HDFS文件

  • 支持文件权限、副本数、块大小等元数据检查

2、‌节点管理

  • 手动下线节点(Decommission)

  • 节点维护模式设置

3、‌日志分析

  • 实时查看NameNode运行日志

  • 支持日志级别动态调整

(四)安全配置建议

1、‌访问控制

  • 建议启用Kerberos认证

  • 配置防火墙规则限制50070端口访问

2、‌监控集成

  • 可通过JMX接口对接监控系统

  • 关键指标:FSImage加载时间、EditLog堆积量

注:该页面是Hadoop2.x的经典界面,在Hadoop3.x中端口可能变更为9870,且界面布局有所调整。生产环境建议通过API(http://hadoop-server-00:50070/jmx)获取更详细的监控数据。

3.2启动yarn

1、YARN的作用

前文已经提及YARN(YetAnotherResourceNegotiator)是Hadoop生态系统的核心资源管理系统,主要作用是为分布式计算框架提供统一的资源管理和调度平台。其核心功能与架构可归纳如下:

(一)核心作用‌

  • 集中管理集群的CPU、内存、磁盘等资源,通过全局视图动态分配资源给不同应用程序。

  • 支持多租户环境,通过资源池和队列实现租户间的资源隔离与优先级控制。

  • 采用主从架构(ResourceManager+NodeManager),根据调度策略(如FIFO、公平调度)分配资源。

  • 支持多种计算框架(如MapReduce、Spark、Flink),实现资源复用与任务并行。

  • 通过ZooKeeper实现ResourceManager的HA(高可用),避免单点故障。

  • 根据集群负载动态调整资源分配,优化利用率。

(二)关键组件‌

  • ‌ResourceManager(RM):全局资源调度器,负责接收应用请求并分配Container资源。包含调度器(Scheduler)和应用管理器(ApplicationsManager)。

  • ‌NodeManager(NM):节点代理,监控本地资源并执行RM分配的任务。通过心跳机制向RM汇报资源状态。

  • ‌ApplicationMaster(AM):每个应用独立实例,负责向RM申请资源并管理任务生命周期。任务失败时自动重新申请资源。

  • ‌Container:资源抽象单元,封装CPU、内存等资源供任务使用。

2、启动主节点进程

yarn的主节点进程,负责集群资源分配和任务调度。默认监听8032(RPC端口)和8088(WebUI端口)。

我们使用的是hadoop2.X,启动命令需要进入/usr/local/apps/hadoop-2.7.3/sbin目录下去运行相应的SH脚本

./yarn-daemon.sh start resourcemanager

关闭是

./yarn-daemon.sh stop resourcemanager

Hadoop3.X,这个SH脚本方式被废弃了,改用了yarn命令

yarn --daemon start resourcemanager

运行完成后,用jps检查当前进程中是否已经运行了ResourceManager

 jps
3576 ResourceManager

3、启动从节点进程

yarn的从节点进程,负责管理单个节点上的资源容器(Container)。默认向ResourceManager发送心跳(间隔3秒),汇报节点资源状态。

我们使用的是hadoop2.X,启动命令需要进入/usr/local/apps/hadoop-2.7.3/sbin目录下去运行相应的SH脚本

./yarn-daemon.sh start nodemanager

关闭是

./yarn-daemon.sh stop nodemanager

Hadoop3.X,这个SH脚本方式被废弃了,改用了yarn命令

yarn --daemon start nodemanager

运行完成后,用jps检查当前进程中是否已经运行了nodemanager

 jps
3842 NodeManager

4、yarn的web管理界面

如果以上yarn的主从进程都正常启动,就可以访问到yarn的Web管理界面了,在宿主机里启动浏览器,输入虚拟机的IP地址和端口号即可访问http://<主机名>:8088,如果宿主机配置了hosts,亦可以通过机器名来访问。
在这里插入图片描述
YARN的Web管理界面是监控和管理Hadoop集群资源的核心工具,主要功能模块和特性如下:

(一)核心功能模块

  • 实时显示集群资源使用率(内存/CPU),包括已用资源、总资源和保留资源比例

  • 节点状态分类统计:活跃节点(ActiveNodes)、退役中节点(Decommissioning)、失联节点(LostNodes)等

  • 应用状态追踪:提交(Submitted)、挂起(Pending)、运行中(Running)、已完成(Completed)四类状态统计

  • 容器运行监控:显示当前运行的Container数量及资源占用详情

  • 调度策略展示:包括FIFO、FairScheduler或CapacityScheduler类型

  • 资源分配规则:最小/最大资源分配值(Memory/VCores)

(二)关键数据维度

  • 集群资源: MemoryTotal/Used,VCores分配量

  • 节点健康状态: UnhealthyNodes,RebootedNodes

  • 应用详情: 用户/队列/优先级/运行时长

(三)高级功能

  • 日志聚合查看:通过HistoryServer服务查看已完成应用的日志,需配合HDFS日志聚合功能启用

  • 节点热力图:可视化展示各节点资源负载情况,支持按内存/CPU维度筛选

  • 队列资源配置:可查看和修改队列资源容量、最大资源上限等参数(需管理员权限)

通过该界面,运维人员可以快速定位资源瓶颈、监控应用执行状态,并调整调度策略。具体界面布局和功能可能因Hadoop版本不同存在差异。

3.3运行MapReduce例子

在$HADOOP_HOME/share/hadoop/mapreduce/目录下有个hadoop-mapreduce-examples-2.7.3.jar示例程序,这些示例涵盖了从基本到高级的各种MapReduce应用场景,是学习和测试Hadoop集群功能的绝佳资源。我将在后续课程内做详细讲解。

1、运行一个蒙特卡洛方法估算π值的示例

hadoop  jar  $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  pi  10  100

运行后,我们就可以在yarn的web页面上看到此计算任务的运行情况
在这里插入图片描述
点击ID,进入此任务的详细页面,可以看到Map的进展和Reduce的进展
在这里插入图片描述
由于蒙特卡洛计算π值的运算量还是很大的,我们现在单节点上运行,是很耗时的,等我们配置好集群后再运行相同的例子,就能看出其优势了。

运行完成后,输出内容节选如下:

[root@hadoop-server-00sbin]#hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jarpi10100
NumberofMaps=10
SamplesperMap=100
WroteinputforMap#0
WroteinputforMap#1
WroteinputforMap#2
WroteinputforMap#3
WroteinputforMap#4
WroteinputforMap#5
WroteinputforMap#6
WroteinputforMap#7
WroteinputforMap#8
WroteinputforMap#9
StartingJob
25/08/1408:19:02INFOclient.RMProxy:ConnectingtoResourceManagerathadoop-server-00/192.168.200.30:8032
25/08/1408:19:04INFOinput.FileInputFormat:Totalinputpathstoprocess:10
25/08/1408:19:04INFOmapreduce.JobSubmitter:numberofsplits:10
25/08/1408:19:05INFOmapreduce.JobSubmitter:Submittingtokensforjob:job_1755130657115_0001
25/08/1408:19:06INFOimpl.YarnClientImpl:Submittedapplicationapplication_1755130657115_0001
Totalcommittedheapusage(bytes)=2006450176
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ShuffleErrors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
FileInputFormatCounters
BytesRead=1180
FileOutputFormatCounters
BytesWritten=97
Job Finished in 278.835seconds
Estimated value of Pi is 3.14800000000000000000

本次计算一共分了10个Map,每个Map有100个样本,共计算了278.835秒,计算的结果是3.148

2、计算过程

该程序基于蒙特卡洛模拟方法来估算π值,具体原理如下:

在一个边长为1的正方形内画一个四分之一圆(半径为1)随机向正方形内投掷大量点,统计落在四分之一圆内的点的数量.根据几何概率估算π值.计算公式:π≈4×(落在圆内的点数/总点数)。

MapReduce实现细节

1.Map阶段

每个map任务执行以下操作:

生成指定数量(numSamples)的随机点(x,y),其中x和y都在[0,1]区间内,对每个点检查是否满足x²+y²≤1(即是否在四分之一圆内),统计满足条件的点数。

每个map任务最终输出两个计数器:inside:在圆内的点数,total:生成的总点数。

2.Reduce阶段

Reduce任务汇总所有map任务的结果:累加所有 inside 计数器,累加所有 tota- 计数器,计算最终的π值:π≈4×(总inside数/总total数)。

示例计算过程以 pi 10 100 为例:

10个map任务,每个生成100个随机点

总点数=10×100=1000

假设汇总后落在圆内的点数为785

计算结果:π≈4×(785/1000)=3.14

数学解释

为什么这个方法有效?正方形面积=1×1=1,四分之一圆面积=(π×1²)/4=π/4,点在圆内的概率=(π/4)/1=π/4,因此π=4×(点在圆内的概率)。

样本点越多,结果越精确,由于随机性,每次运行结果可能略有不同,典型结果范围:当样本足够大时,通常在3.14附近波动。

性能特点

完全并行化:每个map任务独立计算,适合分布式处理

无数据依赖:不需要在map任务间传输数据,只有最终统计

计算密集型:主要开销在于随机数生成和条件判断

线性扩展性:增加计算节点可以线性提高精度

这个示例很好地展示了MapReduce的:分布式计算能力,简单的编程模型,适用于数据并行处理的场景。通过这个例子,可以直观理解Hadoop如何将一个大问题分解为许多可以并行处理的小问题,然后汇总结果。
至此,我们单节点的Hadoop服务器就配置并且验证好了,请继续阅读《大数据Hadoop安装部署-3-集群配置》

更多推荐