度過了浮躁的第乙個月,第二個月開始接手trumpet的測試任務,要求在月底之前完成trumpet中bicluster,svd,linearregression的效能優化並發布第乙個release。
第一周follow up,在學弟離職前學習如何修改scala**,編譯並在集群上執行。在集群上部署spark的分析系統dew並生成分析圖表,用於分析spark執行階段的各個stage的情況,記憶體使用情況以及網路通訊情況。
第二週看懂bicluster, svd, linearregression, wilcox, covariance的原始碼,從讀取輸入到呼叫mllib中演算法運算再到最後輸出。同時學習spark的邏輯執行流程,物理執行流程。spark根據action的型別劃分job,每次job從最後的partition回溯到最一開始的輸入partition,根據其中的shuffle型別劃分出stage。最後按照partition的數目劃分task並分配到各個executors上面。了解了這些原理為之後優化和測試的工作提供了理論的支援。
第三週修改bicluster,svd**。
svd中把對於dom的呼叫去掉了,降低了對於記憶體的要求,使得我們可以採用更小的partitions,減少了shuffle的數量。最終效能提公升了一倍。
bicluster是主要修改的程式,起初的思想很簡單,參照svd降低對於記憶體的要求,採用更小的partitions。同時重寫原來的矩陣乘法和矩陣轉置乘,利用rdd的窄對映把rdd直接作為矩陣乘的引數,減少一次collect的shuffle。但是在測試的時候發現有一次呼叫bicluster時間很短,後來每一次都達到了迭代的上限而不能收斂。後來的時間全部花在解決這個問題上面,經過一步步的排查發現在bicluster之前會呼叫依次svd,svd返回並傳給bicluster的引數每次都不一樣。而迭代的過程會放大誤差,導致每次的結果都出現偏差。最後發現svd採用的是近似估計,返回的值是不確定的。解決的辦法是通過降低準確度使每次傳給bicluster的值保持恆定。
第四周對bicluster和linear regression進行最後的優化。在開始讀入資料的時候採用較大的partition,在呼叫演算法的時候採用較小的partition,並將partition介面開放給使用者保持程式的健壯性。
最終為期乙個月的優化終於告一段落,在大資料的情況下,每次改動都要跑10個小時的測試。這就更需要我們能夠準確的定位錯誤,根據分析結果反覆推測問題到底在**。在這一過程我明白,思考有的時候比盲目的行動更為重要,一旦出現可疑之處先反覆思考問題出在**要好過急於向前推進最後原地打轉。
來公司第二個月
時間過的真快啊 一轉眼來公司兩個月了 還記得第乙個月的時候整天焦頭爛額的 現在卻又是另一番景象 剛來的乙個月每天很忙 但是每天忙很焦慮 因為忙不出什麼東西 現在每天也很忙 但是很快樂 有時候自己想想 笑著對自己說原來我也是挺喜歡程式設計的 現在是忙的不亦樂乎 總覺得自己很喜歡藝術 但是缺乏藝術的細胞...
測試第二個月 演算法
def fun i if i 0 return 0 elif i 1 return 1 else return fun i 2 fun i 1 if name main for i in range 10 print fun i end for i in range 6 i 1 for j in r...
依然清閒的第二個月
轉眼間,工作已經邁入了第二個月。也已經兩個週沒寫點記錄了!回顧前乙個月的收穫 認識了一些同事,可能在若干年以後我會把他們都忘記了,其中乙個女同事叫蔡夢嬌,工作上的事情我都在問她,真是乙個熱心的女生。問了這麼多不知道人家會不會煩,回頭有機會請她吃飯以表謝意。說道吃飯,我剛剛收到了工資 818.18元,...