Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试
创始人
2024-03-17 06:12:07
0

一、SparkOnYarn搭建

安装前需要提前安装好 hadoop 环境,关于 HDFSYarn 集群的搭建可以参考下面我的博客:

https://blog.csdn.net/qq_43692950/article/details/127158935

下面是我 Hadoop 的安装结构

主机规划设置主机名角色
192.168.40.172node1NameNode、DataNode、ResourceManager、NodeManager
192.168.40.173node2SecondaryNameNode、DataNode、NodeManager
192.168.40.174node3DataNode、NodeManager

开始前请确保 hadoop 已经成功启动起来。

在这里插入图片描述

在这里插入图片描述

准备一台服务器,可以和 Hadoop 装在一台机子上,下面有需要读取 Hadoop 的配置,如果是台纯净的服务,需要将 Hadoop 的配置文件放上去。Yarn 需要配置历史服务器,如果没有配置通过修改下面文件开启:

修改 Hadoop 安装目录 etc/hadoop/yarn-site.xml 文件:

vim yarn-site.xml

添加下面配置:


yarn.log.server.urlhttp://node1:19888/jobhistory/logs


yarn.nodemanager.pmem-check-enabledfalse

yarn.nodemanager.vmem-check-enabledfalse

在这里插入图片描述

该需要同步到集群的其他节点:

scp /export/server/hadoop-3.1.4/etc/hadoop/yarn-site.xml root@node2:/export/server/hadoop-3.1.4/etc/hadoop/yarn-site.xml
scp /export/server/hadoop-3.1.4/etc/hadoop/yarn-site.xml root@node3:/export/server/hadoop-3.1.4/etc/hadoop/yarn-site.xml

重启 Hadoop 集群:

stop-all.shstart-all.sh

下载 Spark 安装包,这里我用的 3.0.1 版本:

http://spark.apache.org/downloads.html

先将下载后的安装包上传至 node1 节点,解压安装包:

tar -zxvf spark-3.0.1-bin-hadoop2.7.tgz

进入到加压目录下的 conf 下,修改配置:

修改 spark-defaults.conf

mv spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf

添加内容:

spark.eventLog.enabled                  true
spark.eventLog.dir                      hdfs://node1:8020/sparklog/
spark.eventLog.compress                 true
spark.yarn.historyServer.address        node1:18080
spark.yarn.jars                         hdfs://node1:8020/spark/jars/*

在这里插入图片描述

修改 spark-env.sh

vi spark-env.sh
## 设置JAVA安装目录
JAVA_HOME=/usr/lib/jvm/java-1.8.0## HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要
HADOOP_CONF_DIR=/export/server/hadoop-3.1.4/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop-3.1.4/etc/hadoop## 配置spark历史日志存储地址
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

这里的 sparklog 需要手动创建:

hadoop fs -mkdir -p /sparklog

在这里插入图片描述

修改日志的级别:

mv log4j.properties.template log4j.properties
vi log4j.properties

在这里插入图片描述

配置Spark 的依赖 jar 包,将 jar 都上传到 HDFS 中:

在HDFS上创建存储spark相关jar包的目录:

hadoop fs -mkdir -p /spark/jars/

上传$SPARK_HOME/jars所有jar包到HDFS:

hadoop fs -put /export/spark/spark-3.0.1-bin-hadoop2.7/jars/* /spark/jars/

在这里插入图片描述

启动MRHistoryServer服务,在node1执行命令

mr-jobhistory-daemon.sh start historyserver

在这里插入图片描述

进入到 Spark 解压目录,启动Spark HistoryServer服务:

sbin/start-history-server.sh

在这里插入图片描述

MRHistoryServer服务WEB UI页面:

http://node1:19888

在这里插入图片描述

Spark HistoryServer服务WEB UI页面:

http://node1:18080/

在这里插入图片描述

二、使用三种语言测试环境

1. java 和 Scala 项目

创建一个普通的Maven项目,在 pom 中添加 ScalaSpark 的依赖:


org.scala-langscala-library2.12.11

org.apache.sparkspark-core_2.123.0.1

main 下面创建 scala 包,专门存放 scala 程序,java 下专门存放 java 程序:
在这里插入图片描述

Scala 测试程序

object RddTestScala {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("spark")val sc = new SparkContext(conf)sc.setLogLevel("WARN")val texts= sc.parallelize(Seq("abc", "abc", "ff", "ee", "ff"))val counts = texts.map((_,1)).reduceByKey(_ + _)println(counts.collectAsMap())}
}

Java 测试程序

public class RddTestJava {public static void main(String[] args) {SparkConf conf = new SparkConf().setAppName("spark");JavaSparkContext sc = new JavaSparkContext(conf);sc.setLogLevel("WARN");JavaRDD texts= sc.parallelize(Arrays.asList("abc", "abc", "ff", "ee", "ff"));JavaPairRDD counts = texts.mapToPair(s -> new Tuple2<>(s, 1)).reduceByKey(Integer::sum);System.out.println(counts.collectAsMap());}
}

在这里插入图片描述
由于默认情况下使用 maven 编译不会编译 scala 程序,在 build 中添加 scala 的插件:

src/main/javaorg.apache.maven.pluginsmaven-compiler-plugin3.5.188net.alchim31.mavenscala-maven-plugin3.2.2compiletestCompile-dependencyfile${project.build.directory}/.scala_dependenciesorg.apache.maven.pluginsmaven-surefire-plugin2.18.1falsetrue**/*Test.***/*Suite.*org.apache.maven.pluginsmaven-shade-plugin2.3packageshade*:*META-INF/*.SFMETA-INF/*.DSAMETA-INF/*.RSAcom.bxc.RddTestJava

打成 jar 包:

mvn clean package

将打包后的jar包上传至 node1 节点,进到 Spark 解压目录下:

运行 Scala 脚本

bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 1 \
--executor-cores 1 \
--class com.bxc.RddTestScala \
/export/spark/spark-submit-demo-1.0-SNAPSHOT.jar

在这里插入图片描述

运行 Java 脚本

bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 1 \
--executor-cores 1 \
--class com.bxc.RddTestJava \
/export/spark/spark-submit-demo-1.0-SNAPSHOT.jar

在这里插入图片描述

2. Python项目

编写 Python 脚本:

from pyspark import SparkConf, SparkContextif __name__ == '__main__':conf = SparkConf().setAppName('spark')sc = SparkContext(conf=conf)sc.setLogLevel("WARN")texts = sc.parallelize(["abc", "abc", "ff", "ee", "ff"])counts = texts.map(lambda s:(s, 1)).reduceByKey(lambda v1,v2:v1+v2)print(counts.collectAsMap())

将脚本上传至 node1 节点,,进到 Spark 解压目录下:

bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 1 \
--executor-cores 1 \
/export/spark/RddTestPy.py

在这里插入图片描述

查看web界面:

http://node1:8088/cluster

在这里插入图片描述

三、YARN 模式下的两种运行模式

1. client

在这里插入图片描述
例如:

bin/spark-submit \
--master client\
--deploy-mode cluster \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 1 \
--executor-cores 1 \
--class com.bxc.RddTestJava \
/export/spark/spark-submit-demo-1.0-SNAPSHOT.jar

2. cluster

在这里插入图片描述
例如:

bin/spark-submit \
--master cluster\
--deploy-mode cluster \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 1 \
--executor-cores 1 \
--class com.bxc.RddTestJava \
/export/spark/spark-submit-demo-1.0-SNAPSHOT.jar

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...