Spark搭建(三种模式)
Local模式
主要用于本地开发测试
本文档主要介绍如何在IDEA中配置Spark开发环境
- 打开IDEA,创建Maven项目
- 在IDEA设置中安装Scala插件
- 在pom.xml文件中添加Scala依赖
<dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.12.10</version></dependency><dependency><groupId>org.scala-lang</groupId><artifactId>scala-compiler</artifactId><version>2.12.10</version></dependency><dependency><groupId>org.scala-lang</groupId><artifactId>scala-reflect</artifactId><version>2.12.10</version></dependency>
- 在pom.xml中添加Scala编译插件> 需要加在build->plugins标签下
<!-- Scala Compiler --><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><version>2.15.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin>
- 在pom.xml文件中添加Spark-Core依赖
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.3</version></dependency>
- 编写第一个Spark程序- 准备words.txt数据,每一行包含多个单词,单词之间以逗号分隔
java,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoopjava,spark,java,hadoop
- 编写代码> 注意words.txt文件路径,按自身情况修改packagecom.shujia.coreimportorg.apache.spark.rdd.RDDimportorg.apache.spark.{SparkConf, SparkContext}object Demo01WordCount {def main(args: Array[String]):Unit={// 1、构建Spark环境// 配置Spark任务val conf: SparkConf =new SparkConf() conf.setAppName("Demo01WordCount")// 设置任务名 conf.setMaster("local")// 设置Spark的运行方式// 创建SparkContext --> Spark程序的入口val sc: SparkContext =new SparkContext(conf)// 2、构建Spark程序// 加载数据val lineRDD: RDD[String]= sc.textFile("spark/data/words.txt")// 将每个单词提取出来val wordsRDD: RDD[String]= lineRDD.flatMap(_.split(","))// 按每个单词进行分组val groupRDD: RDD[(String, Iterable[String])]= wordsRDD.groupBy(word => word)// 统计每个单词的数量val wordCntRDD: RDD[String]= groupRDD.map(kv =>s"${kv._1},${kv._2.size}")// 将结果输出 wordCntRDD.foreach(println)}}
- 右键运行,结果如下 - 常见错误- windows环境下运行任务通常会有如下报错
23/10/0711:23:40WARNShell:Did not find winutils.exe:{}java.io.FileNotFoundException:java.io.FileNotFoundException:HADOOP_HOME and hadoop.home.dir are unset.
- 原因分析- Spark程序运行时找不到winutils.exe程序或依赖
- 解决方法- 下载winutils.exe程序- 在任意无中文路径位置新建bin目录,例如> 目录路径位置随意,但一定不要有中文目录
D:/shujia/bigdata/hadoop3/bin
- 将winutils.exe程序放入上述bin目录中- 在系统环境变量中增加一项HADOOP_HOME配置- 将D:/shujia/bigdata/hadoop3/
目录作为HADOOP_HOME的值> 注意不要将bin目录包含在其中- 重启IDEA- 重新运行程序,检查错误是否消失
Standalone模式
- 1、上传解压
tar-zxvf spark-3.1.3-bin-without-hadoop.tgz -C /usr/local/softmv spark-3.1.3-bin-without-hadoop spark-3.1.3
- 2、修改配置文件
# 重命名文件cp spark-env.sh.template spark-env.shcp workers.template workers
增加配置:vim spark-env.sh
> master相当于RM worker相当于NMexportSPARK_MASTER_HOST=masterexportSPARK_MASTER_PORT=7077exportSPARK_WORKER_CORES=1exportSPARK_WORKER_MEMORY=2gexportJAVA_HOME=/usr/local/soft/jdk1.8.0_171exportSPARK_DIST_CLASSPATH=$(/usr/local/soft/hadoop-3.1.3/bin/hadoop classpath)
增加从节点配置:vim workers
> 以node1、node2作为从节点node1node2
- 3、复制到其它节点```cd /usr/local/soft/scp-r spark-3.1.3 node1:
pwd
scp-r spark-3.1.3 node2:`pwd```` - 4、配置环境变量
- 5、在主节点执行启动命令> 注意:start-all.sh 与Hadoop的sbin目录中的启动命令有冲突
cd /usr/local/soft/spark-3.1.3/./sbin/start-all.sh
- 6、访问Spark Web UI
http://master:8080/
- 7、测试及使用切换目录:
cd /usr/local/soft/spark-3.1.3/examples/jars
standalone client模式 :日志在本地输出,一般用于上线前测试- 提交自带的SparkPi任务spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --total-executor-cores 1 spark-examples_2.12-3.1.3.jar 100
standalone cluster模式:上线使用,不会在本地打印日志- 提交自带的SparkPi任务spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512M --total-executor-cores 1 --deploy-mode cluster spark-examples_2.12-3.1.3.jar 100
- 8、其他运行方式- spark-shell spark 提供的一个交互式的命令行,可以直接写代码
spark-shell --master spark://master:7077
On Yarn模式
在公司一般不适用standalone模式
因为公司一般已经有yarn 不需要搞两个资源管理框架
Spark整合yarn只需要在一个节点整合, 可以删除node1 和node2中所有的Spark 文件
- 1、停止Spark Standalone模式集群
# 切换目录cd /usr/local/soft/spark-3.1.3/# 停止集群./sbin/stop-all.sh
- 2、增加hadoop 配置文件地址
vim spark-env.sh# 增加HADOOP_CONF_DIRexport HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.3/etc/hadoop
- 3、关闭Yarn
stop-yarn.sh
- 4、修改Yarn配置
cd /usr/local/soft/hadoop-3.1.3/etc/hadoop/vim yarn-site.xml# 加入如下配置 <property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>
- 5、同步到其他节点```scp-r yarn-site.xml node1:
pwd
scp-r yarn-site.xml node2:`pwd```` - 6、启动Yarn
start-yarn.sh
- 7、测试及使用切换目录:
cd /usr/local/soft/spark-3.1.3/examples/jars
Spark on Yarn Client模式:日志在本地输出,一班用于上线前测试- 提交自带的SparkPi任务spark-submit --masteryarn --deploy-mode client --class org.apache.spark.examples.SparkPi --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100
Spark on Yarn Cluster模式:上线使用,不会在本地打印日志- 提交自带的SparkPi任务spark-submit --masteryarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi --executor-memory 512M --num-executors 2 spark-examples_2.12-3.1.3.jar 100
- 获取yarn程序执行日志 执行成功之后才能获取到yarn logs -applicationId application_1652086375126_0002
- 8、开启Spark On Yarn的WEB UI修改配置文件:
# 切换目录cd /usr/local/soft/spark-3.1.3/conf# 去除后缀cp spark-defaults.conf.template spark-defaults.conf# 修改spark-defaults.confvim spark-defaults.conf# 加入以下配置spark.eventLog.enabled truespark.eventLog.dir hdfs://master:9000/user/spark/applicationHistoryspark.yarn.historyServer.address master:18080spark.eventLog.compress truespark.history.fs.logDirectory hdfs://master:9000/user/spark/applicationHistoryspark.history.retainedApplications 15
创建HDFS目录用于存储Spark History日志hdfs dfs -mkdir-p /user/spark/applicationHistory
启动Spark History Servercd /usr/local/soft/spark-3.1.3/./sbin/start-history-server.sh
版权归原作者 只会hello world的程序员 所有, 如有侵权,请联系我们删除。