Spark开发环境的搭建(一)

大概从这部分开始,我们讨论的方式画风会变成 "show me your code"。天才第一步,雀氏纸尿裤,今天我们把基础的开发环境搭建起来,经历一把从编码干到集群跑起的过程。

spark核心部分是scala语言写的,本身的项目是sbt管理项目依赖的,很多同学对sbt感到陌生,但是maven肯定是熟悉,sbt是简化了maven的构建配置,所以我们是可以直接使用maven来构建的。

我这边选用的工具是官网提供的Scala IDE,下载地址:

http://scala-ide.org/download/sdk.html,另外我们打开连接之后可以看到有Jdk的要求(图一):

图一:jdk的要求

 

所以,我们继续准备jdk,从requirements点击去便是jdk的下载地址...省掉这部分,java程序开发基础必修。安装好之后我们打开建立项目,我这边已经建立了一个spark的项目,先看下效果,有个期待^^

 

 

图二:spark项目导入的样子

看到这个很多人肯定很熟悉,其实就是eclipse的东西嘛。再仔细看看,发现其实里面写着的是scala代码来着,这个就是我们要的效果,java那部分还是和原来一样,但是同时也支持scala代码的编写。

下面我们来构建这个工程,这个是一个普通的maven工程,maven里面最头痛的就是包的依赖。不知道用什么包,什么版本。其实官网里面给了很多例子项目,只不过是和其他源码一起的,我们需要把这部分抠出来,这块便构成了我们最最权威的spark工程。这个事情之前在讨论yarn的时候做过,这次把方法给出来。

我们把spark源码解压,可以看到里面有个example的示例项目,

图三:源码中的examples的例子

 

我们用记事本打开examples/pom.xml文件,可以看到里面的内容

图四:pom.xml文件结构

 

可以看到examples其实是作为一个 spark 的模块被构建的,我们再查看里面的依赖:

 图五:spark中的依赖

看到了么,里面有些依赖给了版本,但是用的是变量的方式给的,有些依赖是直接就没有给版本,这部分是因为在parent上面定义过的,所以在子模块中直接就引用了。有两种办法,我们可以去parent中找到,复制过来添加上,完全可以,就是要有点耐心;我们用第二招,第二招是我们解析出这部分依赖,mvn dependency:tree命令可以帮我们把依赖解析成一颗文本树。我们在目录下面调出控制台命令,注意目录不要弄错了,使用命令进行解析,图六

图六:解析依赖树

解析完成之后,我们打开刚刚生成的dept文件,查看内容(图七),看到了么,项目的依赖已经完全输出在这颗树中。

 

图七:依赖树的内容

接下来,我们复制examples下面的pom.xml文件,到我们目录下面,去掉parent部分,注意要添加groupID和version信息,因为已经不继承parent中的内容了,修改我们的项目名,取个好听的名字

 

图八:复制并且修改

在我们的ide中导入maven项目 

 

图九:导入项目

 

导入之后,我们看到一堆错误,这个事情我们意料之中,我们已经导出了对应包的各个版本,我们从dept里面把对应的版本信息加到依赖文件中。

图十:缺少依赖的情况,错误提示

 

重复使用比较多的,我们定义成变量,然后直接在依赖文件中引用,单独使用的,我们加到后面的version上面就可以了。

 

图十一:定义变量以便引用

 

图十二:重复使用的替换一下

 

图十三:其他依赖从dept文本中替换就好了

 

修改完成之后会提示需要更新,右键quick Fix

图十四:fix maven project

修复完成之后我们建立src/main/java和src/main/scala目录,这个作为我们的源码路径,分别写java代码和scala代码

图十五:建立源码路径

回到eclipse,我们刷新一下工程,终于有点样子了。scala默认没有变成源码目录,我们右键build path,然后use as source,再看看。

图十六:构造完成的样子

到这一步已经没有报错信息了,一般情况会有点小开心,但是事情还没完,我们试试写下我们的第一个程序,还是那个老梗,JavaWordCount,从源码中例子拿过来改改就好。我们复制代码,报错,提示也还算清晰,lambda表达式要在1.8以上,jdk不行

 

图十七:jdk版本不对的报错

我们按照提示把jdk版本换一下,buildpath,选择jre那部分,edit 

图十八:jdk版本切换

然后切换成1.8的就ok了

 

 

图十九:完成切换

 

换了之后,错误不报了,我们回到程序,再次运行,发现新的报错:

图二十:新的错误

这个是因为在执行的spark有调用hadoop命令去解析目录名字,具体的调用来自hadoop的源码中获取winutils.exe的操作,我们依照提示,把这部分文件加入到环境变量中

 

 

图二十一:寻找winutil.exe的路径找不到代码逻辑

这部分包的来源来自于在Windows环境下面编译hadoop源码获取,我们自己不想编译就直接下载一个就好了(我这里编译过一次)。

 

图二十一:寻找winutil.exe的包

 

图二十二:bin中的文件

 

我们把这部分文件配置到环境变量里面去:

 

重启eclipse,运行我们的程序:

 

图二十三:WordCount程序

 

 

图二十四:运行的结果

 

程序是我修改了一些,然后可以在本地运行的情况,运行成功了,写在最后小总结一下:

  1. maven工程中的依赖我们是直接提取官网最新的配置和版本,这部分的空目录可以作为蓝本保存,以后可以用作新工程或者发给小伙伴,而且是官网指定权威权威版本。

  2. 组件的选取,直接从官网获取,例如jdk的版本,scala的版本

  3. 在一步一步的构建过程中,了解这些错误的原因很重要,否则会手足无措

  4. 程序的模式是直接从本地构造数据进而调试我们的程序,在以后开发中的模式都会这样,后续会不断去用这种模式去开发

好了,下面我们来研究一下我们写下的这个程序,然后部署到集群上去,待续~~

想要关注更多文章,请扫描二维码

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值