Spark远程调试函数

Spark远程调试函数

1、sendInfo

该函数用于分布式程序的调试,非常方便,在spark的rdd操作中嵌入sendInfo,启动nc服务器后,可以收集到所有需要的运行时信息,该函数可以捕获host、进程id、线程名称等主要的信息。

2、函数实现

def sendInfo(obj: Object, m: String, param: String) = {
    import java.net.InetAddress
    import java.lang.management.ManagementFactory
    val ip = InetAddress.getLocalHost.getHostAddress
    val pid = ManagementFactory.getRuntimeMXBean.getName.split("@")(0)
    val tname = Thread.currentThread().getName
    val classname = obj.getClass.getSimpleName
    val objHash = obj.hashCode()
    val info = ip + "/" + pid + "/" + tname + "/" + classname + "@" + objHash + "/" + m + "(" + param + ")" + "\r\n"

    //发送数据给nc 服务器
    val sock = new java.net.Socket("s101", 8888)
    val out = sock.getOutputStream
    out.write(info.getBytes())
    out.flush()
    out.close()
}

3、使用函数

  1. 启动nc服务器

    $>nc -lk 8888
    
  2. 使用sendInfo发送信息

    $>sparks-shell
    $scala>sc.makeRDD(1 to 10 , 5).map(e=>{sendInfo(this , "map" , e + "") ; e}).collect
    
posted @ 2018-10-16 20:11  大道至简(老徐)  阅读(351)  评论(0编辑  收藏  举报