最近密集的在寫Spark 程式,感覺到終於該開始往下個階段邁進了,其實就像學習任何程式語言和Framework,Spark 學習也分三個步驟:
- 如何寫
- 如何調教/錯誤排除
- 如何寫的好
學會如何寫,網路上有不少的範例,不過大多是Scala和Python,如果要翻成Java版還需要額外花點功夫,等到開始寫一些程式丟到spark 上面跑,又會開始遇到一堆奇奇怪怪的錯誤訊息,比如說:
- Futures timed out after [300 seconds]
- This timeout is controlled by spark.executor.heartbeatInterval
- cannot assign instance of java.lang.invoke.SerializedLambda to field org.apache.spark.sql.UDFRegistration$$anonfun$27.f
- Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
這時候就要開始學習怎麼調教系統參數和錯誤排除,下面這個網站整理的蠻不錯的,把Spark performance tuning 分成幾大塊,分別是:
- Data Serialization
- Memory Tuning
- Memory Managemnt
- Data Structure Tuning
- Garbage Collection Tuning
最後就是程式都會動了,但是怎麼要跑那麼久?這時候就應該開始瞭解Spark 許多底層的運作原理,要怎麼寫才是正確的,怎樣寫才會有比較好的效能,下面收一些在學習spark 時收集到的不錯資訊:
- GitBook
- Spark 2.0 編程指南繁體中文版
- Mastering Apache Spark (2.3)
- Apache Spark - Best Practices and Tuning
- Apache Spark Join guidelines and Performance tuning
- OOM-Cases-in-Spark-Users
- Safrai
- Databricks
其它網路文章:
最後要提醒自己:
先求有,再求好,等到程式會動了,確定結果是大家想要的,有符合商業價值了,再來調教也不遲!
沒有留言:
張貼留言