当前位置: 首页 > news >正文

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

目录

    • 一、YARN 单机环境部署
      • 1. 环境准备
      • 2. 安装 Java
      • 3. 下载并安装 Hadoop
      • 4. 配置环境变量
      • 5. 配置 Hadoop
        • 配置 `hadoop-env.sh`
        • 配置 `core-site.xml`
        • 配置 `hdfs-site.xml`
        • 配置 `yarn-site.xml`
        • 配置 `mapred-site.xml`
      • 6. 格式化 HDFS
      • 7. 启动 Hadoop 和 YARN
      • 8. 验证 YARN
      • 9. 运行一个简单的 YARN 应用
      • 注意事项
    • 二、YARN 集群环境部署
      • 1. 环境准备
      • 2. 配置 SSH 免密码登录
      • 3. 安装 Hadoop
      • 4. 配置 Hadoop 集群
        • 配置 `hadoop-env.sh`
        • 配置 `core-site.xml`
        • 配置 `hdfs-site.xml`
        • 配置 `yarn-site.xml`
        • 配置 `mapred-site.xml`
        • 配置 `slaves` 文件
      • 5. 格式化 HDFS
      • 6. 启动 Hadoop 和 YARN
      • 7. 验证集群状态
      • 注意事项
    • 三、YARN 使用案例:Word Count
      • 使用 Java 实现 YARN Word Count
        • 1. 编写 Java 程序
        • 2. 编译并打包 Java 程序
        • 3. 运行 Java 程序
        • 4. 查看结果
      • 使用 Python 实现 YARN Word Count
        • 1. 编写 Python 程序
        • 2. 运行 Python 程序
        • 3. 查看结果
    • 总结
      • 部署过程中的注意事项

下面是一个详细的 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 正常运行:

  • ResourceManager: http://localhost:8088

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 界面,确保所有节点正常运行:

  • ResourceManager: http://master:8088

注意事项

  • **确保 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 TokenizerMapperextends 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 IntSumReducerextends 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 sysfor line in sys.stdin:words = line.strip().split()for word in words:print(f"{word}\t1")

创建 reducer.py

#!/usr/bin/env python3
import syscurrent_word = None
current_count = 0
word = Nonefor line in sys.stdin:word, count = line.strip().split('\t', 1)count = int(count)if current_word == word:current_count += countelse:if current_word:print(f"{current_word}\t{current_count}")current_word = wordcurrent_count = countif 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 可以在多种场景下提供高效的资源管理和任务调度能力,为大规模数据处理提供强有力的支持。

http://www.lryc.cn/news/418583.html

相关文章:

  • Android SurfaceFlinger——Vsync信号发送(五十二)
  • 零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页
  • YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式
  • 论文解读(15)-UrbanGPT
  • 大数据湖体系规划与建设方案(51页PPT)
  • 8月最新ChatGPT系统源码SparkAi系统,支持AI换脸+智能体GPTs应用+AI绘画+AI视频+文档分析
  • Linux知识复习第3期
  • 【独家原创】基于NRBO-Transformer多特征分类预测【24年新算法】 (多输入单输出)Matlab代码
  • Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released
  • SumatraPDF暗黑模式以及如何还原快捷键
  • LeetCode Medium|【300. 最长递增子序列】
  • jenkins自动化构建docker镜像并上传至harbor仓库
  • Java高级Day23-HashMap
  • 【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
  • Spring boot tomcat使用自定义线程池监控线程数量告警
  • K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
  • C++ Poco服务端框架中JSON的使用
  • leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝
  • 赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!
  • Nacos-配置中心
  • ava中的文件操作、IO流、递归和字符集
  • 生成式人工智能安全评估体系构建
  • NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测+交叉验证
  • synchronized实现原理及优化
  • NLP 之词的表示与语言模型
  • 每天一个数据分析题(四百七十一)- 假设检验
  • 《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计
  • 【视觉SLAM】 十四讲ch7习题
  • K-近邻算法(二)
  • WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)