Spark on Yarn 多机集群部署

news/2025/2/23 5:32:30

Spark on Yarn 多机集群部署

1. 规划机器角色

服务器IP 地址角色
Master192.168.1.100NameNode + ResourceManager + Spark Master
Worker1192.168.1.101DataNode + NodeManager + Spark Worker
Worker2192.168.1.102DataNode + NodeManager + Spark Worker

2. 配置所有机器

2.1 安装 Java

所有节点 上执行:

sudo apt update
sudo apt install -y openjdk-8-jdk

验证 Java:

java -version

2.2 免密 SSH

Master 节点执行:

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

然后将公钥 id_rsa.pub 复制到 所有 节点

ssh-copy-id hadoop@192.168.1.100
ssh-copy-id hadoop@192.168.1.101
ssh-copy-id hadoop@192.168.1.102

验证:

ssh hadoop@192.168.1.100
ssh hadoop@192.168.1.101
ssh hadoop@192.168.1.102

3. 安装 Hadoop 并配置 Yarn

3.1 在所有节点安装 Hadoop

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf hadoop-3.3.6.tar.gz
sudo mv hadoop-3.3.6 /usr/local/hadoop

3.2 配置 Master 节点

Master(192.168.1.100)上:

vim ~/.bashrc

添加:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/sbin:$PATH

复制到 Worker 节点

scp ~/.bashrc hadoop@192.168.1.101:~/
scp ~/.bashrc hadoop@192.168.1.102:~/

在 所有节点 执行

source ~/.bashrc

3.3 配置 core-site.xml

vim $HADOOP_HOME/etc/hadoop/core-site.xml

Master 上配置

xml<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.1.100:9000</value>
    </property>
</configuration>

分发到 Worker

scp $HADOOP_HOME/etc/hadoop/core-site.xml hadoop@192.168.1.101:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/core-site.xml hadoop@192.168.1.102:$HADOOP_HOME/etc/hadoop/

3.4 配置 hdfs-site.xml

vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

Master 配置

xml<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

分发到 Worker

scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml hadoop@192.168.1.101:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/hdfs-site.xml hadoop@192.168.1.102:$HADOOP_HOME/etc/hadoop/

3.5 配置 Yarn

Master 配置 yarn-site.xml

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
xml<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>192.168.1.100</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

分发到 Worker

scp $HADOOP_HOME/etc/hadoop/yarn-site.xml hadoop@192.168.1.101:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml hadoop@192.168.1.102:$HADOOP_HOME/etc/hadoop/

3.6 配置 slaves

vim $HADOOP_HOME/etc/hadoop/slaves

添加:

192.168.1.101
192.168.1.102

3.7 启动 Hadoop

hdfs namenode -format
start-dfs.sh
start-yarn.sh

如果遇到“ERROR: JAVA_HOME is not set and could not be found”的报错信息,执行下面的语句:

sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
#保存后将文件分发到Worker
scp $HADOOP_HOME/etc/hadoop/hadoop-env.sh test@192.168.1.101:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/hadoop-env.sh test@192.168.1.102:$HADOOP_HOME/etc/hadoop/

验证:

jps

4. 安装 Spark

4.1 在所有节点安装 Spark

wget https://archive.apache.org/dist/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz
tar -xzf spark-3.4.1-bin-hadoop3.tgz
sudo mv spark-3.4.1-bin-hadoop3 /usr/local/spark

分发 Spark 到 Worker

scp -r /usr/local/spark hadoop@192.168.1.101:/usr/local/
scp -r /usr/local/spark hadoop@192.168.1.102:/usr/local/

4.2 配置 Spark

修改 spark-env.sh

vim $SPARK_HOME/conf/spark-env.sh

添加:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_HOST=192.168.1.100

分发到 Worker

scp $SPARK_HOME/conf/spark-env.sh hadoop@192.168.1.101:$SPARK_HOME/conf/
scp $SPARK_HOME/conf/spark-env.sh hadoop@192.168.1.102:$SPARK_HOME/conf/

5. 启动 Spark 集群

Master 节点启动:

start-history-server.sh

在 Worker1、Worker2 上:

start-slave.sh spark://192.168.1.100:7077

6. 提交 Spark 作业

spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    $SPARK_HOME/examples/jars/spark-examples_2.12-3.4.1.jar 10

访问 UI:

  • Hadoop ResourceManager UI: http://192.168.1.100:8088
  • Spark History Server UI: http://192.168.1.100:18080
    ###########################################################################################################
    今日推荐
    小说:《灰烬世界》
    简介:无女主,东方克苏鲁,无系统,不无敌,怪诞美学,非规则怪谈,科技修真) 老爷子说过,有道行的人或者妖怪邪祟,他们死后会化作一捧灰,被称之为秽灰。 秽灰里蕴藏着他们毕生能量,食之,便可添命灯,增寿命。 若是放任不管,便为秽土转生! 不过有一种例外,他们从秽灰里生长出来,长着人的模样,却不是人的思想。 他们主张无神论,想颠覆世间,想扳倒众神,他们把器物拆解,拼装,组合,造物,打造出没有智慧的生命,供他们奴役。(又名怪诞修仙学)
    在这里插入图片描述

http://www.niftyadmin.cn/n/5863003.html

相关文章

漏扫问题-服务器中间件版本信息泄露(消除/隐藏Nginx版本号)

漏洞详情 使用Nginx部署应用程序&#xff0c;请求中默认会返回Nginx版本信息&#xff0c;攻击者可以根据版本号来了解相关漏洞并进行针对性攻击。 Nginx版本信息&#xff1a; 解决方法 使用 server_tokens off; 配置&#xff0c;配置项官网介绍&#xff1a;Module ngx_http_…

Rust 语法噪音这么多,是否适合复杂项目?

Rust 是一门被广泛认为具有高效性和内存安全的编程语言&#xff0c;但它的复杂语法常常被开发者称为“语法噪音”。这种设计上的严格要求&#xff0c;特别是其所有权系统、生命周期管理以及类型系统&#xff0c;虽然能够保证代码的安全性和性能&#xff0c;但也让很多初学者感到…

神经网络防“失忆“秘籍:弹性权重固化如何让AI学会“温故知新“

神经网络防"失忆"秘籍&#xff1a;弹性权重固化如何让AI学会"温故知新" “就像学霸给重点笔记贴荧光标签&#xff0c;EWC给重要神经网络参数上锁” 一、核心公式对比表 公式名称数学表达式通俗解释类比场景文献EWC主公式 L t o t a l L n e w λ 2 ∑ i…

MYSQL学习笔记(九):MYSQL表的“增删改查”

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇讲述一些在MYSQL的数据类型&#xff0c;和表的“增删改查”基本操作;虽然MYSQ…

Cursor提示词模板,开发GD32,C语言开发GD32 ARM单片机编程规范提示词 大厂风格代码规范

如果我让你开发的工程涉及到c语言的时候&#xff0c;请按照下面提示词执行。 C语言开发GD32 ARM单片机编程规范提示词 一、引言 本规范旨在为使用C语言开发GD32 ARM单片机的项目提供统一的编程标准&#xff0c;确保代码的可读性、可维护性、可靠性和高效性。规范涵盖代码风格…

基于EIDE插件,配置arm开发环境

参考文档: 这是什么? | Embedded IDE For VSCode 一、准备安装包 VSCodeUserSetup-x64-1.96.4.exe: (访问密码: 1666) ST-LINK官方驱动.zip: (访问密码: 1666) en.stm32cubemx-win-v6-12-0.zip: (访问密码: 1666) Keil.STM32F7xx_DFP.2.14.0.pack: (访问密码: 1666) STM32Cu…

图像处理:模拟色差的生成

图像处理&#xff1a;模拟色差的实战案例 在做瓷砖瑕疵检测的过程中&#xff0c;需要检测色差。但在实际生产环境中&#xff0c;瓷砖色差检测的数据量较少&#xff0c;无法直接获取足够的数据来训练和优化深度学习模型。于是就考虑通过人为生成色差数据的方式来扩充数据集&…

力扣hot100——LRU缓存(面试高频考题)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…