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 nmapws (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!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)