Spark 分布式调试工具


 0. 说明

  编写工具类,考察 Spark 分布式程序的执行地点


1. 工具类编写

  [ JMX ]

  Java Management Extend , Java 管理扩展服务。

  主要用于运维和监控。

  【测试 JMX】

  开启 nc,参考 [Linux] nc

nc -lk 8888

  通过 Client 模式运行 Spark

spark-shell --master spark://s101:7077  --deploy-mode client

  在 Spark Shell 下通过 :paste 执行以下代码

def sendInfo(obj:Object ,m:String , param:String)= {
val ip = java.net.InetAddress.getLocalHost.getHostAddress
val pid = java.lang.management.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+")" + "
"

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

  再执行以下命令

sendInfo(this, "method001" , "argument001")

  在 nc 端监听到的数据如下

  

     IP                     进程id    线程     对象id                              方法(参数 )


2. WordCount

  通过 Client 模式运行 Spark

spark-shell --master spark://s101:7077  --deploy-mode client

  在 Spark Shell 下通过 :paste 执行以下代码

val rdd1 = sc.textFile("/user/centos/data/11.txt" , 4)
val rdd2 = rdd1.flatMap(line=>{
sendInfo(this , "flatMap" , line)
line.split(" ")}
)
val rdd3 = rdd2.map(word=>{
sendInfo(this , "map" , word)
(word,1)
})
val rdd4 = rdd3.reduceByKey((a,b)=>{
sendInfo(this, "reduceByKey", a + "," + b)
a + b
})
val arr = rdd4.collect()

  nc 监听到的数据(参考  [Linux] nc

   


且将新火试新茶,诗酒趁年华。
原文地址:https://www.cnblogs.com/share23/p/9783419.html