用最新的版本,蹦最野的迪~~~IDE写大数据程序避坑指南
文章更新于: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 |
使用Eclipse编写Spark应用程序
一、下载安装配置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
- 调用启动命令以后,会出现如下启动界面
- 设置工作目录
- eclipse工作界面
1.3、配置(创建桌面快捷方式)
如果你说,每次启动还要输入命令,终端还不能关掉,关掉终端程序也关掉了,太麻烦了。
- 不要慌,咱给它弄个快捷方式先~
# 通俗的来说,这两行代码的作用就是发送快捷方式到桌面
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
安装路径,你需要换成你的。
- 完成以上步骤以后你的桌面应该就有了
eclipse
的图标,双击即可运行:
注:图标带锁是因为 eclipse
的文件夹所有者不是当前用户,你可以使用 sudo chown -R 用户名:用户组 /usr/local/eclipse
以后再创建快捷方式,就也不会有这个锁了。
- 如果你双击以后是这样的:
这就说明你的 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
- 在
scala
目录上右键,new,选择其他
- 在弹出来的窗口中,选择
scala Object
,然后next
- 输入程序名
WordCount
,点击Finish
- 然后你就可以在左边的目录结构中看到
WordCount.scala
了
- 写入程序内容
将以下内容粘贴到程序
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、运行程序你可能会遇到的问题
- 内存不够用的问题
你看,都说了是内存不够用。
买,买16G的,
两个够不够?
够,内存真好~~
吼吼哈哈…
解决办法:
1.1、在程序上右键,选择 Run As
,然后选择 Run Configurations...
1.2. 然后给它加上参数再运行:
# 报错是 at least 471859200, 我给你481859200,多给你一千万~
-Dspark.testing.memory=481859200
- 文件不存在错误
- NoClassDefFoundError:
这个可能是你的 scalaLibrarycontainer
没选对,但不一定,如果是请按以下方法解决:
3.1 检查你IDE里面显示的版本是否与你实际的相符。
如果不符,右键,选择 Properties
3.2 在弹出来的窗口中,选择合适的,点击右下角确定(Apply and Close
),然后在重新运行程序即可。
四、Enjoy!
用最新的版本,蹦最野的迪~~~IDE写大数据程序避坑指南的更多相关文章
- Canal v1.1.4版本避坑指南
前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ...
- 获得appstore里面app的最新的版本信息,进行版本更新
版本更新有两种方式 一种是从服务器获得最新的版本信息和当前app的版本进行比较 另外一种是获得appStore上最新的版本信息和当前的app的版本进行比较 现在我来说一下如何通过appStore获得最 ...
- git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地
git拉取远程分支并创建本地分支 一.查看远程分支 使用如下Git命令查看所有远程分支: git branch -r 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout ...
- Git中从远程的分支获取最新的版本到本地
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit l ...
- JENKINS的远程API调用,然后用PYTHON解析出最新的版本及稳定成功的版本
这个功能,我觉得在作自动作部署时,是可以派上用处的. 记录一下. import urllib f = urllib.urlopen('http://jenkinsurl/job/job_name/ap ...
- 在ubuntu上安装最新稳定版本的node及npm
背景 通过ubuntu官方apt安装工具安装的node是最新LTS版本的,而本人是个有点强迫症的人,喜欢追求新的东西,也就是想方设法想要去安装最新版本的node,所以本文也就产生了,附上ubuntu安 ...
- centos7 docker升级到最新稳定版本
原文:centos7 docker升级到最新稳定版本 一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外 ...
- Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)
参考博客 Cloudera Manager安装之利用parcels方式安装单节点集群 Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式.rpm ...
- Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
随机推荐
- ajax jsonP 解决跨域问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Python输出水仙花数,用逗号分隔
描述 "水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身. ...
- 数据挖掘入门系列教程(五)之Apriori算法Python实现
数据挖掘入门系列教程(五)之Apriori算法Python实现 加载数据集 获得训练集 频繁项的生成 生成规则 获得support 获得confidence 获得Lift 进行验证 总结 参考 数据挖 ...
- 一文了解服务端推送(含JS代码示例)
常用的服务端推送技术,包括轮询.长轮询.websocket.server-sent-event(SSE) 传统的HTTP请求是由客户端发送一个request,服务端返回对应response,所以当服务 ...
- C/C++书籍分享(百度网盘版)
作为第一篇博客,该写一些什么好呢,毕竟作为技术博客开创的,不能随便闲谈不是. 那就分享一些书籍作为见面礼吧.链接里面包含有大量的C++学习用书籍,包含了从入门到进阶的大部分高质量书籍,注意仅用作个人学 ...
- Spring 多数据源配置(转)
转载自:https://www.cnblogs.com/digdeep/p/4512368.html 同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据 ...
- shiro框架总结
一.概念 shiro是一个安全框架,主要可以帮助我们解决程序开发中认证和授权的问题.基于拦截器做的权限系统,权限控制的粒度有限,为了方便各种各样的常用的权限管理需求的实现,,我们有必要使用比较好的安全 ...
- redis 持久化RDB、AOF
1.redis持久化简介 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集合和有序集合.支持在服务器端计算集合 ...
- mysql8 修改root密码
Navicat工具里选中mysql数据库 执行: ALTER user 'root'@'localhost' IDENTIFIED BY 'newpassward'; //newpassward 新密 ...
- iOS开发:十六进制颜色转UIColor
Objective-C UIColor * __nullable UIColorFromHexValue(NSUInteger hexValue) { CGFloat red = (hexValue ...