Vim插件实现IDE效果Spark应用开发

Vim插件实现IDE效果Spark应用开发,第1张

Vim插件实现IDE效果Spark应用开发

Vim具有非常好的插件扩展性,是终端平台下系统软件调试、编程的优秀工具,为广大*ix使用者广泛使用。

大量的*ix服务器用户界面是字符界面,很少加装X window,因为这样致使系统容量和开销都大大增加,并且X window要通过远程桌面访问,不仅配置复杂,效果难能满足。故大量的服务器远程编码和配置都使用SSH连接,简单的字符界面终端访问,这样Vim轻量而效率高的特点得到真正发挥。

以下纪录Vim安装语言服务器和Scala metals插件实现远程Spark应用开发。

1 安装Spark环境

这里不详述Spark环境安装过程,有网上有诸多文献可供参考。安装和配置主要包括JDK、Hadoop、Spark、Scala和Sbt等。建议JDK安装1.8版本,高版本有诸多意想不到的问题。我个人环境是jdk-8u301、hadoop-3.2.1、spark-3.1.1-bin-hadoop3.2、scala-2.12.10和sbt-1.5.5。Windows下hadoop-3.2.1有问题,改hadoop-3.2.2。

2 安装Scala metals插件需要Vim >= 8.1 或Neovim >= 0.3.1。参考:Vim | metals (scalameta.org)https://scalameta.org/metals/docs/editors/vimCentOS 7软件库安装的Vim和Neovim版本都较低,可以直接下载安装Neovim release版,解压在用户目录,指定用户PATH路径运行即可,我用的是Neovim 0.5.1。:Releases · neovim/neovim (github.com)https://github.com/neovim/neovim/releases

安装vim-plug (安装在~/.config/nvim/autoload/nvim):

curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

3 安装coc.nvim语言服务扩展。coc.nvim需node和yarn:

curl -sL install-node.now.sh/lts | sh
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash

修改~/.config/nvim/init.vim:

call plug#begin('~/.config/nvim/plugged')
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'bling/vim-airline'
call plug#end()

junegunn/vim-plug: Minimalist Vim Plugin Manager (github.com)由于国内github.com访问的问题,先期修改github.com为hub.fastgit.org,参考:(103条消息) VIM-Plug安装插件时,频繁更新失败,或报端口443被拒绝等_htx1020的博客-CSDN博客https://blog.csdn.net/htx1020/article/details/114364510

打开你的nvim,执行如下命令进行插件安装:

:PlugInstall

安装后的插件路径是~/.config/nvim/plugged/这里同时安装vim-airline插件,显示信息提示。

在init.vim添加:

autocmd FileType json syntax match Comment +//.+$+


" Help Vim recognize *.sbt and *.sc as Scala files
au BufRead,BufNewFile *.sbt,*.sc set filetype=scala

" Used to expand decorations in worksheets
nmap ws (coc-metals-expand-decoration)

" Toggle panel with Tree Views
nnoremap  t :CocCommand metals.tvp
" Toggle Tree View 'metalsPackages'
nnoremap  tp :CocCommand metals.tvp metalsPackages
" Toggle Tree View 'metalsCompile'
nnoremap  tc :CocCommand metals.tvp metalsCompile
" Toggle Tree View 'metalsBuild'
nnoremap  tb :CocCommand metals.tvp metalsBuild
" Reveal current current class (trait or object) in Tree View 'metalsPackages'
nnoremap  tf :CocCommand metals.revealInTreeView metalsPackages

4 安装coc-metals,用Neovim命令行执行:

:CocInstall coc-metals

5 Spark编程。新建项目,比如spark-test,进入spark-test目录,建目录结构src/main/scala:

mkdir spark-test
cd dpark-test
mkdir -p src/main/scala

在项目根下建build.sbt:

nvim build.sbt
scalaVersion := "2.12.10"

name := "vsc-spark"
//organization := "ch.epfl.scala"
version := "1.0"

libraryDependencies += "org.scala-sbt" %% "zinc" % "1.5.7"
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2"

libraryDependencies +="org.apache.spark" %% "spark-core"%"3.2.0"
libraryDependencies +="org.apache.spark" %% "spark-sql"%"3.2.0"

随build.sbt文件的新建和修改,Neovim会提示import build,建立和修改项目目录相应环境配置。初始可能会有较长时间,由于项目是实时增量编译的,因此之后的import build过程会比较短。

在src/main/scala下新建文件WordCount.scala:

  import org.apache.spark.SparkContext
  import org.apache.spark.SparkContext._
  import org.apache.spark.SparkConf
  import org.apache.log4j.{Level,Logger}

  object WordCount {
    def main(args: Array[String]) {
      //屏蔽日志
      Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
      Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
      val inputFile =  "file:///home/hadoop/devz/spark-test/word.txt"
      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)
    }
  }

随着你的代码输入,会有代码提示,进行代码补全,犹如一个很好的IDE编辑器。

完成代码编写,开启新的终端,进入项目根,运行sbt compile、sbt package、sbt run编译、打包和运行代码。

 提交Spark运行:

Good!

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5480100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存