然后,在SimpleApp.scala代码文件中输入以下代码:
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
这段代码的功能是,计算/usr/local/spark/README文件中包含"a"的行数和包含"b"的行数。不同于Spark Shell,独立应用程序需要通过val sc = new SparkContext(conf)初始化 SparkContext。
3.用sbt打包Scala应用程序
SimpleApp.scala程序依赖于Spark API,因此,需要通过sbt进行编译打包。 首先,需要使用vim编辑器在~/sparkapp目录下新建文件simple.sbt,命令如下:
$ cd ~
$ vim ./sparkapp/simple.sbt
simple.sbt文件用于声明该独立应用程序的信息以及与 Spark的依赖关系,需要在simple.sbt文件中输入以下内容:
name := "Simple Project"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.2"
为了保证sbt能够正常运行,先执行如下命令检查整个应用程序的文件结构:
$ cd ~/sparkapp
$ find .
文件结构应该是类似如下所示的内容:
.
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
./simple.sbt
接下来,可以通过如下代码将整个应用程序打包成 JAR(首次运行时,sbt会自动下载相关的依赖包):
$ cd ~/sparkapp #一定把这个目录设置为当前目录
$ /usr/local/sbt/sbt package
对于刚刚安装的Spark和sbt而言,第一次执行上面命令时,系统会自动从网络上下载各种相关的文件,因此上面执行过程需要消耗几分钟时间,后面如果再次执行sbt package命令,速度就会快很多,因为不再需要下载相关文件。
打包成功以后,生成的JAR包的位置为~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar。
image-20210227164621036
4.通过spark-submit运行程序
最后,可以将生成的JAR包通过spark-submit提交到Spark中运行,命令如下:
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar
上面命令执行后会输出太多信息,可以不使用上面命令,而使用下面命令运行程序,这样就可以直接得到想要的结果:
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar 2>&1 | grep "Lines with a:"
最终得到的结果如下:
Lines with a: 62, Lines with b: 31
image-20210227164746869
4.1.2 用Java语言编写Spark独立应用程序
1. 安装Maven
Ubuntu中没有自带安装Maven,需要手动安装Maven。可以访问Maven官网下载安装文件,或者采用镜像地址(推荐首选第一梯队):
wget -c http://res.aihyzh.com/大数据技术原理与应用3/10/apache-maven-3.6.3-bin.zip #下载资源
下载apache-maven-3.6.3-bin.zip到Maven安装文件以后,保存到~/Downloads目录下。然后,可以选择安装在/usr/local/maven目录中,命令如下:
$ cd ~/Downloads # 进入下载目录
$ wget -c http://res.aihyzh.com/大数据技术原理与应用3/10/apache-maven-3.6.3-bin.zip #下载资源
$ sudo unzip ~/Downloads/apache-maven-3.6.3-bin.zip -d /usr/local
$ cd /usr/local
$ sudo mv apache-maven-3.6.3/ ./maven
$ sudo chown -R stu:stu ./maven
可选:
因默认Maven仓库下载过慢,国内可采用阿里镜像源,方式也很简单。
编辑/usr/local/maven/conf/settings.xml文件。在<mirrors></mirrors>标签中添加mirror 子节点:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
2.编写Java应用程序代码
在Linux终端中执行如下命令,在用户主文件夹下创建一个文件夹sparkapp2作为应用程序根目录:
$ cd ~ #进入用户主文件夹
$ mkdir -p ./sparkapp2/src/main/java
然后,使用vim编辑器在./sparkapp2/src/main/java目录下建立一个名为 SimpleApp.java的文件,命令如下:
$ vim ./sparkapp2/src/main/java/SimpleApp.java
在SimpleApp.java文件中输入如下代码:
/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.SparkConf;
public class SimpleApp {
public static void main(String[] args) {
String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
SparkConf conf=new SparkConf().setMaster("local").setAppName("SimpleApp");
JavaSparkContext sc=new JavaSparkContext(conf);
JavaRDD<String> logData = sc.textFile(logFile).cache();
long numAs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("a"); }
}).count();
long numBs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("b"); }
}).count();
System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
}
}
该程序依赖Spark Java API,因此,我们需要通过Maven进行编译打包。需要使用vim编辑器在~/sparkapp2目录中新建文件pom.xml,命令如下:
$ cd ~
$ vim ./sparkapp2/pom.xml
然后,在pom.xml文件中添加如下内容,用来声明该独立应用程序的信息以及与Spark的依赖关系:
<project>
<groupId>cn.edu.xmu</groupId>
<artifactId>simple-project</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Simple Project</name>
<packaging>jar</packaging>
<version>1.0</version>
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
</repository>
</repositories>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
</project>
3.使用Maven打包Java程序
为了保证Maven能够正常运行,先执行如下命令检查整个应用程序的文件结构:
$ cd ~/sparkapp2
$ find .
文件结构应该是类似如下的内容:
.
./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java
接下来,我们可以通过如下代码将整个应用程序打包成JAR包(注意:计算机需要保持连接网络的状态,而且首次运行打包命令时,Maven会自动下载依赖包,需要消耗几分钟的时间):
$ cd ~/sparkapp2 #一定把这个目录设置为当前目录
$ /usr/local/maven/bin/mvn package
4.通过spark-submit 运行程序
最后,可以将生成的JAR包通过spark-submit提交到Spark中运行,命令如下:
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar
上面命令执行后会输出太多信息,可以不使用上面命令,而使用下面命令运行程序,这样就可以直接得到想要的结果:
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar 2>&1 | grep "Lines with a"
最终得到的结果如下:
Lines with a: 62, Lines with b: 31
aaaaaa
于 2022-04-30 10:27:53 首次发布