在本博客的 Spark Metrics 配置详解 文章中介绍了 Spark Metrics 的配置, 其中我们就介绍了 Spark 监控支持 Ganglia Sink Ganglia 是 UC Berkeley 发起的一个开源集群监视项目, 主要是用来监控系统性能, 如 :cpu mem 硬盘利用率, I/O 负载 网络流量情况等, 通过曲线很容易见到每个节点的工作状态, 对合理调整 分配系统资源, 提高系统整体性能起到重要作用 由于 Licene 的限制, 没有放到默认的 build 里面, 如果需要使用, 需要自己编译 在使用 Mav en 编译 Spark 的时候, 我们可以加上 -Pspark-ganglia-lgpl 选项来将 Ganglia 相关的类打包进 sparkassembly-x.x.x-hadoopx.x.x.jar 中, 命令如下 : [iteblog@iteblog spark]$./make-distribution.sh --tgz -Phadoop-2.4 -Pyarn -DskipTests -Dhadoop.version=2.4.0 -Pspark-ganglia-lgpl 如果你使用的是 SBT 来编译, 可以加上 SPARK_GANGLIA_LGPL=true, 完整命令如下 : [iteblog@iteblog spark]$ SPARK_HADOOP_VERSION=2.4.0 SPARK_YARN=true SPARK_GANGLIA_LGPL=true sbt/sbt assembly 或者你在提交作业的时候, 单独将 Ganglia 相关依赖加入到 --jars 选项中 : --jars lib/spark-ganglia-lgpl_2.10-x.x.x.jar... 依赖弄好之后, 我们需要在 $SPARK_HOME/conf/metrics.properties 文件中加入一下配置 : *.sink.ganglia.class=org.apache.spark.metrics.sink.gangliasink *.sink.ganglia.host=www.iteblog.com *.sink.ganglia.port=8080 *.sink.ganglia.period=10 *.sink.ganglia.unit=seconds *.sink.ganglia.ttl=1 *.sink.ganglia.mode=multicast 1 / 5
host 和 port 这个就是你 Ganglia 监控的地址, 其中 mode 支持 'unicast'( 单播 ) 和 'multicast'( 多播 ) 两种模式 如果你出现类似下面的异常信息 : 15/06/11 23:35:14 ERROR MetricsSystem: Sink class org.apache.spark.metrics.sink.gangliasink cannot be instantialized java.lang.classnotfoundexception: org.apache.spark.metrics.sink.gangliasink at java.net.urlclassloader$1.run(urlclassloader.java:366) at java.net.urlclassloader$1.run(urlclassloader.java:355) at java.security.accesscontroller.doprivileged(native Method) at java.net.urlclassloader.findclass(urlclassloader.java:354) at java.lang.classloader.loadclass(classloader.java:425) at sun.misc.launcher$appclassloader.loadclass(launcher.java:308) at java.lang.classloader.loadclass(classloader.java:358) at java.lang.class.forname0(native Method) at java.lang.class.forname(class.java:191) at org.apache.spark.metrics.metricssystem$$anonfun$registersinks$1.apply(metricssyste m.scala:138) at org.apache.spark.metrics.metricssystem$$anonfun$registersinks$1.apply(metricssyste m.scala:134) at scala.collection.mutable.hashmap$$anonfun$foreach$1.apply(hashmap.scala:98) at scala.collection.mutable.hashmap$$anonfun$foreach$1.apply(hashmap.scala:98) at scala.collection.mutable.hashtable$class.foreachentry(hashtable.scala:226) at scala.collection.mutable.hashmap.foreachentry(hashmap.scala:39) at scala.collection.mutable.hashmap.foreach(hashmap.scala:98) at org.apache.spark.metrics.metricssystem.registersinks(metricssystem.scala:134) at org.apache.spark.metrics.metricssystem.<init>(metricssystem.scala:84) at org.apache.spark.metrics.metricssystem$.createmetricssystem(metricssystem.scala:17 1) at org.apache.spark.deploy.worker.worker.<init>(worker.scala:106) at sun.reflect.nativeconstructoraccessorimpl.newinstance0(native Method) at sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorim pl.java:57) at sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoracc essorimpl.java:45) at java.lang.reflect.constructor.newinstance(constructor.java:526) at akka.util.reflect$.instantiate(reflect.scala:65) at akka.actor.props.newactor(props.scala:337) at akka.actor.actorcell.newactor(actorcell.scala:534) at akka.actor.actorcell.create(actorcell.scala:560) at akka.actor.actorcell.invokeall$1(actorcell.scala:425) 2 / 5
at akka.actor.actorcell.systeminvoke(actorcell.scala:447) at akka.dispatch.mailbox.processallsystemmessages(mailbox.scala:262) at akka.dispatch.mailbox.run(mailbox.scala:218) at akka.dispatch.forkjoinexecutorconfigurator$akkaforkjointask.exec(abstractdispatcher.scala:386) at scala.concurrent.forkjoin.forkjointask.doexec(forkjointask.java:260) at scala.concurrent.forkjoin.forkjoinpool$workqueue.runtask(forkjoinpool.java:1339) at scala.concurrent.forkjoin.forkjoinpool.runworker(forkjoinpool.java:1979) at scala.concurrent.forkjoin.forkjoinworkerthread.run(forkjoinworkerthread.java:107) 请查看你的 Spark 包是否将 org.apache.spark.metrics.sink.gangliasink 打包进去了 ; 或者仔细看下你的配置文件, 请尽量拷贝我这里提供的 配置弄好之后, 启动你的 Spark 集群, 然后去 https://www.iteblog.com/gangliaweb 监控页面查看是否弄好了, 类似下面的信息 : 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 除了上图的 master.apps 和 master.workers 监控,Ganglia 里面还显示如下的信息 : { "version": "3.0.0", "gauges": { "jvm.ps-marksweep.count": { "jvm.ps-marksweep.time": { 3 / 5
"jvm.ps-scavenge.count": { "value": 186 "jvm.ps-scavenge.time": { "value": 375 "jvm.heap.committed": { "value": 536412160 "jvm.heap.init": { "value": 536870912 "jvm.heap.max": { "value": 536412160 "jvm.heap.usage": {.315636349481712 "jvm.heap.used": { "value": 169311176 "jvm.non-heap.committed": { "value": 37879808 "jvm.non-heap.init": { "value": 24313856 "jvm.non-heap.max": { "value": 184549376 "jvm.non-heap.usage": {.19970542734319513 "jvm.non-heap.used": { "value": 36855512 "jvm.pools.code-cache.usage": {.031689961751302086 "jvm.pools.ps-eden-space.usage": {.9052384254331968 "jvm.pools.ps-old-gen.usage": {.02212668565200476 4 / 5
Powered by TCPDF (www.tcpdf.org) } "jvm.pools.ps-perm-gen.usage": {.26271122694015503 "jvm.pools.ps-survivor-space.usage": {.5714285714285714 "jvm.total.committed": { "value": 574291968 "jvm.total.init": { "value": 561184768 "jvm.total.max": { "value": 720961536 "jvm.total.used": { "value": 206166688 "master.apps": { "master.waitingapps": { "master.workers": { } "counters": { "histograms": { "meters": { "timers": { } 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 5 / 5