精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Apache Spark源碼走讀:如何進(jìn)行代碼跟讀

云計(jì)算 Spark
今天不談Spark中什么復(fù)雜的技術(shù)實(shí)現(xiàn),只稍為聊聊如何進(jìn)行代碼跟讀。眾所周知,Spark使用scala進(jìn)行開(kāi)發(fā),由于scala有眾多的語(yǔ)法糖,很多時(shí)候代碼跟著跟著就覺(jué)著線索跟丟掉了,另外Spark基于Akka來(lái)進(jìn)行消息交互,那如何知道誰(shuí)是接收方呢?

概要

今天不談Spark中什么復(fù)雜的技術(shù)實(shí)現(xiàn),只稍為聊聊如何進(jìn)行代碼跟讀。眾所周知,Spark使用scala進(jìn)行開(kāi)發(fā),由于scala有眾多的語(yǔ)法糖,很多時(shí)候代碼跟著跟著就覺(jué)著線索跟丟掉了,另外Spark基于Akka來(lái)進(jìn)行消息交互,那如何知道誰(shuí)是接收方呢?

new Throwable().printStackTrace

代碼跟讀的時(shí)候,經(jīng)常會(huì)借助于日志,針對(duì)日志中輸出的每一句,我們都很想知道它們的調(diào)用者是誰(shuí)。但有時(shí)苦于對(duì)spark系統(tǒng)的了解程度不深,或者對(duì)scala認(rèn)識(shí)不夠,一時(shí)半會(huì)之內(nèi)無(wú)法找到答案,那么有沒(méi)有什么簡(jiǎn)便的辦法呢?

我的辦法就是在日志出現(xiàn)的地方加入下面一句話

  1. new Throwable().printStackTrace() 

現(xiàn)在舉一個(gè)實(shí)際的例子來(lái)說(shuō)明問(wèn)題。

比如我們?cè)趩?dòng)spark-shell之后,輸入一句非常簡(jiǎn)單的sc.textFile("README.md"),會(huì)輸出下述的log

  1. 14/07/05 19:53:27 INFO MemoryStore: ensureFreeSpace(32816) called with curMem=0, maxMem=308910489 
  2. 14/07/05 19:53:27 INFO MemoryStore: Block broadcast_0 stored as values in memory (estimated size 32.0 KB, free 294.6 MB)  
  3. 14/07/05 19:53:27 DEBUG BlockManager: Put block broadcast_0 locally took  78 ms  
  4. 14/07/05 19:53:27 DEBUG BlockManager: Putting block broadcast_0 without replication took  79 ms  
  5. res0: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[1] at textFile at :13 

那我很想知道是第二句日志所在的tryToPut函數(shù)是被誰(shuí)調(diào)用的該怎么辦?

辦法就是打開(kāi)MemoryStore.scala,找到下述語(yǔ)句

  1. logInfo("Block %s stored as %s in memory (estimated size %s, free %s)".format(  
  2.           blockId, valuesOrBytes, Utils.bytesToString(size), Utils.bytesToString(freeMemory)))  

在這句話之上,添加如下語(yǔ)句

  1. new Throwable().printStackTrace() 

然后,重新進(jìn)行源碼編譯

  1. sbt/sbt assembly 

再次打開(kāi)spark-shell,執(zhí)行sc.textFile("README.md"),就可以得到如下輸出,從中可以清楚知道tryToPut的調(diào)用者是誰(shuí)

  1. 14/07/05 19:53:27 INFO MemoryStore: ensureFreeSpace(32816) called with curMem=0, maxMem=308910489 
  2. 14/07/05 19:53:27 WARN MemoryStore: just show the calltrace by entering some modified code  
  3. java.lang.Throwable  
  4.   at org.apache.spark.storage.MemoryStore.tryToPut(MemoryStore.scala:182)  
  5.   at org.apache.spark.storage.MemoryStore.putValues(MemoryStore.scala:76)  
  6.   at org.apache.spark.storage.MemoryStore.putValues(MemoryStore.scala:92)  
  7.   at org.apache.spark.storage.BlockManager.doPut(BlockManager.scala:699)  
  8.   at org.apache.spark.storage.BlockManager.put(BlockManager.scala:570)  
  9.   at org.apache.spark.storage.BlockManager.putSingle(BlockManager.scala:821)  
  10.   at org.apache.spark.broadcast.HttpBroadcast.(HttpBroadcast.scala:52)  
  11.   at org.apache.spark.broadcast.HttpBroadcastFactory.newBroadcast(HttpBroadcastFactory.scala:35)  
  12.   at org.apache.spark.broadcast.HttpBroadcastFactory.newBroadcast(HttpBroadcastFactory.scala:29)  
  13.   at org.apache.spark.broadcast.BroadcastManager.newBroadcast(BroadcastManager.scala:62)  
  14.   at org.apache.spark.SparkContext.broadcast(SparkContext.scala:787)  
  15.   at org.apache.spark.SparkContext.hadoopFile(SparkContext.scala:556)  
  16.   at org.apache.spark.SparkContext.textFile(SparkContext.scala:468)  
  17.   at $line5.$read$$iwC$$iwC$$iwC$$iwC.(:13)  
  18.   at $line5.$read$$iwC$$iwC$$iwC.(:18)  
  19.   at $line5.$read$$iwC$$iwC.(:20)  
  20.   at $line5.$read$$iwC.(:22)  
  21.   at $line5.$read.(:24)  
  22.   at $line5.$read$.(:28)  
  23.   at $line5.$read$.()  
  24.   at $line5.$eval$.(:7)  
  25.   at $line5.$eval$.()  
  26.   at $line5.$eval.$print()  
  27.   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  28.   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  29.   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  30.   at java.lang.reflect.Method.invoke(Method.java:483)  
  31.   at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:788)  
  32.   at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1056)  
  33.   at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:614)  
  34.   at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:645)  
  35.   at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:609)  
  36.   at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:796)  
  37.   at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:841)  
  38.   at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:753)  
  39.   at org.apache.spark.repl.SparkILoop.processLine$1(SparkILoop.scala:601)  
  40.   at org.apache.spark.repl.SparkILoop.innerLoop$1(SparkILoop.scala:608)  
  41.   at org.apache.spark.repl.SparkILoop.loop(SparkILoop.scala:611)  
  42.   at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply$mcZ$sp(SparkILoop.scala:936)  
  43.   at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:884)  
  44.   at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:884)  
  45.   at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)  
  46.   at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:884)  
  47.   at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:982)  
  48.   at org.apache.spark.repl.Main$.main(Main.scala:31)  
  49.   at org.apache.spark.repl.Main.main(Main.scala)  
  50.   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  51.   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  52.   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  53.   at java.lang.reflect.Method.invoke(Method.java:483)  
  54.   at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:303)  
  55.   at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)  
  56.   at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)  
  57. 14/07/05 19:53:27 INFO MemoryStore: Block broadcast_0 stored as values in memory (estimated size 32.0 KB, free 294.6 MB)  
  58. 14/07/05 19:53:27 DEBUG BlockManager: Put block broadcast_0 locally took  78 ms  
  59. 14/07/05 19:53:27 DEBUG BlockManager: Putting block broadcast_0 without replication took  79 ms  
  60. res0: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[1] at textFile at :13 

git同步

對(duì)代碼作了修改之后,如果并不想提交代碼,那該如何將***的內(nèi)容同步到本地呢?

  1. git reset --hard  
  2. git pull origin master 

Akka消息跟蹤

追蹤消息的接收者是誰(shuí),相對(duì)來(lái)說(shuō)比較容易,只要使用好grep就可以了,當(dāng)然前提是要對(duì)actor model有一點(diǎn)點(diǎn)了解。

還是舉個(gè)實(shí)例吧,我們知道CoarseGrainedSchedulerBackend會(huì)發(fā)送LaunchTask消息出來(lái),那么誰(shuí)是接收方呢?只需要執(zhí)行以下腳本即可。

  1. grep LaunchTask -r core/src/main 

 從如下的輸出中,可以清楚看出CoarseGrainedExecutorBackend是LaunchTask的接收方,接收到該函數(shù)之后的業(yè)務(wù)處理,只需要去看看接收方的receive函數(shù)即可。

  1. core/src/main/scala/org/apache/spark/executor/CoarseGrainedExecutorBackend.scala:    case LaunchTask(data) =>  
  2. core/src/main/scala/org/apache/spark/executor/CoarseGrainedExecutorBackend.scala:        logError("Received LaunchTask command but executor was null")  
  3. core/src/main/scala/org/apache/spark/scheduler/cluster/CoarseGrainedClusterMessage.scala:  case class LaunchTask(data: SerializableBuffer) extends CoarseGrainedClusterMessage  
  4. core/src/main/scala/org/apache/spark/scheduler/cluster/CoarseGrainedSchedulerBackend.scala:          executorActor(task.executorId) ! LaunchTask(new SerializableBuffer(serializedTask)) 

小結(jié)

今天的內(nèi)容相對(duì)簡(jiǎn)單,沒(méi)有技術(shù)含量,自己做個(gè)記述,免得時(shí)間久了,不記得。

責(zé)任編輯:林師授 來(lái)源: 徽滬一郎
相關(guān)推薦

2014-07-03 15:40:09

Apache Spar

2014-07-04 10:58:47

Apache Spar

2014-07-23 10:02:11

Spark源碼

2009-08-06 15:03:11

行虛擬機(jī)Apache設(shè)

2010-02-03 13:55:51

Python 代碼

2010-05-27 16:18:58

SVN設(shè)置

2010-06-02 10:10:26

SVN源碼管理

2010-05-28 12:55:23

2010-03-16 14:41:06

Java Runnab

2024-02-22 10:27:00

Python開(kāi)發(fā)

2010-05-25 18:32:22

apache+svn+

2010-06-01 17:07:01

MySQL源碼

2010-03-12 17:35:00

Python字符串

2012-10-15 09:30:04

CSSDIVWeb

2010-03-16 10:32:36

Java線程撥號(hào)器

2010-05-19 15:00:18

Apache+SVN部

2023-03-24 16:18:08

微服務(wù)架構(gòu)

2010-09-13 10:45:04

2010-06-02 14:16:18

SVN版本控制

2023-09-03 23:49:35

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

女同久久另类99精品国产| 在线观看的网站你懂的| 蜜桃av综合| 国产一区二区三区欧美| 无限资源日本好片| 综合图区亚洲| 久久综合久久综合久久| 国产精品吹潮在线观看| 91嫩草|国产丨精品入口| 综合伊人久久| 色狠狠一区二区三区香蕉| 一级日韩一区在线观看| 丰满少妇一级片| 日韩国产欧美在线观看| 九九久久久久99精品| 双性尿奴穿贞c带憋尿| 欧洲午夜精品| 婷婷中文字幕一区三区| 亚洲午夜精品久久久中文影院av| 亚洲精品第五页| 日韩av电影一区| 欧美极品欧美精品欧美视频| 大吊一区二区三区| 丁香综合av| 91麻豆精品国产无毒不卡在线观看| 亚洲国产成人精品无码区99| 欧美一区二区三区在线观看免费| 91蜜桃免费观看视频| 成人性生交xxxxx网站| av图片在线观看| 你懂的国产精品| 在线视频欧美性高潮| 国产一线在线观看| 成人自拍视频| 欧美午夜精品免费| 六月丁香婷婷激情| 人人澡人人添人人爽一区二区| 久久久亚洲综合| 国产精品久久波多野结衣| 中文字幕日本人妻久久久免费 | 污视频在线看网站| 日本一区免费视频| 玛丽玛丽电影原版免费观看1977| 精品久久久久中文慕人妻| 免费看欧美女人艹b| 69久久夜色精品国产69乱青草| 91高清免费观看| 欧美日韩水蜜桃| 亚洲人成电影在线观看天堂色| 无码国产69精品久久久久网站 | 成人在线播放视频| 97久久精品人人爽人人爽蜜臀| 99国产高清| 国产伦子伦对白视频| 久久国产福利国产秒拍| 国产精品美女www爽爽爽视频| 久久久久久久99| 韩国亚洲精品| 欧美激情2020午夜免费观看| 九九热视频精品| 午夜欧美视频| 欧美大秀在线观看| 久久免费视频播放| 欧美午夜一区| 992tv在线成人免费观看| 国产一级一片免费播放放a| 欧美黄色aaaa| 久久99热精品| 精品小视频在线观看| 激情婷婷亚洲| 91高清在线免费观看| 欧美一级特黄视频| 日韩经典中文字幕一区| 国产精品成久久久久三级| 欧美国产一级片| 日本不卡123| 91老司机在线| 亚洲国产精品国自产拍久久| 成人av免费在线观看| 精品国产日本| 国产精品二线| 日韩一区日韩二区| 精品一区二区成人免费视频| 宅男在线观看免费高清网站| 亚洲图片欧美色图| 国产午夜福利视频在线观看| 国产私拍福利精品视频二区| 欧美精品 国产精品| 亚洲成人激情小说| 亚洲桃色综合影院| 久久久精品电影| 久久久久久久99| 日韩高清欧美激情| 91亚洲午夜在线| 日批视频在线播放| 久久久久成人黄色影片| 一本二本三本亚洲码 | 国产精品成人免费精品自在线观看| 一区二区三区不卡在线| 国产网红女主播精品视频| 一本到高清视频免费精品| 成年网站免费在线观看| 国产精品流白浆在线观看| 国产亚洲欧洲黄色| 久久久久人妻一区精品色欧美| 国产精品久久久久毛片大屁完整版 | 野战少妇38p| 久久av免费| 欧美二区在线播放| 奴色虐av一区二区三区| 国产传媒日韩欧美成人| 欧美亚洲爱爱另类综合| 日韩激情美女| 欧美影片第一页| 亚洲图片欧美另类| 91亚洲人成网污www| 欧美在线激情网| 国产成人av免费看| 亚洲国产成人一区二区三区| 日韩av在线播放不卡| 日韩毛片免费看| 日韩精品在线影院| 国产真实乱人偷精品视频| 蜜臀久久久99精品久久久久久| 国产精品免费一区二区三区| 日本不卡在线| 在线精品视频免费观看| 国产+高潮+白浆+无码| 图片小说视频色综合| 日本精品视频在线| 色wwwwww| 亚洲影院理伦片| 91 视频免费观看| 极品美女一区二区三区| 性欧美视频videos6一9| 精品国产免费无码久久久| 国产精品污网站| 国产精品-区区久久久狼 | 欧美日韩久久久| theav精尽人亡av| 红桃视频国产一区| 91午夜在线播放| 日本中文字幕在线播放| 欧美在线影院一区二区| 蜜桃传媒一区二区亚洲| 久久一二三四| 欧美精品中文字幕一区二区| 国产精品原创| 亚洲精品久久久久| 日韩精品久久久久久久酒店| 大桥未久av一区二区三区中文| 久久久久亚洲av无码专区喷水| 伦一区二区三区中文字幕v亚洲| 亚洲人成网站色ww在线| 天堂网免费视频| 久久久亚洲精品石原莉奈| 欧美日韩第二页| 伊人久久大香线蕉综合网蜜芽| 69**夜色精品国产69乱| 日色在线视频| 欧美日韩综合视频网址| 熟女少妇一区二区三区| 久久黄色网页| 日韩视频在线播放| 男人天堂久久| 美日韩精品免费观看视频| 国产成人精品一区二三区四区五区 | 国产精品一级久久久| 青青青国内视频在线观看软件| 欧美岛国在线观看| 亚洲黄色一区二区| 久久夜色精品一区| 在线免费av播放| 99精品综合| 成人免费视频观看视频| 国产精品13p| 伊人久久久久久久久久| 一二区在线观看| 一区二区三区在线视频免费观看| 精品国产aⅴ一区二区三区东京热| 亚洲午夜一区| 欧美国产一二三区| 欧美天堂一区| 欧美二区在线播放| 韩日视频在线| 5月丁香婷婷综合| 日韩黄色三级视频| 欧美激情一区不卡| 超级砰砰砰97免费观看最新一期| 亚洲精品系列| 亚洲成人自拍视频| 18国产精品| 欧美中文字幕第一页| 在线观看的av| 精品日韩欧美一区二区| 亚洲色成人www永久网站| 中文字幕日韩一区| 亚州av综合色区无码一区| 日韩电影免费在线看| 男女激烈动态图| 九九亚洲精品| 粉嫩av四季av绯色av第一区| 精品免费av在线| 欧美日韩国产成人| 国产女主播在线直播| 精品日本一线二线三线不卡| 乱子伦一区二区三区| 亚洲一级二级三级在线免费观看| 97人妻精品一区二区免费| 国产成人综合精品三级| 色综合天天色综合| 亚洲日本激情| eeuss中文| 精品国产乱码久久久久久果冻传媒| 亚洲自拍偷拍色图| 国产成人精品123区免费视频| 欧美理论片在线观看| 国产一级在线| 精品成人免费观看| 国产男男gay体育生网站| 色综合久久综合| 国产在线视频二区| 亚洲色图一区二区三区| 日本xxxxxxxxx18| 99久久er热在这里只有精品15| 一级 黄 色 片一| 久热精品在线| 精品久久久久久久久久中文字幕| 91成人网在线观看| 亚洲国产一区二区精品视频 | 国产亚洲永久域名| 日韩一级免费看| 亚洲精品电影| 亚洲一二三区精品| 成人精品视频| 欧洲久久久久久| 亚洲丝袜啪啪| 久久久99国产精品免费| 黄色欧美在线| 97超碰人人看人人| 免费观看性欧美大片无片| 国产日韩精品电影| 欧美三级电影网址| 成人国产在线视频| 日本免费一区二区三区等视频| 国产精品96久久久久久| 国产高清不卡| 26uuu另类亚洲欧美日本老年| 51漫画成人app入口| 欧美激情视频一区二区| 欧洲一区二区三区| 色综合导航网站| 一区二区三区伦理| 欧美精品久久久久久久久| 日本伦理一区二区| 久久久中文字幕| av资源中文在线| 97超级碰碰人国产在线观看| 136福利第一导航国产在线| 高清一区二区三区日本久| av电影在线免费| 欧美影院久久久| 国产成人精品123区免费视频| 国产精品成熟老女人| 亚洲男女网站| 亚洲字幕一区二区| 精品国产一区二区三区成人影院 | 黑人久久a级毛片免费观看| 国产精品亚洲综合| 美女少妇全过程你懂的久久| 青青草成人激情在线| 久久免费av| 2021狠狠干| 精品91久久久久| 亚洲国产精品久久久久婷蜜芽| 免费在线观看成人av| 成人午夜激情av| 国产一区二区h| 国产精品久久久久久久无码| 91麻豆免费在线观看| 国产午夜精品久久久久久久久| 国产精品久久久久久久久免费丝袜| 免费在线观看黄色小视频| 夜夜亚洲天天久久| 久久久久久91亚洲精品中文字幕| 在线观看日韩国产| 国产欧美久久久精品免费| 亚洲精品一区二区精华| 国产精品免费播放| 欧美大片欧美激情性色a∨久久| 午夜影院一区| 成人h猎奇视频网站| 伦理一区二区三区| 亚洲美女搞黄| 最新成人av网站| 不卡的av中文字幕| 成人免费观看视频| 人人妻人人澡人人爽| 一区二区三区波多野结衣在线观看 | 欧美性在线观看| 青青青国产精品| 六十路精品视频| 欧美.日韩.国产.一区.二区| 免费黄色福利视频| 国产精品一区二区三区网站| 精品人妻一区二区三区视频| 亚洲日本在线a| 日韩电影在线观看一区二区| 日韩欧美高清在线| fc2在线中文字幕| 97在线日本国产| 玖玖玖电影综合影院| 欧美一区二区在线视频观看| 欧美区日韩区| 久久久久久久久久久久久久久国产 | 午夜伦理一区二区| 国产乱码久久久| 国产小视频国产精品| 激情影院在线| 国产日韩在线视频| 国产剧情在线观看一区| 久艹在线免费观看| 国产在线一区观看| www.4hu95.com四虎| 欧美日韩国产色| 亚洲精品.www| 久久999免费视频| 欧美成人家庭影院| 日本成人三级| 亚洲自拍另类| 波多野结衣先锋影音| 亚洲一区二区三区中文字幕| 国产乱码精品一区二区三区精东| 在线亚洲欧美视频| 外国电影一区二区| 秋霞久久久久久一区二区| 亚洲女同同性videoxma| 2018国产精品| 一区二区三区在线视频观看58| 国产精品福利电影| 日韩有码在线观看| 九九热这里有精品| 亚洲成人18| 免费在线视频一区| 波多野结衣一二三四区| 91福利国产成人精品照片| 欧洲一区av| 奇米四色中文综合久久| 自拍偷拍欧美一区| 欧美女人性生活视频| 91麻豆123| 国产三级精品三级在线观看| 亚洲欧美综合另类中字| 在线日韩影院| 日本福利一区二区三区| 免费人成在线不卡| 国产日韩精品中文字无码| 欧美精品一二三四| 国产写真视频在线观看| 亚洲bt欧美bt日本bt| 国产专区一区| 妖精视频一区二区| 精品久久久香蕉免费精品视频| 欧美偷拍视频| 国产成人在线亚洲欧美| 日韩欧美国产精品综合嫩v| 亚洲小视频网站| 亚洲免费av在线| www.黄色小说.com| 久久免费在线观看| 日韩高清一级| 色综合天天色综合| 亚洲欧美偷拍另类a∨色屁股| 99久久久国产精品无码免费| 欧美精品少妇videofree| 盗摄系列偷拍视频精品tp| 欧美成人xxxxx| 国产精品久久久久久亚洲毛片 | 亚洲欧美日韩专区| 国产午夜精品福利视频| 91精品国产一区二区| 大香伊人中文字幕精品| 开心色怡人综合网站| 精品一区中文字幕| 国产精选第一页| 亚洲天堂色网站| 国产午夜久久av| 男人用嘴添女人下身免费视频| 久久久久国产免费免费| aaa一区二区| 91成人性视频| 偷拍欧美精品| 国产美女喷水视频| 欧美一区二区在线观看| 夜鲁夜鲁夜鲁视频在线播放| 一本一道久久a久久综合精品| 国产成人精品亚洲777人妖| www.欧美色| 欧美日韩999| 欧美伦理影院|