眾所周知,Mahout是基於Hadoop分布式系統的,要想看懂Mahout的源碼,首先得明白mahout是如何使用hadoop的!
首先,在我的<<Hadoop運行原理詳解>>一篇中,詳細介紹了hadoop的運行機制,這裡就不多說了!下面我就以Kmeans聚類算法為例,講講mahout如何利用hadoop實現數據挖掘算法並行化.如以下類圖所示,
該圖描述了整個mahout實現Kmeans算法的架構圖,首先KmeansCluster繼承Cluster,在KmeansCluster中有幾個比較重要的方法,首先clusterPoints()是實現Kmeans聚類算法的方法,而其中調用了runKMeansIteration()方法,該方法是單次聚類迭代方法.
尤其可見,這塊算法實現和普通kmeans算法沒有太大差別!在Mahout針對每個算法都有一個Driver,這個東西是干什麼的啊?
我們先看看KMeansDriver源碼,KmeansDriver繼承了AbstractJob.我們知道Hadoop上的任務都是以Job的形式啟動的!我們要使用某個算法進行一項數據挖掘工作,因此就要啟動一個Job.因此,KmeansDriver就是創建一個Job,然後對Job的屬性進行配置,然後運行該Job.
上圖反映了KMeansDriver工作原理。