如何在Zeppelin中运行自定义Scala Spark作业并添加依赖JAR?
我来帮你梳理下在Zeppelin中配置所需依赖并运行你的Spark作业的具体方法,有几种常见的方式,你可以根据场景选择:
1. 全局配置Spark Interpreter(所有Notebook通用)
如果希望所有Zeppelin Notebook都能使用这些依赖,可以通过Interpreter全局配置来设置:
- 打开Zeppelin主页,点击右上角的Interpreter选项
- 在列表中找到spark interpreter,点击右侧的Edit按钮
- 切换到Dependencies区域:
- 添加Maven仓库依赖:在Artifact输入框中填入你之前
spark-submit里的--packages内容,多个用逗号分隔:com.databricks:spark-redshift_2.11:3.0.0-preview1,com.databricks:spark-avro_2.11:3.2.0 - 添加本地JAR包:先把从S3下载的
RedshiftJDBC42-1.2.10.1009.jar和CustomJar.jar放到Zeppelin服务器可访问的目录(比如/opt/zeppelin/custom-jars/),然后在Artifact里添加它们的绝对路径(前缀用file:):file:/opt/zeppelin/custom-jars/RedshiftJDBC42-1.2.10.1009.jar,file:/opt/zeppelin/custom-jars/CustomJar.jar
- 添加Maven仓库依赖:在Artifact输入框中填入你之前
- 配置完成后点击Save,然后重启Spark interpreter(点击Interpreter列表中spark项旁的Restart按钮)
2. 单个Notebook内配置依赖(仅当前Notebook生效)
如果只需要在特定Notebook中使用这些依赖,可以用Zeppelin的%dep魔法命令:
在Notebook的第一个段落输入以下内容并运行:
%dep // 加载Maven仓库的包 z.load("com.databricks:spark-redshift_2.11:3.0.0-preview1") z.load("com.databricks:spark-avro_2.11:3.2.0") // 加载本地JAR(替换成你的实际路径) z.load("file:/path/to/your/RedshiftJDBC42-1.2.10.1009.jar") z.load("file:/path/to/your/CustomJar.jar") // 如果JAR在S3上,也可以直接加载(前提Zeppelin有权限访问该桶) // z.load("s3://jars/RedshiftJDBC42-1.2.10.1009.jar") // z.load("s3://jars/CustomJar.jar")
等待依赖加载完成后,后续段落就能正常使用这些类了。
3. 运行你的CustomObject作业
依赖配置好后,在Zeppelin的Scala/Spark段落中直接调用你的类即可:
// 导入自定义类 import com.activities.CustomObject // 如果你的CustomObject是带main方法的主类,直接调用main CustomObject.main(Array()) // 如果是工具类,直接调用对应的业务方法即可 // CustomObject.yourBusinessMethod()
一些注意事项
- 确保Zeppelin的Spark interpreter使用的Scala版本和你的JAR包一致(你这里是2.11,别选错版本)
- 如果遇到依赖冲突,可以在Artifact中添加排除规则,比如:
com.databricks:spark-redshift_2.11:3.0.0-preview1:exclude=org.apache.hadoop:hadoop-client - 如果Zeppelin集群访问S3需要权限,要提前配置好IAM角色或访问密钥
内容的提问来源于stack exchange,提问作者Dark Shadows
相关产品推荐
相关产品推荐

