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+")" + "\r\n" //发送数据给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)
且将新火试新茶,诗酒趁年华。