我有一个基于Spark(java)的应用程序,该应用程序扫描Hive中的几个表,然后根据某些条件,给出满足条件的表/分区的列表。 我想知道如何收集有关此扫描的信息? 例如:应用程序花了多少时间来执行不同表的扫描?执行扫描时正在使用多少内存?等等 我知道我可以使用简单的秒表进行时间计算并将其打印到日志中。但是我不希望它们打印到日志中。我想将其推送到我创建的自定义Kafka生产者中。
1)我研究了使用Spark侦听器并将其扩展:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.SparkListener 但是这些是基于特定于火花的事件(onJobStart,onJobEnd等)。我想在业务特定事件上触发我的侦听器。例如:onTableRead,onSpecificMethodCall
2)https://github.com/groupon/spark-metrics 我看了看这个库,使用起来很简单。但是,我面临的问题是我的Spark应用程序基于Java。 在spark-metrics文档中,他们提到应将指标初始化为惰性val以获取正确的数据。
公共列表getFilteredPartList(){ 列出fileteredPartitions = utils.getCompactedPartNames(getTable()。getDbName(),getTable()。getTableName(),getConfiguration()。getEnvCode(),partNames, getTableProperties(),getDataAccessManager(),true,true,false,true).getPartNames()};
我想知道创建上述方法所需的时间,并将其推送给我的自定义Kafka生产者。
PS:我在Spark方面的经验不是很多,所以请原谅我在问这个问题时可能犯的任何错误。