案例实操
Spark Shell 仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在 IDE
中编制程序,然后打成 jar 包,然后提交到集群,最常用的是创建一个 Maven 项目,利用
Maven 来管理 jar 包的依赖。
1 编写 WordCount 程序
1)创建一个 Maven 项目 WordCount 并导入依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atlxl</groupId> <artifactId>spark01</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.1</version> </dependency> </dependencies> <build> <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> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <archive> <manifest> <mainClass>WordCount</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
2)编写代码
3)打包插件
4)打包到集群测试
2 本地调试
本地 Spark 程序调试需要使用 local 提交模式,即将本机当做运行环
境,Master 和 Worker 都为本机。运行时直接加断点调试即可。如下:
创建 SparkConf 的时候设置额外属性,表明本地执行:
val conf = new SparkConf().setAppName("WC").setMaster("local[*]")
如果本机操作系统是 windows,如果在程序中使用了 hadoop 相关的
东西,比如写入文件到 HDFS,则会遇到如下异常:
出现这个问题的原因,并不是程序的错误,而是用到了 hadoop 相关
的服务,解决办法是将附加里面的 hadoop-common-bin-2.7.3-x64.zip 解压
到任意目录。