Spark基础理论: https://blog.csdn.net/weixin_45102492/article/details/104318250
Spark的Yarn模式: https://blog.csdn.net/weixin_45102492/article/details/104319175
Spark的Standalone模式: https://blog.csdn.net/weixin_45102492/article/details/104319485
Spark安装
官网下载spark :
http://spark.apache.org/downloads.html
把spark-3.0.0-preview2-bin-hadoop2.7.tgz上传到/opt/module/Spark目录下并解压
[root@node01 Spark]# tar -zxvf spark-3.0.0-preview2-bin-hadoop2.7.tgz
执行spark官方案例测试spark环境
(1)基本语法
bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
在spark-3.0.0-preview2-bin-hadoop2.7目录下执行
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.0.0-preview2.jar \
100
(2)参数说明:
–master 指定Master的地址,默认为Local
–class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
–deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*
–conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”
application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar
application-arguments: 传给main()方法的参数
–executor-memory 1G 指定每个executor可用内存为1G
–total-executor-cores 2 指定每个executor使用的cup核数为2个
Local模式
概述
Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。
它可以通过以下集中方式设置Mastero
local:所有计算都运行在一个线程当 中,没有任何并行计算,通常我们在本机执行
一些测试代码, 或者练手,就用这种模式,
1oca[K]:指定使用几个线程来运行计算,比如1ocal[4]就 是运行4个Worker线程。通
常我们的Cpu有几个Core,就指定几个线程,最大化利用Cpu的计算能力;
local[*]:这种模式直接帮你按照Cpu最多Cores来设置线程数了。
shell操作
[root@node01 spark-3.0.0-preview2-bin-hadoop2.7]# bin/spark-shell
20/02/14 08:43:18 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://node01:4040
Spark context available as 'sc' (master = local[*], app id = local-1581641005512).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.0.0-preview2
/_/
Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.
scala> sc.textFile("input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res1: Array[(String, Int)] = Array((world,1), (hello,4), (spark,1), (scaka,1), (version,1))
textFile(“input”)中的input是在spark-3.0.0-preview2-bin-hadoop2.7下的input目录,没有的话可以创建,并添加两个文本1.txt、2.txt,并在文本中输入以空格分隔的英文
注意:退出spark-shell命令
:quit
千万不要Ctrl+c或者Ctrl+z退出 这样退出后下次启动会报错误
IDEA创建项目进行WordCount
在pom文件添加依赖
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0-preview2</version>
</dependency>
</dependencies>
<build>
<finalName>WordCount</finalName>
<plugins>
<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>
</execution>
</executions>
</plugin>
</plugins>
</build>
创建WordCount类并编写代码
package com.zut.bigdata.spark
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
//创建SparkConf对象
val conf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
//创建spark上文
val sc = new SparkContext(conf)
//读取文件,将文件一行一行的读取出来
val lines = sc.textFile("input")
//将一行一行的数据分解成一个个单词
val words = lines.flatMap(_.split(" "))
//将单词进行转换,装换成(k,v)形式
val wordToOne = words.map((_,1))
//对转换结构后的数据进行分组聚合
val result = wordToOne.reduceByKey(_+_)
//将打印结果采集后打印到控制台
result.collect().foreach(println)
}
}