Spark v2.4.3应用程序开发入门-基于IDEA/Maven 构建简单应用
Spark 提供了丰富的API,让开发人员可以使用简洁的方式,来处理复杂的数据计算和分析。
在开始Spark应用开发之前,需要做好如下准备工作。
(1)搭建好Hadoop环境(如果需要访问HDFS);
(2)安装好Spark v2.4.3 最新版本;
一、首先通过IDEA创建一个Maven项目,并添加Spark 依赖jar包。
groupId: org.apache.spark
artifactId: spark-core_2.11
version: 2.4.3
二、编写Spark 应用代码
示例代码很简单,就是读取本地文件 rickie.txt,然后查找并统计文本文件中有多少行包含有“rickie”字符串。
package com.rickie.spark;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
String logFile = "file:///root/rickie.txt";
JavaSparkContext sc = new JavaSparkContext("local", "Spark Tutorial",
"/usr/local/spark", new String[]{"tutorial-1.0.jar"});
JavaRDD<String> logData = sc.textFile(logFile).cache();
long num = logData.filter(line->line.contains("rickie")).count();
System.out.println("Lines contain rickie: " + num);
System.out.println("Well done!");
}
}
Spark的运行模式取决于传递给SparkContext的Master URL的值。Master URL可以是以下任一种形式:
* local 使用一个Worker线程本地化运行SPARK(完全不并行);
* local[*] 使用逻辑CPU个数数量的线程来本地化运行Spark
* local[K] 使用K个Worker线程本地化运行Spark(理想情况下,K应该根据运行机器的CPU核数设定)
* spark://HOST:PORT 连接到指定的Spark standalone master,默认端口是7077。
* yarn-client 以客户端模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到。
* yarn-cluster 以集群模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到。
* mesos://HOST:PORT 连接到指定的Mesos集群。默认接口是5050。
当然,为了使应用程序能够更灵活地在各种部署环境下使用,不建议把与运行环境相关的设置直接在代码中写死。
三、编译打包并复制到Spark环境中
将应用打包成JAR包,jar包名称为:tutorial-1.0.jar
将上述jar 包复制到Spark 环境中。
四、通过 Spark-submit 运行应用
将生成的JAR 包通过 spark-submit 提交到Spark 中运行。
在开始运行之前,需要确保 /root/rickie.txt 文件存在。
spark-submit 命令参数如下。
spark-submit
--class <main-class> //需要运行的程序的主类,应用程序的入口点
--master <master-url> //Master URL,可以在代码中指定,也可以通过参数传入
--deploy-mode <deploy-mode> //部署模式
... # other options //其他参数
<application-jar> //应用程序JAR包
[application-arguments] //传递给主类的主方法的参数
/usr/local/spark/bin/spark-submit --class "com.rickie.spark.App" tutorial-1.0.jar
在命令执行完成后,会输出很多信息,其中可以找到Lines contain rickie 信息字样。
可以进一步修改/root/rickie.txt 文件,添加更多符合条件记录行,然后再次运行上述 spark-submit 命令,发现输出结果有变化。
/usr/local/spark/bin/spark-submit --class "com.rickie.spark.App" tutorial-1.0.jar
如果输出信息太多,不方便查看,可以通过 grep 命令进行过滤。
/usr/local/spark/bin/spark-submit --class "com.rickie.spark.App" tutorial-1.0.jar 2>&1 | grep "Lines contain rickie:"