Java 哨兵不';无法从Spark作业捕获异常

Java 哨兵不';无法从Spark作业捕获异常,java,apache-spark,kotlin,sentry,Java,Apache Spark,Kotlin,Sentry,我的问题是下面的代码抛出了一个异常,我用Sentry捕捉到了这个异常,但是当我转到Sentry UI时,异常根本没有出现。我想找到一种方法,在那里我可以使用哨兵越过火花驱动程序和执行者以及。有什么想法吗 另外,我不确定需要什么额外的信息,所以请随时告诉我,我会提供的 版本: Spark:2.12-3.0.0 Sentry:3.1.1 导入io.sentry.sentry 导入org.apache.spark.api.java.JavaSparkContext 导入org.apache.spa

我的问题是下面的代码抛出了一个异常,我用Sentry捕捉到了这个异常,但是当我转到Sentry UI时,异常根本没有出现。我想找到一种方法,在那里我可以使用哨兵越过火花驱动程序和执行者以及。有什么想法吗

另外,我不确定需要什么额外的信息,所以请随时告诉我,我会提供的

版本:

  • Spark:2.12-3.0.0
  • Sentry:3.1.1
导入io.sentry.sentry
导入org.apache.spark.api.java.JavaSparkContext
导入org.apache.spark.sql.SparkSession
趣味主线(args:Array){
SparkSession.builder()
.appName(“myApp”)
.config(“spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version”,“2”)
.config(“spark.hadoop.fs.gs.impl”、“com.google.cloud.hadoop.fs.gcs.GoogleHadoop文件系统”)
.config(“spark.serializer”、“org.apache.spark.serializer.KryoSerializer”)
.getOrCreate()
.使用{sparkSession->
JavaSparkContext.fromSparkContext(sparkSession.sparkContext()).let{sc->
Sentry.init{options->
options.dsn=“********”
}
试一试{
抛出异常(“执行器开始工作前的异常”)
}捕获(e:例外){
哨兵俘虏例外(e)
}
//启动一些遗嘱执行人,查看Sentry是否收到他们的例外情况:
sc.parallelize((0..100).toList(),10).map{i->
试一试{
抛出异常(“来自工作者的异常$i”)
}捕获(e:例外){
哨兵俘虏例外(e)
}
}
}
}
}
我还尝试从Sentry执行内部
HubAdapter
,并将其用作
广播
变量,但没有成功

更新#1

向Sentry init添加了调试选项,并尝试启动和关闭会话:

import io.sentry.Sentry
import org.apache.spark.api.java.JavaSparkContext
import org.apache.spark.sql.SparkSession

fun main(args: Array<String>) {
    SparkSession.builder()
        .appName("myApp")
        .config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "2")
        .config("spark.hadoop.fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
        .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
        .getOrCreate()
        .use { sparkSession ->
            JavaSparkContext.fromSparkContext(sparkSession.sparkContext()).let { sc ->
                Sentry.init { options ->
                    options.dsn = "********"
                    options.isDebug = true
                }

                Sentry.startSession()

                try {
                    throw Exception("exception before executors start working")
                } catch(e: Exception) {
                    Sentry.captureException(e)
                }

                // starting some executors and see if Sentry receives exceptions from them:
                sc.parallelize((0..100).toList(), 10).map { i ->                
                    try {
                        throw Exception("exception $i from worker")
                    } catch (e: Exception) {                        
                        Sentry.captureException(e)
                    }
                }

                Sentry.endSession()
                Sentry.close()
            }
        }
}
更新#2


为更好的可视性而创建

调用Sentry.captureException后进程是否立即退出?这些事件是在后台提交的,因此您需要在退出之前调用Sentry.close(),以确保在退出之前清除事件即使我将
Sentry.close()
放在末尾,Sentry中也不会显示任何内容。请添加
options.debug=true
以查看日志消息。也许这里有一些有价值的东西。在设置
options.debug=true
INFO: Initializing SDK with DSN: '**********'
INFO: No outbox dir path is defined in options.
INFO: GlobalHubMode: 'false'
20/11/03 18:42:01 INFO BlockManagerMasterEndpoint: Registering block manager 10.36.62.15:42123 with 4.6 GiB RAM, BlockManagerId(1, 10.36.62.15, 42123, None)
DEBUG: UncaughtExceptionHandlerIntegration enabled: true
DEBUG: UncaughtExceptionHandlerIntegration installed.
WARNING: Sessions can't be captured without setting a release.
DEBUG: Capturing event: 9b17170bdaf841cbb764969f653f99b5
ERROR: Request failed, API returned 400
ERROR: {"detail":"invalid event envelope","causes":["invalid item header","EOF while parsing an object at line 1 column 49"]}
WARNING: Sessions can't be captured without setting a release.
INFO: Closing SentryClient.
DEBUG: Shutting down