zoukankan      html  css  js  c++  java
  • 教你远程Debug Spark

    https://zhuanlan.zhihu.com/p/259610703

    本篇文章主要是用Spark为例来讲, 其他的Java程序也可用相同的方式来做远程debug, 原理其实是相同的

    什么是远程debug

    远程debug就是断点打在你的本地环境, 但是代码(比如说Spark的jar包)是跑在远端的(可以理解为是服务端)

    为什么需要远程debug

    相信很多人在开发中遇到过这样的问题, 就是明明代码在自己的环境上是好的, 为什么去了测试环境就有问题, 这个时候你可能会质疑测试, 是不是准备的数据有问题?还是不会使用, 导致用错了场景? 还是部署有问题?

    在做数据项目的时候, 遇到bug可能会把相应的数据下载到本地开发环境, 然后进行debug, 但如果遇到了如下的问题, 该怎么办呢

    • 数据量特别大, 本地无法下载
    • 数据比较敏感, 安全原因不让下载
    • 本地无法搭建环境, 比如, 需要启动cluster, 需要至少三台物理节点

    这个时候远程debug就要上场了, 这样你就能在本地看到远端运行的样子了, 而不用只看输出日志去推断可能哪里出了错误.

    如何远程debug

    配置Intellij IDEA

    其实非常简单, 用Intellij IDEA打开你的代码, 点击右上角的“Edit Configurations”,

    然后点击左上角的"+“, 添加一个“Remote”, 这个选项就是用来做远程Debug用的, 并且填写上你的spark job的Remote Host, 端口默认给的是5005

    Spark-submit

    然后我们把上图中的远程debug的JVM参数添加到spark-submit指令中去

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

    所以spark-submit指令如下

    spark-submit --driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 --class YourClassName s3://your-bucket/your_spark_jar.jar
    这里需要注意一下, 用suspend=y而不是suspend=n, 是因为我们需要让程序在运行的时候能够停住

    运行上述spark-submit的指令, 如下

    可以看到运行了spark-submit之后, 你的代码一直停在了那里, 这就是我们想要的效果, 之后进行下一步

    本地debug断点连接到远端5005的debug端口

    我们需要在本地的代码中的相应位置打好断点, 然后点击debug按钮, IDEA的console中会输出如下

    过一会儿之前spark-submit的代码就会在EMR上运行起来, 然后命中你在本地打的断点, 如下

    至此, 这就是远程Debug的全部操作, 非常便于上手

    如何避坑

    1. 请确保你在EMR上的security group允许相应的debug端口号暴露, 例如5005
    2. 因为远程debug连接一个host, 如果你的debug断点无法命中, 所以请确保你的cluster是否只有一个实例, 如果出现双主, 多实例的情况有可能导致断点无法命中
    3. 请确保你远端运行的代码是和你本地代码一致的, 否则可能会出现不可预知的行为, 因为远程debug是按照行号来映射的
  • 相关阅读:
    vue使用elementui合并table
    使用layui框架导出table表为excel
    vue使用elementui框架,导出table表格为excel格式
    前台传数据给后台的几种方式
    uni.app图片同比例缩放
    我的博客
    【C语言】取16进制的每一位
    SharePoint Solution 是如何部署的呢 ???
    无效的数据被用来用作更新列表项 Invalid data has been used to update the list item. The field you are trying to update may be read only.
    SharePoint 判断用户在文件夹上是否有权限的方法
  • 原文地址:https://www.cnblogs.com/wuer888/p/14441725.html
Copyright © 2011-2022 走看看