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 可以在多种场景下提供高效的资源管理和任务调度能力,为大规模数据处理提供强有力的支持。