前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sbt编译Spark App的依赖问题

sbt编译Spark App的依赖问题

作者头像
陆道峰
发布于 2020-06-17 14:01:56
发布于 2020-06-17 14:01:56
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

背景简介

Spark App(用Spark APIs编写的)需要submit到Spark Cluster运行,对于Scala编写的代码,提交之前要用sbt或者maven把以下内容:

  • 源代码
  • 依赖的jar包

全部打包成一个大的jar文件,这样代码就不会因为没有依赖无法在集群中运行。

问题

我司用Scala编写Spark streaming应用,实现读取Kafka数据,处理后存储到cassandra集群中。这里需要用到一个包spark-streaming-kafka,之前用的spark1.6.0的版本。sbt中的配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libraryDependencies ++= Seq(
 // Spark dependency
 "com.eaio.uuid" % "uuid" % "3.2",
 "org.apache.spark" %% "spark-core" % "1.6.0" % "provided",
 "org.apache.spark" %% "spark-sql" % "1.6.0" % "provided",
 "org.apache.spark" %% "spark-streaming" % "1.6.0" % "provided",
 "org.apache.spark" %% "spark-streaming-kafka" % "1.6.0",
 "com.datastax.spark" %% "spark-cassandra-connector" % "1.6.0-M2",
  // Third-party libraries
 "com.github.scopt" %% "scopt" % "3.4.0"
)

升级到Spark 2.0.0后需要更新软件包版本,于是将sbt构建配置中的依赖部分改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libraryDependencies ++= Seq(
 // Spark dependency
 "com.eaio.uuid" % "uuid" % "3.2",
 "org.apache.spark" %% "spark-core" % "2.0.0" % "provided",
 "org.apache.spark" %% "spark-sql" % "2.0.0" % "provided",
 "org.apache.spark" %% "spark-streaming" % "2.0.0" % "provided",
 "org.apache.spark" %% "spark-streaming-kafka" % "2.0.0",
 "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.0-M2",
  // Third-party libraries
 "com.github.scopt" %% "scopt" % "3.4.0"
)

本以为这样修改后重新构建就没问题了。但是我太天真了,构建后报错,提示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
[warn]     ::          UNRESOLVED DEPENDENCIES         ::
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
[warn]     :: org.apache.spark#spark-streaming-kafka_2.10;2.0.0: not found
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]     Note: Unresolved dependencies path:
[warn]         org.apache.spark:spark-streaming-kafka_2.10:2.0.0 (/home/linker/workspace/linkerwp/linkerStreaming/build.sbt#L12-23)
[warn]           +- Linker Networks Inc.:linker-streaming_2.10:0.0.1
sbt.ResolveException: unresolved dependency: org.apache.spark#spark-streaming-kafka_2.10;2.0.0: not found

说明这个包是不存在的,于是马上到maven repo上去找。常见的Maven公共repo有:

  • search.maven.org…用于搜索你的依赖包。
  • https://mvnrepository.com/…maven仓库。

进入网址输入spark-streaming-kafka搜索后数来好几和选项,前面4个结果都是不支持Spark 2.0.0的,这让我误以为Spark 2.0.0还不支持Kafka,这个想法被前面几个搜索结果误导了。因为对于2.0.0的Spark,Kafka添加了具体的版本号!spark-streaming-kafkaspark-streaming-kafka-0-8就可以找到了(实际上这个版本也在maven repo的搜索结果,因为靠后我没有去看)!!

总结

  • 对于Java/Scala的编译问题,我曾经特别抗拒,因为maven和sbt的配置文件很冗杂,没有Python的简洁明了。Python里20行的依赖文件在maven/sbt里至少200行,而且只要有一个地方没写正确就无法正确编译。
  • 现在发现要想正确编译,保证源代码没问题的情况下,就需要指定正确的依赖包和格式。这个需要到maven的仓库上去搜索,确认无误后再添加到配置文件中。
  • 要学会发散、拓展思考。当看到sbt编译失败的时候就应该根据报错信息推测出问题的原因:“依赖包版本不正确”,然后把版本指定正确就可以了。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与系统 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java spark-streaming接收TCP/Kafka数据
 本文将展示 1、如何使用spark-streaming接入TCP数据并进行过滤; 2、如何使用spark-streaming接入TCP数据并进行wordcount; 内容如下: 1、使用maven,先解决pom依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka_2.10</artifactId> <version>1
用户1225216
2018/03/05
8830
Spark实时(三):Structured Streaming入门案例
我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本,首先在Maven pom文件中导入以下依赖:
Lansonli
2025/05/24
960
Spark实时(三):Structured Streaming入门案例
Spark实战1:单节点本地模式搭建Spark运行环境
http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0-bin-hadoop1.tgz
星哥玩云
2022/07/03
8080
Spark实战1:单节点本地模式搭建Spark运行环境
Delta Lake 学习笔记(二)
笔者认为,在研究一个开源项目的之前,看看起依赖管理的文件,比如说 Maven 的 pom.xml 文件,或者是 Sbt 的 build.sbt 文件。
runzhliu
2020/08/05
8510
傻白甜,约不约?
首先来介绍下,今天的主角“傻白甜”(SBT:Simple Build Tools), 其功能与 Maven 和 Gradle 类似。其是由 Scala 编写,对于新手入门不是太友好,如果只是写纯 Java 的 Bug ,大可不必和自己过不去,但是如果你经常使用 Spark 等大数据工具,还是有点必要学学使用的。而且 Sbt 默认会从一些奇奇怪怪的地方下载依赖,相信大家的第一次,都不会很美好( Sbt 的项目构建异常缓慢,而且还经常会失败),笔者也不例外,所以有了这篇文章,希望对你有些帮助。
麒思妙想
2020/10/29
9140
傻白甜,约不约?
使用Kafka+Spark+Cassandra构建实时处理引擎
Apache Kafka 是一个可扩展,高性能,低延迟的平台,允许我们像消息系统一样读取和写入数据。我们可以很容易地在 Java 中使用 Kafka。
王知无-import_bigdata
2019/11/07
1.3K0
Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境。 在Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用中,我们已经写好了一个Spark的应用。 本文的目标是写一个基于kafka的scala工程,在一个spark standalone的集群环境中运行。 项目结构和文件说明 说明 这个工程包含了两个应用。 一个Consumer应用:CusomerApp - 实现
绿巨人
2018/05/18
8720
整合Kafka到spark-streaming实例
在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益。
挖掘大数据
2018/01/09
5.1K0
整合Kafka到spark-streaming实例
Spark Streaming流式计算的WordCount入门
Spark Streaming是一种近实时的流式计算模型,它将作业分解成一批一批的短小的批处理任务,然后并行计算,具有可扩展,高容错,高吞吐,实时性高等一系列优点,在某些场景可达到与Storm一样的处
我是攻城师
2018/05/14
1.8K0
Spark历险记之编译和远程任务提交
Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台
我是攻城师
2018/05/14
2K0
使用Apache Spark处理Excel文件的简易指南
在日常的工作中,表格内的工具是非常方便的x,但是当表格变得非常多的时候,就需要一些特定的处理。Excel作为功能强大的数据处理软件,广泛应用于各行各业,从企业管理到数据分析,可谓无处不在。然而,面对大型且复杂的数据,Excel的处理能力可能力不从心。
查拉图斯特拉说
2024/01/19
1K0
Spark2Streaming读非Kerberos环境的Kafka并写数据到Kudu
在前面的文章Fayson介绍了在Kerberos环境下《Spark2Streaming读Kerberos环境的Kafka并写数据到Kudu》,本篇文章Fayson主要介绍如何使用Spark2 Streaming访问非Kerberos环境的Kafka并将接收到的数据写入Kudu。
Fayson
2018/08/17
1K0
Spark2Streaming读非Kerberos环境的Kafka并写数据到Kudu
Spark Streaming 整合 Flume
Apache Flume 是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中。Spark Straming 提供了以下两种方式用于 Flume 的整合。
每天进步一点点
2022/07/27
3310
Spark Streaming 整合 Flume
SparkStreaming读Kafka数据写HBase
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面的文章Fayson介绍过《如何使用Spark Streaming读取HBase的数据并写入到HDFS》,关于SparkStreaming的应用场景很多,本篇文章Fayson主要介绍使用Scala语言开发一个SparkStreaming应用读取Kafka数据并写入HBase。
Fayson
2018/07/11
6.5K1
数据湖(十二):Spark3.1.2与Iceberg0.12.1整合
Spark可以操作Iceberg数据湖,这里使用的Iceberg的版本为0.12.1,此版本与Spark2.4版本之上兼容。由于在Spark2.4版本中在操作Iceberg时不支持DDL、增加分区及增加分区转换、Iceberg元数据查询、insert into/overwrite等操作,建议使用Spark3.x版本来整合Iceberg0.12.1版本,这里我们使用的Spark版本是3.1.2版本。
Lansonli
2022/07/08
2K2
数据湖(十二):Spark3.1.2与Iceberg0.12.1整合
Spark SQL+Hive历险记
基础依赖环境 Apache Hadoop2.7.1 Apache Spark1.6.0 Apache Hive1.2.1 Apache Hbase0.98.12 (1)提前安装好scala的版本,我这里是2.11.7 (2)下载spark-1.6.0源码,解压进入根目录编译 (3)dev/change-scala-version.sh 2.11 修改pom文件,修改对应的hadoop,hbase,hive的版本 执行编译支持hive功能的spark (4)mvn -Pyarn
我是攻城师
2018/05/14
1.3K0
java使用spark/spark-sql处理schema数据
1、spark是什么? Spark是基于内存计算的大数据并行计算框架。 1.1 Spark基于内存计算 相比于MapReduce基于IO计算,提高了在大数据环境下数据处理的实时性。 1.2 高容错性和高可伸缩性 与mapreduce框架相同,允许用户将Spark部署在大量廉价硬件之上,形成集群。 2、spark编程 每一个spark应用程序都包含一个驱动程序(driver program ),他会运行用户的main函数,并在集群上执行各种并行操作(parallel operations) spark提供的最
用户1225216
2018/03/05
1.1K0
idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Gen
idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class 查看build.sbt: name := "ScalaSBT" version := "1.0" scalaVersion := "2.11.8" libraryDependencies += "org.apache.spark" % "spark-core
hbbliyong
2018/03/06
4.2K0
idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Gen
Spark的运行环境及远程开发环境的搭建
2009 RAD实验室,引入内存存储 2010 开源 2011 AMP实验室,Spark Streaming 2013 Apache顶级项目
ZONGLYN
2019/08/08
2.3K0
Spark的运行环境及远程开发环境的搭建
Spark Streaming + Canal + Kafka打造Mysql增量数据实时进行监测分析
Spark中的Spark Streaming可以用于实时流项目的开发,实时流项目的数据源除了可以来源于日志、文件、网络端口等,常常也有这种需求,那就是实时分析处理MySQL中的增量数据。
王知无-import_bigdata
2021/04/21
1.6K0
Spark Streaming + Canal + Kafka打造Mysql增量数据实时进行监测分析
推荐阅读
相关推荐
java spark-streaming接收TCP/Kafka数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验