Holden Karau是IBM首席軟件工程師,負責改進Apache Spark並協助開發者向Spark貢獻代碼。Holden曾是Databricks的軟件開發工程師,負責Spark和Databricks Cloud的後端開發。她曾在Google和亞馬遜從事軟件開發工做,分別負責Google+的後端開發和亞馬遜的智能分類系統。她在大數據和搜索領域有着豐富的經驗,精通Scala, Scheme, Java, Perl, C, C++, Ruby等語言。Holden著有《Spark快速數據處理》,與人合著有《Spark快速大數據分析》。git
問:你是《Spark快速數據處理》和《Spark快速大數據分析》的做者,這兩本書有什麼區別?你的寫做過程是什麼樣的?程序員
《Spark快速數據處理》是第一本關於Apache Spark的書,因此這本書的重點是告訴人們如何開始。《Spark快速大數據分析》則是在一段時間以後寫的,那時Spark SQL和其餘重要組件已經加入了Spark,這本書更加專一於細節,可是仍然適合那些對Spark不甚瞭解的人。面試
在這兩本書之間,個人寫做實踐發生了很大的變化,緣由有幾個。《Spark快速大數據分析》是一本合做完成的書,從早期開始,在技術審校的幫助下咱們就提早發佈了幾個版本,因此咱們能夠輕鬆地作出改動,而且咱們收到的反饋對於完成這本書來講很是有效。在寫做《Spark快速大數據分析》時,我還在Databricks工做,因此從程序委員會那裏進行事實覈查或得到反饋都是很是容易的,由於他們中的不少人就在個人辦公室裏。shell
問:你在Databricks的工做和在IBM的工做之間最大的區別是什麼?你是否須要作出哪些工做上的調整?數據庫
對於平常工做來講,我在IBM的最大改變可能就是:我有更多時間專一地從事關於Spark的工做了。當我在Databricks時,我必須得花不少時間從事Databricks Cloud(商業產品)的相關工做。還有其餘的一些變化,好比Databricks擁有Spark的大部分代碼提交者,因此在那裏個人問題會更快獲得回答,代碼評審的速度也更快。固然,還會有小公司和大公司之間的差異,可是咱們的小組作起事來卻出乎意料地靈活。編程
問:R語言是開源世界最流行的數據分析、統計計算及製圖語言,做爲Spark的長期開發者之一,你認爲Spark會提供R語言的接口嗎?後端
這件事已經發生了!SparkR項目如今正式成爲Spark的一部分,同時Spark也開始提供R API。可是做爲最新的組件,SparkR還有很長的路要走,要想和Scala作到功能對等還須要一段時間。微信
問:不少企業從關係型數據庫向大數據處理工具(如Spark)轉型的過程當中都遇到了困難。對於這樣的公司你有哪些建議?網絡
我認爲從傳統關係型數據庫向分佈式系統轉型的過程當中會涉及到不少關於開發者的改變。Spark SQL能夠彌補一些分析方面的差距——可是我認爲很重要的一點在於:開發者必須增進對分佈式系統在實踐中的工做方式的理解。與其上來就重寫現有的複雜系統,還不如在開始時從新搭建一個新項目(也許換一個新數據源),這會幫助開發者們創建起具備指導性的知識系統。分佈式
問:不少人認爲Spark會憑藉優秀的性能推翻Hadoop的統治,你贊成嗎?大數據處理技術(如Hadoop, Pig, Tez, Hive,以及Spark)的生態系統在將來將會怎樣?
隨着時間推移,很難預測大數據系統在將來將會發生什麼,尤爲在數量如此多的人都在參與開源社區的狀況下。我相信長此以往,Spark會取代不少Map/Reduce系統和定製化系統,而其餘系統則會把Spark做爲執行引擎。可是仍然會有更適合定製化系統來完成的用例。
問:對於數據分析的不一樣環境來講,你如何在命令行和Spark之間作出選擇?
一般來講,我使用命令行會更加駕輕就熟,可是對於調試工做以外的探索性工做來講,使用notebooks這樣的工具確實頗有幫助。固然,你也能夠用Databricks Cloud,可是我使用Jupyter和Zeppelin的體驗也很不錯。然而對於生產環境下的工做來講,我認爲notebooks頗有侷限性,難以測試,因此在我渡過探索階段以後,我會使用更加傳統的jar包。
問:Hive On Spark和Spark SQL是什麼關係?你認爲哪一個項目在將來會更有潛力?
Spark SQL是Spark的一個重要組件——經過引入Datasets,Spark在已有的關係型API的基礎上把函數式編程帶入到了Spark SQL中。我對Spark SQL的將來充滿期待。
問:對於已經熟練掌握Hadoop的人來講,學習Spark的路線是什麼樣的?你推薦閱讀源碼這種學習方式嗎?
個人觀點可能有些不客觀,我認爲《Spark快速大數據分析》會是一本進入這個領域的好書——可是在Spark shell裏作一些探索性的工做也是快速進入狀態的好辦法。對於Spark如今所處的時期來講,若是你想成爲Spark開發者,閱讀源碼是頗有幫助的,可是對於終端使用者來講,閱讀源碼一般是沒有必要的,除非你想要使用最新的特性。
問:如何高效地閱讀像Spark和Hadoop這樣大型開源項目的代碼?有哪些工具能夠幫得上忙?
我認爲閱讀Spark源碼對於想要向Spark貢獻代碼的人來講是一項絕佳的活動。由於我是一位Emacs使用者,因此我喜歡用Magit,可是我也用過Ensime。不少其餘開發者也以爲IntelliJ很好用。
問:中國的女性程序員比較少,特別是在「大數據」領域。對於那些想要成爲開發者或軟件工程師的女性,你有哪些建議?
我但願我能給出更好的建議,可是顯然個人建議都從個人我的經歷出發,而每一個人狀況都是不一樣的。話雖如此,可是我發現加入Women Who Code和Double Union(舊金山本地的女性黑客空間)這樣的團體真的頗有幫助,不管對於學習仍是創建網絡來講。
我認爲在起步時參與開源軟件開發是一種積累經驗、增長資歷的好方法,同時也能幫助你面試。話雖如此,可是對於某些開源項目來講,社區裏會有不少明爭暗鬥,因此我老是儘量地尋找友善的人,或者和個人朋友們一塊兒工做。另外,我認爲作分享是一種展現你的工做和結交領域內有趣的人的有效方法。