spark_maven学习
简介
Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 功能
Maven 能够帮助开发者完成以下工作:
- 构建
- 文档生成
- 报告
- 依赖
- SCMs
- 发布
- 分发
- 邮件列表
约定配置
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
Maven规范化构建流程
maven 工程的目录结构
idea中自带的maven
idea中java项目自带maven,也可以新建一个maven项目,然后在maven项目中双击src->main->java ,在maven项目中创建 python等其他语言的模块集。
例如,在maven项目中我们又额外 创建了一个python模块集,如下:
pyspark中调用包间接使用maven
我们要使用一个包,例如(spark-sql-kafka):
1 | <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql-kafka-0-10 --> |
在pyspark中,我们运行如下:
1 | bin/spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.1 /opt/data/sparkstreaming/structured_receive_from_kafuka.py |
如果在运行中出现如下错误:
py4j.protocol.Py4JJavaError: An error occurred while calling o41.save. : java.lang.NoClassDefFoundError: scala/$less$colon$less
则说明新引入的jar包Scala版本,和spark的Scala版本出现冲突,我们去spark-shell 中去检查
说明我们的Scala 要是2.12 的版本,我也觉得挺奇怪,我明明下载的是2.13的版本的Scala,spark3.2.1默认用了Scala2.12。
此时,如果maven用到的jar包scala版本是2.13。
--packages org.apache.spark:spark-sql-kafka-0-10_2.13:3.2.1
就会报错:
py4j.protocol.Py4JJavaError: An error occurred while calling o41.save. : java.lang.NoClassDefFoundError: scala/$less$colon$less