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中的资源配置。 - 时钟同步:使用
ntpd或chrony确保所有节点的时钟同步。
三、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 的资源配置。
- 时钟同步:使用
ntpd或chrony确保所有节点的时钟同步。 - 监控集群状态,定期检查节点状态和资源使用情况,及时处理故障节点。
通过合理配置和优化,YARN 可以在多种场景下提供高效的资源管理和任务调度能力,为大规模数据处理提供强有力的支持。
相关文章:
YARN单机和集群环境部署教程
目录 一、YARN 单机环境部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop配置 hadoop-env.sh配置 core-site.xml配置 hdfs-site.xml配置 yarn-site.xml配置 mapred-site.xml 6. 格式化 HDFS7. 启动 Hadoop 和 YARN8. 验证 YARN9. 运行一个简单的…...
Android SurfaceFlinger——Vsync信号发送(五十二)
通过上一篇文章我们创建了一个 EventThread 线程,并且它持有了 SurfaceFlinger 中 resyncWithRateLimit() 方法的指针。这里我们主要来看一下 EventThread 对信号的处理。 一、发送Vsync信号 当 SurfaceFlinger 执行完 queueBuffer() 方法之后,通过 onFrameAvailable 又会回…...
零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页
简介: 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…...
YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式
作者:CSDN _养乐多_ 本文将介绍如何使用 labelme 进行图片数据标签制作的方法,并将标签的格式从 JSON 格式转换为 YOLO 格式。 文章目录 一、安装labelme二、使用流程三、json格式转为YOLO格式四、按比例划分数据集(训练、验证、测试&#…...
论文解读(15)-UrbanGPT
加油,这一篇也是感受一下大语言模型的力量! 原文: UrbanGPT: Spatio-Temporal Large Language Models UrbanGPT: Spatio-Temporal Large Language Models (arxiv.org) 参考: 时空预测与大语言模型的奇妙碰撞!UrbanG…...
大数据湖体系规划与建设方案(51页PPT)
方案介绍: 大数据湖通过集中存储各种类型的数据(包括结构化、半结构化和非结构化数据),提供了更加灵活、可扩展的数据处理和分析能力。其核心理念是“存储一切,分析一切,创建所需”,即将所有数…...
8月最新ChatGPT系统源码SparkAi系统,支持AI换脸+智能体GPTs应用+AI绘画+AI视频+文档分析
一、文章序言 人工智能技术正在快速发展,AI语言模型、AI绘画和AI视频已经在多个领域得到了广泛应用。这些技术不仅在科技创新方面表现出色,还在艺术创作、内容生产和商业应用中展示出巨大的潜力。 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的…...
Linux知识复习第3期
目录 网络管理 (1)查看IP信息: (2)配置临时生效的网络连接 (3)修改配置文件配置网络连接(network服务) (4)shell脚本批量IP设置 网络管理 Linux网络管理-CSDN博客 (1)查看IP信息: route -n ip addr (2)配置临时生效的网络连接 ip -4…...
【独家原创】基于NRBO-Transformer多特征分类预测【24年新算法】 (多输入单输出)Matlab代码
【独家原创】NRBO-Transformer分类 Matlab代码 基于牛顿拉夫逊优化算法优化Transformer的数据分类预测,Matlab代码,可直接运行,适合小白新手 NRBO优化的超参数为:自注意力机制中的头数、正则化系数、初始化学习率 1.程序已经调试…...
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released 一、重大改变基于Kafka3.8构建 二、新功能和改进JDBC SinkDebezium ServerGoogle SpannerVitess Debezium 3.0.0.Alpha2 版本包含许多新功能和改进,包括基于 Kafka 3.8 构建、JDBC 接收器连接器的…...
SumatraPDF暗黑模式以及如何还原快捷键
快捷键 英文输入模式下直接按 i 即可反色 添加标注 选中文字,右键...
LeetCode Medium|【300. 最长递增子序列】
力扣题目链接 本题有一个简单的解法是动态规划,时间复杂度 O(n^2),笔者在之前曾做过相关记录:300.最长递增子序列 现在我们来讨论 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))的解法 局部最优:如果我们希望上升子序列尽可能的长&a…...
jenkins自动化构建docker镜像并上传至harbor仓库
1、插件下载 首先进入jenkins之后需要现在“Maven”、“GitLab”、“Jdk”、“SSH”、“Git”的相关插件,这里不再赘述,需要什么插件直接安装即可 搜索对应插件后选择直接安装即可 2、系统全局配置 2.1 Maven配置 配置maven安装的相应的setting文件 …...
Java高级Day23-HashMap
74.HashMap Map接口常用实现类:HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复,但是值可以重复,允许使用null健和null值 如果添加相同的key,会覆…...
【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…...
Spring boot tomcat使用自定义线程池监控线程数量告警
Spring boot tocmat 使用自定义线程池 线程池 接近最大线程数量 警戒值告警 修改tomcat线程池中线程名字 配置文件上代码 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 tomcat_thread_max_number_warn:…...
K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
问题场景: 本地测试由于之前安装过K8S今天重启无法使用了,于是重新安装了一下,子节点加入主节点报错: I0808 23:13:04.299356 19180 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H …...
C++ Poco服务端框架中JSON的使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、JSON是什么?二、使用步骤总结 前言 上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POS…...
leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝
题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图,每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径,但这条路径最多只能经过 k 个中转站。你需要返回这…...
赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!
八月开端,由知无不言与xmars和钱老师课堂联合主办的2024年AI科技大会暨亚马逊新增长大会在深圳宝安顺利开展,为期2天的跨境峰会吸引了上千位优秀的卖家朋友前来感受一场盛夏大狂欢。在本次跨境峰会里,邀请了多位不同领域的先锋人物࿰…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
