Spark学习之使用idea开发Spark应用

该文章是基于jdk1.8,idea开发工具,maven都配置好的前提下进行讲述的。

背景

由于已经在远程centos服务器上部署了saprk服务,但基于spark的应用程序的代码却是在本地idea开发的,那么如何能让本地开发的spark代码能在远程spark服务上运行调试便成了迫切需要解决的问题。

idea下scala插件安装

idea开发工具,File->setting->Plugins->Browse respositories,搜索scala,下载和自己idea版本对应的插件。

idea下新建maven项目

配置项目的Scala

配置maven依赖

修改pom.xml文件,新增如下内容:

 <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.5</version></dependency>
</dependencies><build><plugins><plugin><groupId>org.scala-tools</groupId><artifactId>maven-scala-plugin</artifactId><version>2.15.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins>
</build>

其中,spark-core版本要和《spark3.1.2 单机安装部署》文章中部署的spark版本一致,因为在文章《Spark开发实战之Scala环境搭建》中本地scala配置的版本是2.12,否则程序运行会报错。

配置完成后等待依赖包加载完毕。

新建一个Scala对象,代码如下:

object WordCount {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("WordCount").setMaster("spark://localhost:7078")val sc = new SparkContext(conf)val file = sc.textFile("/home/bigData/softnew/spark/README.md")//    val rdd = file.flatMap(line => line.split("")).map(word => (word,1)).reduceByKey(_+_)//    rdd.collect()//    rdd.foreach(println)//    rdd.collectAsMap().foreach(println)println("#####################"+file.count()+"#####################")println("#####################"+file.first()+"#####################")}}

配置远程部署路径

Scala文件最终会被打包成jar文件,然后使用spark-submit工具提交到spark主节点执行任务。由于spark-submit工具在远程服务器,所以需要配置jar包到远程服务器的部署,如下:

idea Tools->deployment->configuration,弹出deployment窗口,点击+号,按下图选择Type,name自定义:

配置connection:

其中,sftp host、user name、Password 是远程服务器ip、账号、密码,配置完后可以点击 SFTP host后的TestSFTP connection按钮测试是否可连接。Root path 是远程服务器部署jar包的目录。

配置Mappings:

其中,deployment path on server spark 路径是相对于配置connection 中的 Root path。

idea Tools->deployment->option,配置如下:

调用 mvn package 打包,然后上传到远程服务器:

到远程服务器Root path 下 找到 上传jar包,然后执行如下命令将jar上传到spark服务器,并在开启jvm在8336端口监听:

spark-submit --class com.spark.WordCount --master spark://localhost:7078  --driver-java-options "-Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8336" spark-1.0-SNAPSHOT.jar

其中,–master spark master 节点地址

address=8336 jvm监听端口

server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器

suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行,如果为n,则JVM不会暂停等待

如下图,启动监听成功。

[root@localhost target]# spark-submit --class com.spark.WordCount --master spark://localhost:7078  --driver-java-options "-Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8336" spark-1.0-SNAPSHOT.jar
Listening for transport dt_socket at address: 8336

配置远程调试

如下:

在右上角debug处选择刚才建立的远程调试项目,点击运行。
可以看到刚才spark-submit启动的监听界面产生了调试日志,如下:

21/07/09 13:58:57 INFO TaskSchedulerImpl: Killing all running tasks in stage 0: Stage finished
21/07/09 13:58:57 INFO DAGScheduler: Job 0 finished: count at WordCount.scala:18, took 3.201509 s
#####################108#####################
21/07/09 13:58:57 INFO SparkContext: Starting job: first at WordCount.scala:19
...
21/07/09 13:58:57 INFO TaskSchedulerImpl: Killing all running tasks in stage 1: Stage finished
21/07/09 13:58:57 INFO DAGScheduler: Job 1 finished: first at WordCount.scala:19, took 0.088650 s
###################### Apache Spark#####################
21/07/09 13:58:57 INFO SparkUI: Stopped Spark web UI at http://192.168.136.53:4040
21/07/09 13:58:57 INFO StandaloneSchedulerBackend: Shutting down all executors

本地开发环境配置

   本地开发环境配置中不需要搭建windows版的spark环境,直接使用项目中引入的spark的相关jar包来运行spark程序,提交到本地spark运行。只需要做如下配置(setMaster设置为local):val conf = new SparkConf().setAppName("WordCount").setMaster("local")

运行结果如下:

结论

本文讲述的调试方式仅适合单人学习开发的场景,不适合多人开发,因为都要观察远程服务器的调试日志,会搞混。若是在实际公司开发场景中,还是建议在在本地进行开发调试。

参考文章

window+idea搭建远程调试spark环境

Spark开发学习之使用idea开发Spark应用相关推荐

  1. Polyworks脚本开发学习笔记(十)-互动式开发及出错控制

    Polyworks脚本开发学习笔记(十)-互动式开发及出错控制 第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务.但是,由于任务中没有交互环节,只能机械地将 曲面点 - 包边点改为Flu ...

  2. Polyworks脚本开发学习笔记(一)-脚本开发环境

    Polyworks脚本开发学习笔记(一)-脚本开发环境 背景 Polyworks的扫描尺寸测量分析模块是我工作中经常用到的一个模块,我不是做测量的,但是利用Polyworks对扫描获得的点云来进行尺寸 ...

  3. Spark基础学习笔记07:搭建Spark HA集群

    文章目录 零.本讲学习目标 一.Spark HA集群概述 二.Spark HA集群架构 三.集群角色分配表 四.Spark HA集群搭建步骤 (一)安装配置ZooKeeper 1.在虚拟机master ...

  4. Spark基础学习笔记06:搭建Spark On YARN模式的集群

    文章目录 零.本讲学习目标 一.在Spark Standalone模式的集群基础上修改配置 二.运行Spark应用程序 (一)启动Hadoop的HDFS和YARN (二)运行Spark应用程序 (三) ...

  5. Spark基础学习笔记05:搭建Spark Standalone模式的集群

    文章目录 零.本讲学习目标 一.Spark集群拓扑 (一)集群拓扑 (二)集群角色分配 二.搭建集群 (一)私有云上创建三台虚拟机 (二)利用SecureCRT登录三台虚拟机 1.登录master虚拟 ...

  6. Spark基础学习笔记04:搭建Spark伪分布式环境

    文章目录 零.本讲学习目标 一.搭建伪分布式Hadoop (一)登录ied虚拟机 (二)配置免密登录 1.生成密钥对 2.将生成的公钥发送到本机(虚拟机ied) 3.验证虚拟机是否能免密登录本机 (三 ...

  7. 安卓开发学习1:安卓开发资源与方法总结

    开发工具 Android Studio下载 Genymotion 下载 Android Studio配置 Android Studio的Gradle配置国内镜像 Android Studio配置代码提 ...

  8. Python自动化开发学习13-堡垒机开发

    堡垒机介绍 很多人觉得,堡垒机就是跳板机,这是不全面的.跳板功能只是堡垒机所具备的功能的其中一项.堡垒机还有以下两个至关重要的功能: 权限管理 : 用户使用堡垒机账号登录堡垒机系统.不需要知道别的主机 ...

  9. Android开发学习笔记---搭建Android开发环境

    今天突发奇想,想看看Android开发是什么样的,于是就在度娘了一下Android开发,便自己动手搭建了起来.中间也碰到了一些问题,自己慢慢度娘,谷哥去解决.现在把搭建步骤记录如下: 第一步:下载Ec ...

最新文章

  1. Rust程序员一觉醒来都懵了:审核团队集体辞职,发生甚么事了?
  2. oracle 考试技巧,从 TPCH 测试学习性能优化技巧之 Q14
  3. Matlab中常用希腊字母表查询
  4. Spring Boot 2.x(十五):Dubbo + Zookeeper + Dubbo Admin
  5. Android使用MPAndroidChat
  6. (pytorch-深度学习系列)pytorch中backwards()函数对梯度的操作
  7. python 参数收集_Python参数传递及收集机制原理解析
  8. SpringBoot之打包错误
  9. ITAA学员的经典对白
  10. 华为热设计工程师待遇_【华为热设计工程师面试】华为的面试是我面试过程中相对简单的一个。-看准网...
  11. sap税码配置_SAP那些事-技巧篇-42-Billing plan预收款税码问题
  12. Nagios常见问题集锦
  13. 【调研】成功的IT公司的老板几乎都是技术出身
  14. 基于sinc的音频重采样(一):原理
  15. Python基本环境配置
  16. 评郭德纲《论50年相声之现状》
  17. MATLAB系列笔记:三维绘图(一)
  18. IDEA鼠标悬停显示注释
  19. leetcode--爬楼梯
  20. 2008.11.05 从明天开始,我的人生将掀开新的篇章

热门文章

  1. 算法之路_10、经典快速排序
  2. Endnote使用指南——Endnote导入参考文献到Word中
  3. 软件显示获取服务器更新失败,闪耀暖暖获取更新服务器失败的解决方法
  4. Hadoop单节点搭建
  5. telnet发送报文
  6. 移除Office 365快捷键
  7. 3d渲染时显示计算机渲染过程,【技巧分享】如何解决3d渲染时出现错误
  8. AdGuard for Mac (广告拦截器) 使用心得
  9. 决战Python之巅(二十)-MySql
  10. linux嵌入式系统程序加密工具推荐:Virbox Protector.