idea+scala+sbt+spark环境搭建时遇到的神奇的事情

之所以写这个博客,是因为用idea搭建spark开发环境实在是耗了我太多精力了,真的是神烦。首先强调一下我的版本,idea 2019.1.3(别问为什么,问就是强力破解),scala 2.13.1,sbt 1.3.3, spark 2.4.4,Hadoop 2.8.1,java 8。那些什么个下载啊环境配置啊这些我就不说了,说些我费了好大劲都找不到的内容。

1.sbt不能下载包

根据网上说的,应该是默认的下载地址被墙,总之就是下不了。大家也很贴心地复制粘贴了解决方法。反正就是在sbt/bin/路径下的sbt-launch.jar内的/sbt/sbt.boot.properties中修改为国内镜像源。不过我觉得大家也很贴心地告诉你只需要添加repositories下的一些配置就好(呵呵),这里我将整个文件的内容贴出来,只要无脑Ctrl C就好

[scala]
  version: ${sbt.scala.version-auto}

[app]
  org: ${sbt.organization-org.scala-sbt}
  name: sbt
  version: ${sbt.version-read(sbt.version)[1.3.3]}
  class: ${sbt.main.class-sbt.xMain}
  components: xsbti,extra
  cross-versioned: ${sbt.cross.versioned-false}
  resources: ${sbt.extraClasspath-}

[repositories]
  local
  local-preloaded-ivy: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
  local-preloaded: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}
  maven-central
  sbt-maven-releases: http://repo.scala-sbt.org/scalasbt/maven-releases/, bootOnly
  sbt-maven-snapshots: http://repo.scala-sbt.org/scalasbt/maven-snapshots/, bootOnly
  typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  sbt-ivy-snapshots: http://repo.scala-sbt.org/scalasbt/ivy-snapshots/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly

[boot]
  directory: ${sbt.boot.directory-${sbt.global.base-${user.home}/.sbt}/boot/}
  lock: ${sbt.boot.lock-true}

[ivy]
  ivy-home: ${sbt.ivy.home-${user.home}/.ivy2/}
  checksums: ${sbt.checksums-sha1,md5}
  override-build-repos: ${sbt.override.build.repos-false}
  repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}

可以看到我这里用的是阿里云的镜像,如果大家细心的话会发现,很多其他人用的是OSChina的镜像源,这里我不得不说一句了,麻烦大家在引用之前先看看人家的镜像是不是存活的,反正开源中国的镜像源已经死了,大家别再引用了。
然后就是将解压出来的文件打包成jar包,有很多压缩软件都不支持打成jar包,所以分享一条命令行,只要在待压缩的文件夹的父目录下用cmd运行即可。

jar cvfm sbt-launch.jar sbt-launch\META-INF\MANIFEST.MF -C sbt-launch/ . 

2.在build.sbt中添加依赖后sbt表示找不到文件

正常情况下,sbt生成的build.sbt应该有一些基础的东西,比如项目名称、项目版本号、scala版本号。如果你要添加依赖,一般就是添加一个libraryDependencies语句,但是你会发现sbt下载的文件和你预想的文件有点不一样,特别是spark的依赖。如果你仔细对比sbt.boot.properties的配置和libraryDependencies下载的URL你就会发现,libraryDependencies下载的URL是根据typesafe-ivy-releases来拼接然后去下载的。这就有问题了,spark的依赖上面可没有依赖的scala的版本号,于是sbt就会表示我下不来。目前我的解决方法是将scala版本号改成所需spark的版本号,虽然好像会有未知的风险,但目前就先这样吧
对了需要强调一下,我现在创建sbt项目不知道为什么不会给我添加Scala的SDK,这时候需要手动添加SDK,不然的话sbt还是不能下载这些依赖

3.provided的坑

当你完成这些事情之后,你的项目终于可以愉快添加依赖了,这时候你就会迫不及待地跑一下Scala项目,然后你有可能发现,普通的Scala程序能跑,可是为什么我import进来的Spark的API用不了,一个ClassNotFound呼你脸上,明明我用idea可以找到对应的文件吖。
这时候你需要看看,你添加的依赖最后面有没有添加provided字段,如果有,恭喜你,你会深刻明白什么是编译时不添加该包。其实这个字段和Maven中是一样的,同样是告诉sbt在编译时不要编译这个jar包的内容。这是去掉就好去掉就好。

总结

将环境搭建好了就可以好好地开始学习如何使用spark了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值