0. 说明
编写工具类,考察 Spark 分布式程序的执行地点
1. 工具类编写
[ JMX ]
Java Management Extend , Java 管理扩展服务。
主要用于运维和监控。
【测试 JMX】
开启 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.getHostAddressval pid = java.lang.management.ManagementFactory.getRuntimeMXBean.getName.split("@")(0)val tname = Thread.currentThread().getNameval classname = obj.getClass.getSimpleNameval 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.getOutputStreamout.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 监听到的数据(参考 )