文章更新于:2020-04-05

注:本次实验使用的操作系统及各个程序版本号

类别 版本号 说明
操作系统 Ubuntu 16.04.6 LTS 代号 xenial
jdk java version 1.8.0_241
spark spark version 2.4.5
scala Scala version 2.11.12 spark 自带
sbt sbtVersion 1.3.8
scala-SDK scala-SDK-4.7.0 Scala IDE for eclipse

一、下载安装配置IDE

1.1、下载(scala-SDK-4.7.0)

推荐去官网 http://scala-ide.org/download/sdk.html 下载。

1.2、安装

# 解压安装包到 /usr/local
sudo tar -zxvf scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz -C /usr/local/ | tail -n 10 # 然后就可以调用命令启动了
/usr/local/eclipse/eclipse # 可以在 ~/.bashrc 文件中配置一下环境命令,这样在任何位置都可以直接输入 eclipse 启动
export PATH=/usr/local/eclipse:$PATH
  1. 调用启动命令以后,会出现如下启动界面

  1. 设置工作目录

  1. eclipse工作界面

1.3、配置(创建桌面快捷方式)

如果你说,每次启动还要输入命令,终端还不能关掉,关掉终端程序也关掉了,太麻烦了。

  1. 不要慌,咱给它弄个快捷方式先~
# 通俗的来说,这两行代码的作用就是发送快捷方式到桌面
ln -s /usr/local/eclipse/eclipse ~/Desktop/
sudo ln -s /usr/local/jdk1.8/jre/ /usr/local/eclipse/

注1:上述第二行代码的意思是将 eclipse 需要的 jre 创建一个符号链接放在它的启动目录下,防止它找不到。

注2:上述第二行代码的 /usr/local/jdk1.8 是我 Ubuntu 的 jdk 安装路径,你需要换成你的。

  1. 完成以上步骤以后你的桌面应该就有了 eclipse 的图标,双击即可运行:

注:图标带锁是因为 eclipse 的文件夹所有者不是当前用户,你可以使用 sudo chown -R 用户名:用户组 /usr/local/eclipse 以后再创建快捷方式,就也不会有这个锁了。

  1. 如果你双击以后是这样的:

这就说明你的 jre 符号链接没有创建成功,或者你的 java 环境压根没配置好。

此时你需要检查你的 java 环境,以及你为 eclipse 创建的 jre 符号链接是否正常可用。

二、安装 Eclipse-sbt 插件

2.1、局部安装


什么是拒不安装?
哦哦,不好意思,是`局部安装`。

说呗了,局部安装就是为你写的一个程序安装,而不是同时为所有程序安装。

你安装以后,只对当前项目目录下的程序起作用。

那有的人就该说了,我是不是脑子有坑,我这样安。

未必哈,不同的安装方式适用于不同的场景。


好,进入正题:
如果是局部安装,你需要在你项目目录文件夹下创建一个 `plugins.sbt` 文件,并在里面写入:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

该语句表示安装sbteclipse插件,版本为4.0.0。等后续运行/usr/local/sbt/sbt eclipse命令时会自动安装插件

当然,具体版本是多少是要根据你的各个程序的版本确定的。


具体参见林子雨教授博客:使用Eclipse编写Spark应用程序

2.2、全局安装

全局安装方便多了嘛。

其实安装方法也类似,就是写好配置文件,让其运行的时候自动去下载安装。

只不过这次的配置文件写在了全局范围内。

那哪个地方是全局范围?

来,对面的女孩往下看

# 这个文件是sbt的全局配置文件
~/.sbt # 那么我们需要在这里,建立我们需要的插件的存放目录
# 如果你的sbt之前已经使用过,你会发现在这个目录下已经有文件 # 比如我的 sbt 版本是 1.3.8 ,它就有一个 ~/.sbt/1.0 的文件夹
# 如果你的 sbt 版本是 0.13.xx ,它可能就有一个 ~/.sbt/0.13 的文件夹
# 这里以我的版本做演示,在 1.0 目录下创建一个 plugins 文件夹
mkdir -p ~/.sbt/1.0/plugins
# 然后在 plugins 文件夹里面创建一个 build.sbt 文件
vim ~/.sbt/1.0/plugins/build.sbt
# 接着在里面写入:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0") # 最后,就可以使用 `/usr/local/sbt/sbt` 也就是 `sbt` 命令安装插件

然后,就…

2.2.1、请选择正确的版本号

啧啧啧,满屏 ERROR ,看输出:

[info] Loading settings for project global-plugins from build.sbt ...
[info] Loading global plugins from /home/bigdata/.sbt/1.0/plugins
[warn]
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes.
[warn] com.typesafe.sbteclipse:sbteclipse-plugin:4.0.0 (sbtVersion=1.0, scalaVersion=2.12)
[warn]
[warn] Note: Unresolved dependencies path:
[error] sbt.librarymanagement.ResolveException: Error downloading com.typesafe.sbteclipse:sbteclipse-plugin;sbtVersion=1.0;scalaVersion=2.12:4.0.0
[error] Not found
[error] Not found
[error] not found: https://repo1.maven.org/maven2/com/typesafe/sbteclipse/sbteclipse-plugin_2.12_1.0/4.0.0/sbteclipse-plugin-4.0.0.pom
[error] not found: https://maven.aliyun.com/repository/public/com/typesafe/sbteclipse/sbteclipse-plugin_2.12_1.0/4.0.0/sbteclipse-plugin-4.0.0.pom
[error] not found: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.12/sbt_1.0/4.0.0/ivys/ivy.xml
[error] not found: https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.12/sbt_1.0/4.0.0/ivys/ivy.xml
[error] at lmcoursier.CoursierDependencyResolution.unresolvedWarningOrThrow(CoursierDependencyResolution.scala:246)
[error] at lmcoursier.CoursierDependencyResolution.$anonfun$update$34(CoursierDependencyResolution.scala:215)
[error] at scala.util.Either$LeftProjection.map(Either.scala:573)
[error] at lmcoursier.CoursierDependencyResolution.update(CoursierDependencyResolution.scala:215)
[error] at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:60)
[error] at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:52)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:102)
[error] at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:69)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$20(LibraryManagement.scala:115)
[error] at scala.util.control.Exception$Catch.apply(Exception.scala:228)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:115)
[error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:96)
[error] at sbt.util.Tracked$.$anonfun$inputChanged$1(Tracked.scala:150)
[error] at sbt.internal.LibraryManagement$.cachedUpdate(LibraryManagement.scala:129)
[error] at sbt.Classpaths$.$anonfun$updateTask0$5(Defaults.scala:2947)
[error] at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] at sbt.std.Transform$$anon$4.work(Transform.scala:67)
[error] at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
[error] at sbt.Execute.work(Execute.scala:290)
[error] at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
[error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
[error] (update) sbt.librarymanagement.ResolveException: Error downloading com.typesafe.sbteclipse:sbteclipse-plugin;sbtVersion=1.0;scalaVersion=2.12:4.0.0
[error] Not found
[error] Not found
[error] not found: https://repo1.maven.org/maven2/com/typesafe/sbteclipse/sbteclipse-plugin_2.12_1.0/4.0.0/sbteclipse-plugin-4.0.0.pom
[error] not found: https://maven.aliyun.com/repository/public/com/typesafe/sbteclipse/sbteclipse-plugin_2.12_1.0/4.0.0/sbteclipse-plugin-4.0.0.pom
[error] not found: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.12/sbt_1.0/4.0.0/ivys/ivy.xml
[error] not found: https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.12/sbt_1.0/4.0.0/ivys/ivy.xml
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q

那么,我总结了一下,上面说的是啥呢?
没找到!

没找到啥?

没找到我们指定的文件!

那咋弄?

那就不指定那一个了呗~


问题所在:我们指定了插件版本为 4.0.0 。可是,就怕可是…它没找到啊!!

我们可以看一下上面报错输出,其中有一行(倒数第三行)是:

[error]   not found: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.12/sbt_1.0/4.0.0/ivys/ivy.xml

然后我猜你的枪里没有子弹,不是,我猜这个地址里没有 4.0.0

来一起看看:



果然!你的枪里没有子弹~

插件脚本该说了,你扯什么犊子,没有还指定 4.0.0


笑脸.jpg

我改

我们在刚才设置的脚本里面将 4.0.0 改为 5.2.0

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.0")

为什么是 5.2.0?

我看它比较有感觉行不行~


然后再次执行 sbt 命令,行不行我不知道,但是我已经等了好久好久好久了…

到底有多久你执行一下就知道了~

兄嘚,…

2.2.2、请选择正确的目录执行命令


这里应该是个坑!!!!

当我在家目录执行 sbt 的时候,它会出现刷屏信息。但是会卡在

Loading project definition from xxxx

然后就不动了,我以为他是在后台下载东西之类的,

可是当我等的时间不对劲的时候,我就不这么认为了。

元芳,你怎么看?

当我在一个曾经用 sbt 打包过的项目目录下执行此命令的时候,不会卡

都可顺利执行:



当我在 /usr/local/sbt/ 目录也就是 sbt 老家执行此命令也没有问题~



不要做无畏/无味的等待,选一个正确的目录执行命令吧!


三、创建eclipse应用程序

3.1、创建项目目录树

# ~/workspace/wordcount/ 目录下应该有以下结构

./src/main/scala/
./project/build.properties
./build.sbt # 其中 ./project/build.properties 文件的内容如下:
sbt.version=1.3.8 # 其中 ./build.sbt 文件的内容如下:
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.5"

我创建这些目录结构时执行的命令如下图:



然后,在 wordcount 目录下执行 sbt eclipse 命令创建eclipse应用程序:


那个啥,这个。。。

失败了。。

刷屏信息卡住不动 ~ ~

努力解决问题中。。。

这个版本可能不适合,

有可能是版本太新了,可能。

元芳,你怎么看??


ok,续更

问题已经解决~~


3.2、遇到的问题

说实话中间尝试的操作比较多,

我也不确定到底是那个或哪几个操作起了作用,

主要操作列举如下:

1、我把上面提到的那个 4.0.0 的版本改成了 5.2.4



你若问我为什么?

我会告诉你因为 5.2.4 是最高的版本,我想蹦最野的迪!

2、重新配置了镜像地址:

[repositories]
local
repo:https://maven.aliyun.com/repository/public
huaweicloud-ivy: https://mirrors.huaweicloud.com/repository/ivy/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
huaweicloud-maven: https://mirrors.huaweicloud.com/repository/maven/

之前也尝试了网上一些其他乱七八糟的镜像,后来吧…

嗯,确实乱七八糟,

倒不如只使用阿里和华为的镜像。

3、删除缓存,重新加载 sbt

删除了 ~/.sbt~/.ivy2,以及项目目录下打包命令产生的所有文件。

然后执行 sbt sbtVersion 重新加载 sbt

4、重新执行 sbt eclipse 命令。

执行结果如下图:


3.3、打开 eclipse,导入程序

这里不禁要说一下,你说你这个命令标题栏设计这么隐蔽干啥。。让我一番好找。在程序最上方的黑色条框,鼠标划过是会显示命令栏的!!!

选中,然后下一步:

点击浏览,选择 wordcount 文件夹:



然后点击 finish 即可。

3.4、创建 WordCount.scala

  1. scala 目录上右键,new,选择其他

  1. 在弹出来的窗口中,选择 scala Object ,然后 next

  1. 输入程序名 WordCount ,点击 Finish

  1. 然后你就可以在左边的目录结构中看到 WordCount.scala

  1. 写入程序内容

将以下内容粘贴到程序

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf object WordCount {
def main(args: Array[String]) {
val inputFile = "file:///usr/local/spark/README.md"
val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
val sc = new SparkContext(conf)
val textFile = sc.textFile(inputFile)
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCount.foreach(println)
}
}

3.5、运行程序

在程序上右键,Run As ,选择 Scala Application 即可。

3.6、查看程序运行结果

在软件下方控制台 Console 里面可以查看程序运行结果:

3.7、运行程序你可能会遇到的问题


  1. 内存不够用的问题

你看,都说了是内存不够用。

买,买16G的,

两个够不够?

够,内存真好~~

吼吼哈哈…

解决办法:

1.1、在程序上右键,选择 Run As ,然后选择 Run Configurations...



1.2. 然后给它加上参数再运行:

# 报错是 at least 471859200, 我给你481859200,多给你一千万~
-Dspark.testing.memory=481859200


  1. 文件不存在错误


  1. NoClassDefFoundError:

这个可能是你的 scalaLibrarycontainer 没选对,但不一定,如果是请按以下方法解决:

3.1 检查你IDE里面显示的版本是否与你实际的相符。

如果不符,右键,选择 Properties



3.2 在弹出来的窗口中,选择合适的,点击右下角确定(Apply and Close),然后在重新运行程序即可。


四、Enjoy!

用最新的版本,蹦最野的迪~~~IDE写大数据程序避坑指南的更多相关文章

  1. Canal v1.1.4版本避坑指南

    前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...

  2. 获得appstore里面app的最新的版本信息,进行版本更新

    版本更新有两种方式 一种是从服务器获得最新的版本信息和当前app的版本进行比较 另外一种是获得appStore上最新的版本信息和当前的app的版本进行比较 现在我来说一下如何通过appStore获得最 ...

  3. git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地

    git拉取远程分支并创建本地分支 一.查看远程分支 使用如下Git命令查看所有远程分支: git branch -r 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout ...

  4. Git中从远程的分支获取最新的版本到本地

    Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge    git fetch origin mastergit l ...

  5. JENKINS的远程API调用,然后用PYTHON解析出最新的版本及稳定成功的版本

    这个功能,我觉得在作自动作部署时,是可以派上用处的. 记录一下. import urllib f = urllib.urlopen('http://jenkinsurl/job/job_name/ap ...

  6. 在ubuntu上安装最新稳定版本的node及npm

    背景 通过ubuntu官方apt安装工具安装的node是最新LTS版本的,而本人是个有点强迫症的人,喜欢追求新的东西,也就是想方设法想要去安装最新版本的node,所以本文也就产生了,附上ubuntu安 ...

  7. centos7 docker升级到最新稳定版本

    原文:centos7 docker升级到最新稳定版本 一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外 ...

  8. Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)

    参考博客 Cloudera Manager安装之利用parcels方式安装单节点集群  Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式.rpm ...

  9. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

随机推荐

  1. frida的简单实用

    一.环境 1.环境 1.手机运行服务端 2. 电脑端运行客户端3.进行端口转发 adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27 ...

  2. Geotools在shapefile路网数据中建立缓冲区,并获取缓冲区内的要素

    记录一下如何创建创建缓冲区并获取缓冲区内的要素,便于以后查找使用 static SimpleFeatureSource featureSource = null; static CoordinateR ...

  3. react build本地相对目录 "homepage": ".", package.json

    react build相对目录 "homepage": ".", package.json

  4. 【Elasticsearch】查询并删除匹配文档之_delete_by_query

    思路:先查询确认,后精准删除 假设我想删除title是"小明今晚真的不加班"这条记录,先查看一下现有的记录: (不加班不好吗?为什么要删除呢?) tips:可以使用match_ph ...

  5. mysql锁机制和事务隔离

    mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...

  6. 懂一点Python系列——快速入门

    本文面相有 一定编程基础 的朋友学习,所以略过了 环境安装.IDE 搭建 等一系列简单繁琐的事情. 一.Python 简介 Python 英文原意为 "蟒蛇",直到 1989 年荷 ...

  7. 读书笔记——莫提默·J.艾德勒&查尔斯·范多伦(美)《如何阅读一本书》

    第一篇 阅读的层次 第一章 阅读的活力与艺术 阅读的目标:娱乐.获得资讯.增进理解力这本书是为那些想把读书的主要目的当作是增进理解能力的人而写.何谓阅读艺术?这是一个凭借着头脑运作,除了玩味读物中的一 ...

  8. 74. pNextID、pNextVal、pNID的区别

    pNextID是平台调用单个新增组件的时候调用的: pNextVal是平台批量新增的时候调用: pNID应该是自己写的 :

  9. 安装SQL Server 2008R2 报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本”解决方法

    安装SQL Server 2008 R2报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本,请在安装 SQL Server 2008 前将 VS2008 升级 ...

  10. Apache Shiro反序列化漏洞复现

    Apache Shiro反序列化漏洞复现 0x01 搭建环境 获取docker镜像 Docker pull medicean/vulapps:s_shiro_1 重启docker system res ...