1,看您有維護博客,還利用業餘時間著書,在技術輸出、自我提高以及本職工做的時間利用上您有沒有什麼心得和你們分享?(也能夠包含一些您寫書的小故事。)
回答:在工做之餘可以寫博客、著書主要對技術的堅持和熱愛。本身平時除了工做時間回到家還得陪家人,用於本身學習的時間並不算多,本身天天在上下班的班車會看本身感興趣的書或者視頻,一天下來大概有一個多小時,在下班後會抽出兩個多小時動手作實驗或者寫博客,固然節假日會有更多的時間用於學習和寫東西。回顧本身寫博客和寫書的過程,開始的時候和你們同樣都是很痛苦,有時候不少想法寫不出來、有時候空白一片不知如何下筆,這種狀態下容易分散注意力,很長時間推動不了事情,後來本身用了番茄工做法,按照半個小時爲一個單元全神貫注只作一件事情,慢慢就可以集中精力進入寫做狀態。web
2,對於剛開始學習Spark框架的開發者新手,您是否能提供些最佳實踐方式?
回答:對於Spark新入門的同窗,建議多看網上文章和博客,還有就是看Spark相關的書和視頻,這樣可以更加系統地學習Spark的知識。學習Spark的同時必定要動手作實驗,也就是"紙上得來終覺淺,絕知此事要躬行"的道理。另外對Spark內部運行機制感興趣的同窗,能夠分析Spark的源代碼,對理解Spark運行原理有很好的幫助。若是我的精力容許平時也能夠多參加一些社區活動、關注如InfoQ相關大數據的公衆號,能夠開拓眼界、瞭解業界技術發展方向。算法
3,目前支持的編程語言有Scala、Java、Python和R,您以爲這些語言相比而言有什麼優劣?您有什麼推薦?而且Spark是用Scala寫的,對於開發者新手是否有難度?
回答:Scala是函數式編程語言,可運行在JVM上,不過Scala語法上有點晦澀,學習門檻較高、編譯效率也較慢;Java是你們比較熟悉語言,使用起來門檻較低,另外Java擁有完善的生態系統,不少大數據產品由Java開發或能夠運行在JVM上,在接口可以獲得這些產品的支持,Java最大的痛點在於代碼比較囉嗦,有可能其餘語言用幾行可以實現的,Java須要十幾行甚至幾十行纔可以實現;Python在學術界較爲流行,尤爲在天然語言處理(NLP)、神經網絡等領域有較多的開源產品能夠選擇,在機器學習中Python有後來居上的趨勢,不過因爲Python不是大數據處理框架的原生語言,在這些大數據處理產品的新功能每每不能第一時間支持Python語言;R是開源統計分析、繪圖的語言,利用CRAN資源庫實現豐富的機器學習算法、數據測試和分析過程,相對R語言略顯深奧,另外R僅能單機運行(在Spark已經打破這個瓶頸,可使用SparkR實現R分佈式運行)。
大數據中使用何種編程語言也是你們比較糾結的問題,也有比較大的爭議,我的認爲使用何用語言須要根據我的對語言的熟悉程度和使用場景來肯定,若是在機器學習中想利用NLP或密集的神經網絡處理則建議使用Python,若是須要對大規模的數據進行統計分析和標繪,那麼R語言成爲首選,若是想利用現有大數據計算產品運行進行通用的處理,那麼Java或者Scala更適合選擇。
雖然本身是Java的深度使用者,可是在開始接觸到Scala時,也仍是有點痛苦,相比Java它融合了函數式和麪向對象編程,語法上比較晦澀難懂,對於新手而言Scala有必定難度,若是是深刻學習或者應用則建議掌握Scala,畢竟用了它就知道它的好處了。編程
4,Spark程序的性能和調優方面,從您的實踐上來看,有哪些值得注意的?
回答:在不一樣的應用場景對Spark優化關注不一樣,本身談一下我的的經驗:
(1)資源調度:在實際部署的Spark集羣資源調度通常分爲粗粒度調度和細粒度調度兩種模式。粗粒度包括了獨立運行模式和Mesos粗粒度運行模式,在這種狀況下整個機器做爲分配單元執行做業,該模式優勢是因爲資源長期持有減小了資源調度的時間開銷,缺點是該模式中沒法感知資源使用的變化,易形成系統資源的閒置,從而形成了資源浪費。而細粒度包括了YARN運行模式和Mesos細粒度運行模式,該模式的優勢是系統資源可以獲得充分利用,缺點是該模式中每一個任務都須要從管理器獲取資源,調度延遲較大、開銷較大。對於運行的做業工做量較大、集羣共享程度低,建議使用粗粒度運行模式,而對於工做量比較均勻、集羣共享程度高,則建議使用細粒度運行模式。
(2)做業調度:對於Spark的做業目前提供了兩種調度策略:一種是FIFO模式,這也是目前默認的模式;另外一種是FAIR模式,該模式的調度能夠經過參數的配置來決定做業執行的優先模式。FIFO模式比較簡單,但沒法根據做業的優先級和權重進行分配,這種狀況下對於調度算法也須要根據做業工做量和集羣共享程度進行設置,通常認爲工做量小或者集羣共享程度低則建議使用FIFO模式,反之使用FAIR模式。
(3)Shuffle:儘量避免Shuffle,若是不能避免則應該減小Shuffle數據的規模,好比在數據處理中包含寬依賴和窄依賴操做,能夠經過窄依賴操做把數據規模減下來後再進行寬依賴的操做。另外在Spark中Shuffle分爲基於哈希的Shuffle寫操做和基於排序的Shuffle寫操做,基於哈希的Shuffle寫操做在Map和Reduce數量較大的狀況會致使寫文件數量大和緩存開銷過大的問題,在Spark1.2版本開始默認爲Shuffle寫。
(4)序列化&壓縮:業界公認大數據處理最大的瓶頸在於集羣的IO。在Spark中,把數據處理過程當中的數據存在內存中,減小磁盤的IO,極大提升處理速度。而對於在網絡傳輸上建議採用高效的序列化和壓縮算法,這樣可以大幅度減小數據處理時間,好比可使用Kryo序列化算法,在壓縮算法LZ4提供了壓縮速度和壓縮比俱佳的性能。
(5)最後須要說的是若是條件容許,把Spark升級到2.0版本,在該版本中經過鎢絲計劃對Spark核心和Spark SQL進行底層優化,相比之前的版本有了較大幅度的提高。緩存
5,可否談談使用Spark Streaming庫執行實時流數據分析的見解?以及流處理和實時處理的定義和區別?實時處理的重要性有哪些?
回答:Spark Streaming是Spark核心API的一個擴展,具備延遲低、吞吐量高、容錯能力強的實時流數據處理系統。它先接收實時流的數據並根據必定的時間間隔拆分紅一批批的數據,這些批數據在Spark內核對應一個RDD實例,而後調用Spark做業引擎處理這些批數據,最終獲得一批批結果數據。
我的以爲實時處理強調的是處理響應程度,須要在很短期內(如毫秒級)對外部的事件進行響應,而流處理則強調的是數據輸入和處理的形態,在這種處理形態中數據源源不斷的輸入,處理系統持續不斷地進行處理。
實時處理對於某些場景很是重要,它可以根據規則快速識別並對識別出的風險採起響應的動做,好比京東基於Spark的風控系統對交易的數據進行監控,攔截惡意訂單、過濾機器秒殺和防止商家刷單等行爲。微信
6,Spark的機器學習庫提供了豐富的算法,還有哪些其餘的開源機器學習庫能夠支持Spark?它們各有什麼優點?(優缺點?如最近的Intel BigDL, Tensorflowonspark等等?)
回答:我的瞭解TensorFlow、Caffe、MXNet、Apache Mahout和Intel BigDL等這些主流的開源機器學習庫直接或者間接支持Spark,在Spark中的SparkR可以分佈式地調用R語言的算法庫,另外因爲Spark支持Scala、Java和Python等語言,它能夠調用支持這些語言接口的機器學習庫。
它們之間的優缺點以下:
(1)TensorFlow能夠經過Yahoo TensorFlowOnSpark實現TensorFlow深度學習開源框架與Spark兼容,TensorFlow是可移植的機器學習和神經網絡庫,有良好的執行和伸縮性,它支持多種語言、較爲豐富的文檔和實例,相對其餘學習庫較爲成熟,。
(2)Caffe能夠經過Yahoo CaffeOnSpark實現分佈式版本,Caffe有強大的圖像分類算法,不過因爲Caffe發展停滯不前,選用須要慎重。
(3)MXNet是一個可移植的、可伸縮的深度學習庫,支持Python、R、Scala、Julia和C++等語言的API,不過缺少文檔和實例。
(4)Apache Mahout是Apache旗下的一個開源項目,計算引擎由以前的MapReduce遷移到Spark,它提供了經典的機器學習的算法,是一個可靠、文檔較爲翔實的機器學習庫。
(5)Intel BigDL是運行在Spark上的分佈式深度學習庫,它與Spark實現了無縫銜接,用戶能夠像編寫Spark程序編寫深度學習應用,並運行在Spark集羣中,BigDL庫目前支持Spark的1.五、1.6和2.0版本,不過因爲產生時間不長,社區開放程度有待提升。網絡
7,Spark如今是一枝獨秀的狀態,那麼對Google的Apache Beam您有什麼樣的見解?是否會對Spark有衝擊?
回答:Apache Beam原名Google DataFlow,是Google在2016年2月奉獻給Apache基金會進行孵化,2017年1月畢業成爲Apache的頂級項目。Apache Beam的主要目標是統一批處理和流處理的編程範式,爲無限、亂序、web-scale的數據集處理提供簡單靈活、功能豐富以及表達能力強大的SDK。直白來講就是Apache Beam就是在大數據處理引擎以外加了一層「殼」,這個「殼」定義數據處理的相關標準,在數據引擎的選用上能夠選用它本身的Google Cloud Platform,也能夠選擇Flink、Spark等大數據處理產品,Apache Beam的角色相似於之前傳統信息系統中集成平臺。
我的以爲Apache Beam並無直接與Spark競爭,它們的定位不一樣。Apache Beam是爲大數據數據處理產品提供一個「集成平臺」,而Spark目標是實現的是在一個堆棧中實現批處理、流處理、數據查詢、圖處理和機器學習等功能強大的產品。架構
8,您將會在大數據雜談分享什麼樣的主題?(用做預告:))
回答:本次大數據雜談將和京東Y事業部楊冬越同事作一次主題爲《Spark技術在智能供應鏈的應用》的分享,在該分享首先會介紹京東智能供應鏈並介紹預測在供應鏈中的做用,接着介紹預測系統的業務和技術架構,再接着介紹系統核心系統並介紹Spark在覈心繫統中的使用,最後結合本人所著書《圖解Spark:核心技術與案例實戰》部分章節介紹在該系統中的使用。框架
回答:在京東購物的同窗都有這樣的體驗,若是的是購買京東自營商品,可以在當天或者次日就能收到商品,這是由京東強大的供應鏈實現的,本次大數據雜談將和京東Y事業部楊冬越將作一次主題爲《Spark技術在智能供應鏈的應用》的分享,揭開在大數據和智能化背景下京東智能供應鏈的內幕。在該分享首先會介紹京東智能供應鏈並介紹預測在供應鏈中的做用,接着介紹預測系統的業務和技術架構,再接着介紹系統核心系統並介紹Spark在覈心繫統中的使用,最後結合本人所著書《圖解Spark:核心技術與案例實戰》部分章節介紹在該系統中的使用。機器學習
該文發表於編程語言
InfoQ的大數據雜談公衆號,微信號:BigdataTina2016