Linux上运行第一个Spark程序

Linux上运行第一个Spark应用程序

源文件准备

将源文件上传至/spark/data文件目录下

1
2
[root@node01 spark-2.4.0]# ls data/
graphx hello.txt mllib streaming

Demo代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
// 1.创建SparkConf对象
SparkConf sparkConf = new SparkConf().setAppName("JavaWordCountWithLambda").setMaster("local[*]");
// 2.创建JavaSparkContext对象
JavaSparkContext sc = new JavaSparkContext(sparkConf);
// 3.读取源文件
JavaRDD<String> lines = sc.textFile("data/hello.txt");
// 4.拆分单词,使用lambda表达式
JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(",")).iterator());
// 5.将单词转换成(word,1)的形式
JavaPairRDD<String, Integer> pairs = words.mapToPair(word -> new Tuple2<>(word, 1));
// 6.word count操作
JavaPairRDD<String, Integer> counts = pairs.reduceByKey((i1, i2) -> i1 + i2);
// 7.输出结果
for (Tuple2<String, Integer> output : counts.collect()){
System.out.println(output._1 + ":" + output._2);
}
sc.stop();
}

jar包准备

使用IDEA将编写好的Spark程序打成jar包上传到之前部署好的Spark集群指定目录。这里我将打包好的jar包放在了examples/test目录下。

1
2
[root@node01 spark-2.4.0]# ls examples/test/
spark-core-1.0-SNAPSHOT.jar

不同模式运行

参数详解

一个常规的spark-submit操作可能包含如下参数:

1
2
3
4
5
6
7
8
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
参数名 说明
–class 应用程序的主类(例如org.apache.spark.examples.SparkPi)
–master 集群的主URL(例如spark://host:port, yarn, yarn-cluster,yarn-client, local)指明local模式或者Standalone模式等
–deploy-mode 是在工作节点(cluster)上部署driver还是在本地客户端(client)部署,默认client
–conf KV格式的任意Spark配置属性。例如spark.executor.memory = 2g
–name 应用程序的名称
–jars driver依赖的第三方jar包,用逗号分隔
–driver-memory driver的内存大小,默认为1G
–driver-java-options 传给driver的额外的Java选项。
如果是yarn-client模式,默认读取的是spark-class文件中的JAVA_OPTS;
如果是yarn-cluster模式,则读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值
–driver-library-path 传给driver的额外的库路径
–driver-class-path 传给driver的额外的类路径
–executor-memory 每个 executor 的内存,默认是1G
–driver-cores Driver的核数,默认是1。在 yarn 或者 standalone 下使用
–queue 指定了放在哪个队列里执行,默认为“default”,在yarn下使用
–num-executors 启动的 executor 数量。默认为2。在 yarn 下使用
–archives 被每个executor提取到工作目录的档案列表,用逗号隔开,在yarn下使用
–principal 在安全hdfs上运行时用于登录kdc的主体,在yarn下使用
–keytab 包含上述主体的keytab的文件的完整路径。此keytab将通过安全的分布式缓存复制到运行应用程序主服务器的节点,用于定期更新登录票证和委派令牌。在yarn下使用
application-jar jar包路径。
application-arguments 传递到main class的main方法参数。

local模式运行

1
2
3
4
5
6
7
8
9
10
[root@node01 spark-2.4.0]# ./bin/spark-submit \
--class com.spark.core.JavaWordCount \
--master local[*] \
./examples/test/spark-core-1.0-SNAPSHOT.jar

## 查看执行结果
scala:1
hello:3
java:1
spark:1

在使用Local模式时,master后面的参数可能稍有不同。这里简单说明:

Master URL 具体含义
local 使用一个线程本地运行Spark应用程序
local[K] 使用 K 个 worker 线程本地运行 Spark(理想情况下,设置这个值的数量为您机器的 core 数量)。
local[K,F] 使用 K 个 worker 线程本地运行 Spark并允许最多失败 F次
local[*] 使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark。
local[*,F] 使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark并允许最多失败 F次。

Standalone模式运行

1
2
3
4
5
6
7
8
9
10
[root@node01 spark-2.4.0]# ./bin/spark-submit \
--class com.spark.core.JavaWordCount \
--master spark://node01:7077 \
./examples/test/spark-core-1.0-SNAPSHOT.jar

## 查看执行结果
scala:1
hello:3
java:1
spark:1

注意:这里不管是指定local模式还是Standalone模式我们都没有启动Spark集群(无需启动)。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 henrrywan

请我喝杯咖啡吧~

支付宝
微信