一、SparkOnYarn搭建

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

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

下面是我 Hadoop 的安装结构

主机 规划设置主机名 角色
192.168.40.172 node1 NameNode、DataNode、ResourceManager、NodeManager
192.168.40.173 node2 SecondaryNameNode、DataNode、NodeManager
192.168.40.174 node3 DataNode、NodeManager

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

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

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

vim yarn-site.xml

添加下面配置:

<!-- 设置yarn历史服务器地址 -->
<property><name>yarn.log.server.url</name><value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 关闭yarn内存检查 -->
<property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value>
</property>
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value>
</property>

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

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 的依赖:

<!--依赖Scala语言-->
<dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.12.11</version>
</dependency><!--SparkCore依赖-->
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.0.1</version>
</dependency>

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<String> texts= sc.parallelize(Arrays.asList("abc", "abc", "ff", "ee", "ff"));JavaPairRDD<String, Integer> counts = texts.mapToPair(s -> new Tuple2<>(s, 1)).reduceByKey(Integer::sum);System.out.println(counts.collectAsMap());}
}


由于默认情况下使用 maven 编译不会编译 scala 程序,在 build 中添加 scala 的插件:

<build><sourceDirectory>src/main/java</sourceDirectory><plugins><!-- 指定编译java的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>8</source><target>8</target></configuration></plugin><!-- 指定编译scala的插件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals><configuration><args><arg>-dependencyfile</arg><arg>${project.build.directory}/.scala_dependencies</arg></args></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><useFile>false</useFile><disableXmlReport>true</disableXmlReport><includes><include>**/*Test.*</include><include>**/*Suite.*</include></includes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.bxc.RddTestJava</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins>
</build>

打成 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

Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试相关推荐

  1. python写界面c这算法_插入算法分别从C,java,python三种语言进行书写

    真正学懂计算机的人(不只是"编程匠")都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题--而这种思维和手段的最佳演绎就是"算法&quo ...

  2. 会java c php三种语言_php java net三种语言的区别

    php java net是现在比较流的三种编程语言. 如果学的时候,该学哪种语言呢? PHP:PHP产生与1994年,其语法混合了C.Java.Perl 和他自创的一些编程语法:PHP是嵌入在HTML ...

  3. Java的三种代理模式完整源码分析

    Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...

  4. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  5. Java的三种代理模式【附源码分析】

    Java的三种代理模式&完整源码分析 代理模式分为两种,静态代理和动态代理,动态代理包括JDK动态代理和Cglib动态代理. 静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理 ...

  6. ABAP, Java和JavaScript三种语言的比较

    写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...

  7. Java的三种程序基本结构

    Java三种程序基本结构 今天我们了解下Java的三种程序基本结构 理解什么是基本结构 主要分为 :1. 顺序结构 2. 选择结构 3. 循环结构 一丶顺序结构 顺序结构就是程序从上到下一行一行的执行 ...

  8. java的三种技术架构

    Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发: JAVASE:Java Platform ...

  9. JAVA爬虫三种方法

    文章目录 前言 一.JDK 二.HttpClient 三.Jsoup 总结 前言 记录JAVA爬虫三种方式 一.JDK 使用JDK自带的URLConnection实现网络爬虫. public void ...

最新文章

  1. SpringMVC根据客户端的不同的请求使用不同的VIEW进行响应
  2. LINUX防火墙打开与关闭
  3. python概率随机抽奖_Python利用带权重随机数解决抽奖和游戏爆装备
  4. JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
  5. boost::hana::test::TestGroup用法的测试程序
  6. 在PEA上海做演讲主题:大型、高负载网站架构和应用初探
  7. 沉淀一年零八个月,我也拿到了博客专家
  8. oracle数据库相关知识,Oracle数据库相关知识点复习
  9. 04:数组逆序重放【一维数组】
  10. 告别大妈的灵魂拷问,Python 教你轻松完成垃圾分类!
  11. 6月7日 bc总结
  12. 50道pmp历年真题
  13. flask—本地图片,视频上传
  14. 深入分析AMM恒定乘积模型的滑点与无常损失
  15. Git 忽略某些文件,忽略已提交的文件记录,Git 不追踪变更
  16. 局域网中域和工作组的概念
  17. Batch Normalization原理与实战
  18. 终于有大lao把“计算机底层原理“全部总结出来了
  19. iOS 13 适配,关闭黑暗模式(夜间模式)
  20. ibus极品五笔切换单字模式

热门文章

  1. 2-1暴力破解原理和测试流程
  2. H310_710阵列卡配置.
  3. python初中必背语法_全初中必背英语语法知识汇总
  4. redis实现计时器
  5. Exchange Server 2013 运维系列——恢复已删除或禁用的邮箱
  6. 祝母亲身体健康,节日快乐
  7. 在bing中保存自己的搜索关键字.
  8. Java控制语句详解
  9. ObjectARX2016 OPM面板全攻略
  10. 网站出现问题,如何诊断?