MapReduce & YARN 的部署

1、部署说明

Hadoop HDFS分布式文件系统,我们会启动:

  • NameNode进程作为管理节点
  • DataNode进程作为工作节点
  • SecondaryNamenode作为辅助

    同理,Hadoop YARN分布式资源调度,会启动:
  • ResourceManager进程作为管理节点
  • NodeManager进程作为工作节点
  • ProxyServer、JobHistoryServer这两个辅助节点

MapReduce运行在YARN容器内,无需启动独立进程。

所以关于MapReduce和YARN的部署,其实就是2件事情:

  • 关于MapReduce: 修改相关配置文件,但是没有进程可以启动。
  • 关于YARN: 修改相关配置文件, 并启动ResourceManager、NodeManager进程以及辅助进程(代理服务器、历史服务器)。

2、部署

2.1、MapReduce配置文件

2.1.1、配置mapred-env.sh文件

在 $HADOOP_HOME/etc/hadoop 文件夹内,修改mapred-env.sh文件

powershell 复制代码
vim mapred-env.sh

添加如下环境变量

xml 复制代码
## 设置jdk路径
export JAVA_HOME=/export/server/jdk
## 设置JobHistoryServer进程内存为1G
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
## 设置日志级别为INF
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
2.1.2、配置mapred-site.xml文件

mapred-site.xml文件,添加如下配置信息

powershell 复制代码
vim mapred-site.xml
xml 复制代码
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description></description>
  </property>

  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>bigdatanode1:10020</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>bigdatanode1:19888</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description></description>
  </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>
</configuration>

2.2、YARN配置文件

2.2.1、配置yarn-env.sh文件

在 $HADOOP_HOME/etc/hadoop 文件夹内,修改:

yarn-env.sh文件

powershell 复制代码
vim yarn-env.sh

yarn-env.sh文件,添加如下4行环境变量内容:

xml 复制代码
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
2.2.2、配置yarn-site.xml文件

yarn-site.xml文件,配置如下

xml 复制代码
<property>
    <name>yarn.log.server.url</name>
    <value>http://bigdatanode1:19888/jobhistory/logs</value>
    <description></description>
</property>

  <property>
    <name>yarn.web-proxy.address</name>
    <value>bigdatanode1:8089</value>
    <description>proxy server hostname and port</description>
  </property>


  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>

  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>
  
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>bigdatanode1</value>
    <description></description>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description></description>
  </property>

  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
    <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>Comma-separated list of paths on the local filesystem where logs are written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>10800</value>
    <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
  </property>



  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>Shuffle service that needs to be set for Map Reduce applications.</description>
  </property>

2.3、分发到node2,node3节点

MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中。

powershell 复制代码
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml bigdatanode2:`pwd`/
powershell 复制代码
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml bigdatanode3:`pwd`/

查看其他节点是否分发成功

2.4、集群启动命令介绍

2.4.1、介绍

常用的进程启动命令如下:

  • 一键启动YARN集群: $HADOOP_HOME/sbin/start-yarn.sh

    • 会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager
    • 会基于workers文件配置的主机启动NodeManager
  • 一键停止YARN集群: $HADOOP_HOME/sbin/stop-yarn.sh

  • 在当前机器,单独启动或停止进程

    • $HADOOP_HOME/bin/yarn --daemon start|stop resourcemanager|nodemanager|proxyserver
    • start和stop决定启动和停止
    • 可控制resourcemanager、nodemanager、proxyserver三种进程
  • 历史服务器启动和停止

    • $HADOOP_HOME/bin/mapred --daemon start|stop historyserver
2.4.2、启动

在node1服务器,以hadoop用户执行

  • 首先执行
powershell 复制代码
start-yarn.sh
  • 其次执行
powershell 复制代码
mapred --daemon start historyserver
  • 一键停止
powershell 复制代码
stop-yarn.sh
2.4.3、查看YARN的WEB UI页面

打开 http://bigdatanode1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)

3、提交MapReduce任务到YARN执行

3.1、提交MapReduce程序至YARN运行

在部署并成功启动YARN集群后,我们就可以在YARN上运行各类应用程序了。

YARN作为资源调度管控框架,其本身提供资源供许多程序运行,常见的有:

  • MapReduce程序
  • Spark程序
  • Flink程序

Hadoop官方内置了一些预置的MapReduce程序代码,我们无需编程,只需要通过命令即可使用。

常用的有2个MapReduce内置程序:

  • wordcount:单词计数程序。
    统计指定文件内各个单词出现的次数。
  • pi:求圆周率
    通过蒙特卡罗算法(统计模拟法)求圆周率。

这些内置的示例MapReduce程序代码,都在:

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar 这个文件内。

可以通过 hadoop jar 命令来运行它,提交MapReduce程序到YARN中。

语法: hadoop jar 程序文件 java类名 [程序参数] ... [程序参数]

3.2、提交wordcount示例程序

3.2.1、单词计数示例程序

单词计数示例程序的功能很简单:

  • 给定数据输入的路径(HDFS)、给定结果输出的路径(HDFS)
  • 将输入路径内的数据中的单词进行计数,将结果写到输出路径

我们可以准备一份数据文件,并上传到HDFS中。

  • 创建两个文件夹
powershell 复制代码
 hdfs dfs -mkdir -p /input/wordcount
powershell 复制代码
hdfs dfs -mkdir -p /output
  • 创建一个文件,输入一些内容
powershell 复制代码
vim words.txt
  • 上传到/input/wordcount/
powershell 复制代码
hdfs dfs -put words.txt /input/wordcount/
  • 执行如下命令,提交示例MapReduce程序WordCount到YARN中执行
powershell 复制代码
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount hdfs://bigdatanode1:8020/input/wordcount/ hdfs://bigdatanode1:8020/output/wc
  • 执行完成后,可以查看HDFS上的输出结果
powershell 复制代码
hdfs dfs -cat /output/wc/part-r-00000
  • _SUCCESS文件是标记文件,表示运行成功,本身是空文件
  • part-r-00000,是结果文件,结果存储在以part开头的文件中
3.2.2、查看运行日志

此功能基于:

  1. 配置文件中配置了日志聚合功能,并设置了历史服务器
  2. 启动了代理服务器和历史服务器
  3. 历史服务器进程会将日志收集整理,形成可以查看的网页内容供我们查看。


3.2.3、提交求圆周率示例程序

可以执行如下命令,使用蒙特卡罗算法模拟计算求PI(圆周率)

powershell 复制代码
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 3 1000
  • 参数pi表示要运行的Java类,这里表示运行jar包中的求pi程序
  • 参数3,表示设置几个map任务
  • 参数1000,表示模拟求PI的样本数(越大求的PI越准确,但是速度越慢)



3.3、蒙特卡罗算法求PI的基础原理

Monte Carlo蒙特卡罗算法(统计模拟法)

Monte Carlo算法的基本思想是: 以模拟的"实验"形式、以大量随机样本的统计形式,来得到问题的求解。

比如,求圆周率,以数学的方式是非常复杂的,但是我们可以以简单的形式去求解:

示例代码

java 复制代码
import java.util.Random;  
  
public class MonteCarloPi {  
    public static void main(String[] args) {  
        int totalPoints = 1000000; // 总共投点次数  
        int insidePoints = 0; // 落在圆内的点数  
  
        Random rand = new Random();  
  
        for (int i = 0; i < totalPoints; i++) {  
            // 在-1到1之间随机生成x, y值  
            double x = 2.0 * rand.nextDouble() - 1.0;  
            double y = 2.0 * rand.nextDouble() - 1.0;  
              
            // 判断该点是否在单位圆内(圆心在(0, 0),半径为1)  
            if (x * x + y * y <= 1.0) {  
                insidePoints++;  
            }  
        }  
  
        // 使用蒙特卡罗方法估算π的值,公式来源于圆的面积公式πr^2,这里r=1,所以π=4*(圆内点数/总点数)  
        double piEstimate = 4.0 * insidePoints / totalPoints;  
        System.out.println("π的估计值为: " + piEstimate);  
    }  
}

结束!!!!!!!

hy:37


复制代码
						人最大的痛苦,就是无法跨越"知道"和"做到"的鸿沟。
相关推荐
大霸王龙44 分钟前
软件工程的软件生命周期通常分为以下主要阶段
大数据·人工智能·旅游
点赋科技1 小时前
沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践
大数据·人工智能
YSGZJJ2 小时前
股指期货技术分析与短线操作方法介绍
大数据·人工智能
Doker 多克2 小时前
Flink CDC —部署模式
大数据·flink
Guheyunyi2 小时前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
Channing Lewis3 小时前
如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
大数据·人工智能·科技
禺垣3 小时前
区块链技术概述
大数据·人工智能·分布式·物联网·去中心化·区块链
IvanCodes4 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
冬至喵喵6 小时前
【hive】函数集锦:窗口函数、列转行、日期函数
大数据·数据仓库·hive·hadoop