用eclipse搭建Spark的运行环境(单机)

学习Spark用的eclipse习惯了,看了这一篇文章搭建了一个单机环境,不过这个单机环境搭建起来了,以后的集群环境我相信也容易了…

准备

  • 本地下载Scala

  • 本地有下载Spark

  • 本地有下载eclipse以及Scala的插件

以上过程在网上已经有一大堆教程了。


搭建过程

我的搭建过程与上方的文章有一些差距,毕竟年代久远了…

  • 第一步:以上的环境都搭建好以后,建一个Scala工程。

  • 第二步:在此工程下建一个Scala Object,在Scala中是以建立一个Object为准的,意思就是相当于python的一个方法工程。Scala一向诡异,看它的语法就知道了…

  • 第三步:导入spark中的相关的包(如图),为了避免什么问题反正我是全部导入了


如果在建立之后,工程的下边出现有一个小叉叉,右键Scala Library container,选择Properties,选择上一代一版本的Scala(如图)即可解决小叉叉的问题,如果不行可以尝试其他的版本试试。(我的默认是2.12,换下面的2.11小叉叉消失,spark2.2.0建立和分发默认使用Scala 2.11)


测试

  • 环境搭建就是那么的简单,在此测试一下。在刚刚建好的工程下输入以下代码,注意其中的提示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
//以下主类名为工程名
object First_Spark {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setAppName("Frist Spark")
conf.setMaster("local")
val sc = new SparkContext(conf)
//以下为文件的所在地
val lines = sc.textFile("/Users/junjieliu/Downloads/README.md", 1)
val words = lines.flatMap { (lines => lines.split(" ")) }
val pairs = words.map { word => (word, 1) }
val wordcount = pairs.reduceByKey(_ + _)
wordcount.foreach(pair => println(pair._1 + ":" + pair._2))
sc.stop()
}
}

  • 运行,点击run(如图)


  • 测试效果:

看起来是不是比Hadoopmapreduce简单多了,哈哈。

  • 补充:

eclipse中编译spark代码时,应当加上println之类的方法在最后以保结果可以正确输出,为何要强调这一点呢?因为在终端运行代码时,我们通常是不需要输入println之类的方法就可输出相关的结果的,这一点应该记住,不然易导致在eclipse中运行代码时容易出错,并且大部分人我相信也会像从前的我一样没有什么头绪,而现在就有了…

  • 如图:


这些真的都需要自己去实践发现的,我也是在参考了一些资料之后才发现的这个问题…因为网上关于用eclipse像我这样编译spark的教程并不多,据我所看到的,大多用maven来搭建spark的编译环境的。

最为重要的一点是在eclipse中编译相关的代码时,输出的结果是无法判断是否是正确的…即使我们在平时的编译中是有一定的错误提示的,但是对于初学者来说还是有一点不友好的感觉…

另外的补充:在eclipse中运行结果时,有一定的会在右下角显示的缓冲时间,细心一点的朋友可能会发现了,由此说来结果是需要一点时间来输出的(不如说是正确的结果)。所以在eclipse运行时需要多运行几次(因为需要在第一次运行之后缓冲才会开始,所以一般运行两次这样就可得之正确的相关的结果了),若是结果还不对,最大的问题可能就是在代码上了…

---------------本文终---------------

文章作者:刘俊

最后更新:2019年01月02日 - 15:01

许可协议: 转载请保留原文链接及作者。