IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Vim插件实现IDE效果Spark应用开发 -> 正文阅读

[大数据]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博客icon-default.png?t=LA92https://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 <Leader>ws <Plug>(coc-metals-expand-decoration)

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

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!

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:47:10  更:2021-11-14 21:49:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:06:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码