YARN单机和集群环境部署教程

下面是一个详细的 YARN(Yet Another Resource Negotiator)单机和集群环境部署教程,包括部署过程中的注意事项以及一个使用案例。YARN 是 Hadoop 的资源管理器,可以调度和管理分布式应用程序的资源。

一、YARN 单机环境部署

1. 环境准备

  • 操作系统:Linux (推荐使用 Ubuntu 20.04 或 CentOS 7)
  • Java:YARN 需要 Java 环境,推荐使用 OpenJDK 8 或 11。
  • Hadoop:YARN 是 Hadoop 的一部分,所以需要安装 Hadoop。

2. 安装 Java

在 Ubuntu 中:

sudo apt update
sudo apt install openjdk-11-jdk

在 CentOS 中:

sudo yum install java-11-openjdk

验证 Java 安装:

java -version

3. 下载并安装 Hadoop

访问 Hadoop 官网 下载最新版本的 Hadoop。

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzvf hadoop-3.3.4.tar.gz
mv hadoop-3.3.4 /usr/local/hadoop

4. 配置环境变量

编辑 ~/.bashrc 文件,添加以下内容:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

应用更改:

source ~/.bashrc

5. 配置 Hadoop

编辑 Hadoop 的配置文件,位于 $HADOOP_HOME/etc/hadoop

配置 hadoop-env.sh

设置 Java 路径:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
配置 core-site.xml

配置 HDFS 的默认文件系统:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
配置 hdfs-site.xml

配置 HDFS 的副本数量和数据节点目录:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/hdfs/datanode</value>
    </property>
</configuration>
配置 yarn-site.xml

配置 YARN 资源管理器和节点管理器:

<configuration>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>localhost:8032</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
</configuration>
配置 mapred-site.xml

配置 MapReduce 框架为 YARN:

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

6. 格式化 HDFS

在首次使用 HDFS 前,需要格式化文件系统:

hdfs namenode -format

7. 启动 Hadoop 和 YARN

启动 HDFS 和 YARN:

start-dfs.sh
start-yarn.sh

8. 验证 YARN

访问 YARN ResourceManager Web 界面,确保 YARN 正常运行:

9. 运行一个简单的 YARN 应用

我们可以运行 Hadoop 自带的 MapReduce 示例程序,以验证 YARN 配置是否正确。

# 创建输入目录并上传文件
hdfs dfs -mkdir -p /user/hadoop/input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/hadoop/input

# 运行 WordCount 示例
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /user/hadoop/input /user/hadoop/output

# 查看输出
hdfs dfs -cat /user/hadoop/output/part-r-00000

注意事项

  • 确保 Java 和 Hadoop 环境配置正确
  • 检查防火墙设置,确保 YARN 的端口可访问。
  • 内存和资源配置:根据实际需求调整 yarn-site.xml 中的资源配置。

二、YARN 集群环境部署

1. 环境准备

  • 多台服务器:至少 3 台(1 个 ResourceManager,2 个 NodeManager)。
  • 网络:确保各节点之间可以互相访问。
  • 操作系统:Linux (Ubuntu 或 CentOS)。
  • Java:在所有节点上安装 Java。
  • Hadoop:在所有节点上安装 Hadoop。

2. 配置 SSH 免密码登录

在 ResourceManager 节点上生成 SSH 密钥:

ssh-keygen -t rsa

将公钥复制到所有 NodeManager 节点:

ssh-copy-id user@nodemanager1
ssh-copy-id user@nodemanager2

3. 安装 Hadoop

在所有节点上安装 Hadoop,步骤与单机安装相同。

4. 配置 Hadoop 集群

配置 hadoop-env.sh

设置 Java 路径:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
配置 core-site.xml

配置 HDFS 的默认文件系统:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>
配置 hdfs-site.xml

配置 HDFS 的副本数量和数据节点目录:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/hdfs/datanode</value>
    </property>
</configuration>
配置 yarn-site.xml

配置 YARN 资源管理器和节点管理器:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
</configuration>
配置 mapred-site.xml

配置 MapReduce 框架为 YARN:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
配置 slaves 文件

在 Master 节点上,编辑 $HADOOP_HOME/etc/hadoop/slaves 文件,添加所有 NodeManager 节点的主机名:

nodemanager1
nodemanager2

5. 格式化 HDFS

在 Master 节点上格式化 HDFS:

hdfs namenode -format

6. 启动 Hadoop 和 YARN

在 Master 节点上启动 HDFS 和 YARN:

start-dfs.sh
start-yarn.sh

7. 验证集群状态

访问 YARN ResourceManager Web 界面,确保所有节点正常运行:

注意事项

  • **确保 SSH

配置正确**,Master 节点需要通过 SSH 无密码访问 Worker 节点。

  • 内存和资源配置:根据实际需求调整 yarn-site.xml 中的资源配置。
  • 时钟同步:使用 ntpdchrony 确保所有节点的时钟同步。

三、YARN 使用案例:Word Count

使用 Java 实现 YARN Word Count

1. 编写 Java 程序
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.util.StringTokenizer;

public class WordCount {

    public static class TokenizerMapper
            extends Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context
        ) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer
            extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                           Context context
        ) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}
2. 编译并打包 Java 程序

确保你已经安装了 Maven,并在 pom.xml 文件中配置了 Hadoop 依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.3.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>3.3.4</version>
    </dependency>
</dependencies>

编译并打包:

mvn clean package
3. 运行 Java 程序

将输入文件上传到 HDFS:

hdfs dfs -put localfile.txt /user/hadoop/input

运行 YARN 应用:

hadoop jar target/wordcount-1.0-SNAPSHOT.jar WordCount /user/hadoop/input /user/hadoop/output
4. 查看结果
hdfs dfs -cat /user/hadoop/output/part-r-00000

使用 Python 实现 YARN Word Count

可以使用 Hadoop Streaming 来实现 Python 版的 Word Count。

1. 编写 Python 程序

创建 mapper.py

#!/usr/bin/env python3
import sys

for line in sys.stdin:
    words = line.strip().split()
    for word in words:
        print(f"{word}\t1")

创建 reducer.py

#!/usr/bin/env python3
import sys

current_word = None
current_count = 0
word = None

for line in sys.stdin:
    word, count = line.strip().split('\t', 1)
    count = int(count)

    if current_word == word:
        current_count += count
    else:
        if current_word:
            print(f"{current_word}\t{current_count}")
        current_word = word
        current_count = count

if current_word == word:
    print(f"{current_word}\t{current_count}")

给文件添加可执行权限:

chmod +x mapper.py reducer.py
2. 运行 Python 程序

将输入文件上传到 HDFS:

hdfs dfs -put localfile.txt /user/hadoop/input

运行 Hadoop Streaming:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-3.3.4.jar \
    -input /user/hadoop/input \
    -output /user/hadoop/output \
    -mapper mapper.py \
    -reducer reducer.py \
    -file mapper.py \
    -file reducer.py
3. 查看结果
hdfs dfs -cat /user/hadoop/output/part-00000

总结

通过以上步骤,我们成功部署了 YARN 单机和集群环境,并实现了一个简单的 Word Count 应用。YARN 提供了强大的资源管理和调度能力,可以支持多种分布式计算框架,如 Hadoop MapReduce、Apache Spark 等。

部署过程中的注意事项

  • 确保 Java 和 Hadoop 环境配置正确
  • 检查网络配置,确保各节点之间的通信正常。
  • 合理分配资源,根据集群规模和任务需求调整 YARN 的资源配置。
  • 时钟同步:使用 ntpdchrony 确保所有节点的时钟同步。
  • 监控集群状态,定期检查节点状态和资源使用情况,及时处理故障节点。

通过合理配置和优化,YARN 可以在多种场景下提供高效的资源管理和任务调度能力,为大规模数据处理提供强有力的支持。

  • 26
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Spark on YARN集群部署,您可以按照以下步骤进行操作: 1. 首先,确保已经安装和配置好Hadoop和YARN集群。确保YARN ResourceManager和NodeManager正在运行,并且集群配置正确。 2. 下载Spark二进制文件并解压缩到每个节点上。确保在所有节点上使用相同的Spark版本。 3. 在Spark的conf目录中,创建一个名为spark-env.sh的文件,并设置以下参数: ``` export HADOOP_CONF_DIR=<Hadoop配置目录> export YARN_CONF_DIR=<YARN配置目录> ``` 将 `<Hadoop配置目录>` 替换为Hadoop配置文件所在的目录路径,将 `<YARN配置目录>` 替换为YARN配置文件所在的目录路径。 4. 在Spark的conf目录中,打开spark-defaults.conf文件,并添加以下参数: ``` spark.master yarn spark.submit.deployMode cluster ``` 5. 根据您的需求,可以根据集群规模和资源分配需求,调整以下参数: ``` spark.executor.memory spark.executor.cores spark.executor.instances ``` 6. 您还可以根据需要设置其他Spark和YARN相关的参数,如队列设置、日志级别等。 7. 在启动Spark应用程序之前,确保您的环境变量中包含Spark和Hadoop的bin目录。您可以将这些目录添加到PATH环境变量中。 8. 使用以下命令提交Spark应用程序: ``` ./bin/spark-submit --class <main-class> --master yarn --deploy-mode cluster <application-jar> [application-arguments] ``` 将 `<main-class>` 替换为您的应用程序的主类,将 `<application-jar>` 替换为您的应用程序的JAR文件路径。 9. Spark提交应用程序后,YARN将为您的应用程序启动相应的Executor,并将资源分配给它们。您可以使用YARN的Web界面或命令行工具来监视和管理Spark应用程序。 请注意,这只是Spark on YARN集群部署的基本步骤,您可能需要根据您的特定环境和需求进行一些调整和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲人编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值