編輯推薦
Spark被稱為大數據處理王者技術Hadoop的真正挑戰者。本書以豐富示例介紹Spark程序和數據挖掘算法設計,更好地幫助Spark開發者提高學習效率。
內容簡介
本書以時下流行的Hadoop所存在的缺陷為齣發點,深入淺齣地介紹瞭下一代大數據處理核心技術Spark的優勢和必要性,並以簡潔的指引步驟展示瞭如何在10分鍾內建立一個Spark大數據處理環境。在此基礎上,本書以圖文並茂和豐富的示例代碼講解的形式係統性地揭示瞭Spark的運行原理、算子使用、算法設計和優化手段,為讀者提供瞭一個快速由淺入深掌握Spark基礎能力和高級技巧的參考書籍。
本書共六章,涉及的主題主要包括大數據處理技術從Hadoop發展到Spark的必然性、快速體驗Spark的指引、Spark架構和原理、RDD算子使用方法和示例、Spark算法設計實例、Spark程序優化方法。
本書適閤需要使用Spark進行大數據處理的程序員、架構師和産品經理作為技術參考和培訓資料,亦可作為高校研究生和本科生教材。
作者簡介
劉軍,男,1976年生人,博士,副教授,碩士生導師,北京郵電大學數據科學中心主任。
2003年至2007年任職於IBM中國研究院,擔任高級研究員及部門經理,建立IBM中國研究院電信融閤網絡管理研究方嚮,主持研發Websphere及Tivoli電信産品綫中多項關鍵技術,期間發錶多篇國際會議及刊物論文,並申請獲得多項美國專利。
2007年至2012年創辦歡城(北京)科技有限公司,開創中國無端網絡遊戲産業,並擔任中國軟件協會網頁遊戲專業委員會委員。公司産品多次榮獲國內互聯網業界奬項,2008年獲中國互聯網協會“十分具運營價值Webgame”奬項,
2012年至今在北京郵電大學信息與通信工程學院任教,研究方嚮為電信及互聯網大數據分析、高速數據流挖掘算法,並牽頭組建北京郵電大學數據科學中心。開設研究生課程《海量數據處理中的雲計算》,發錶大數據分析相關SCI/EI檢索論文十餘篇,並獨著《Hadoop大數據處理》一書,該書被哈工大、中南大學等多所高校的相關課程作為教材使用。
內頁插圖
目錄
第1章從Hadoop到Spark
1.1Hadoop——大數據時代的火種
1.1.1大數據的由來
1.1.2Google解決大數據計算問題的方法
1.1.3Hadoop的由來與發展
1.2Hadoop的局限性
1.2.1Hadoop運行機製
1.2.2Hadoop的性能問題
1.2.3針對Hadoop的改進
1.3大數據技術新星——Spark
1.3.1Spark的齣現與發展
1.3.2Spark協議族
1.3.3Spark的應用及優勢
第2章體驗Spark
2.1安裝和使用Spark
2.1.1安裝Spark
2.1.2瞭解Spark目錄結構
2.1.3使用Spark Shell
2.2編寫和運行Spark程序
2.2.1安裝Scala插件
2.2.2編寫Spark程序
2.2.3運行Spark程序
2.3Spark Web UI
2.3.1訪問實時Web UI
2.3.2從實時UI查看作業信息
第3章Spark原理
3.1Spark工作原理
3.2Spark架構及運行機製
3.2.1Spark係統架構與節點角色
3.2.2Spark作業執行過程
3.2.3應用初始化
3.2.4構建RDD有嚮無環圖
3.2.5RDD有嚮無環圖拆分
3.2.6Task調度
3.2.7Task執行
第4章RDD算子
4.1創建算子
4.1.1基於集閤類型數據創建RDD
4.1.2基於外部數據創建RDD
4.2變換算子
4.2.1對Value型RDD進行變換
4.2.2對Key/ Value型RDD進行變換
4.3行動算子
4.3.1數據運算類行動算子
4.3.2存儲型行動算子
4.4緩存算子
第5章Spark算法設計
5.1過濾
5.2去重計數
5.3相關計數
5.4相關係數
5.5數據聯結
5.6Top�睰
5.7K�瞞eans
5.8關聯規則挖掘
5.9kNN
5.10樸素貝葉斯分類
第6章善用Spark
6.1閤理分配資源
6.2控製並行度
6.3利用持久化
6.4選擇恰當的算子
6.5利用共享變量
6.5.1纍加器變量
6.5.2廣播變量
6.6利用序列化技術
6.7關注數據本地性
6.8內存優化策略
6.9集成外部工具
參考文獻
精彩書摘
第1章從Hadoop到Spark
說起Spark,就不得不提到可以說是Spark“前任”的Hadoop技術。同為目前最為炙手可熱的兩個大數據計算框架,Hadoop與Spark經常被放在一起進行比較。受Google大數據計算框架啓發而産生的Hadoop由於齣現時間較早,並且由於其大幅降低瞭編寫分布式並行計算程序的難度,同時具備優秀的低成本和可擴展特性,從2008年成為Apache頂級項目起,Hadoop用不到10年的時間顛覆瞭曆史悠久的大數據處理技術格局,成為當之無愧的大數據處理技術“無冕之王”。然而,由於Hadoop的設計重點是解決大數據量情況下的批量運算問題,因此在計算模式多元化(例如迭代和圖計算)和實時性要求更高(流式計算和實時計算)的新環境下顯得有點“老態龍鍾”。於是,強調迭代計算下的性能以及兼容多種計算模式的Spark技術應運而生,並在很短的時間內形成瞭全麵取代Hadoop之勢。為瞭理清兩者的關係以更好地理解Spark,在本書的開篇我們就從大數據的齣現和Hadoop的産生說起,通過簡要剖析Hadoop的原理以說明其局限性,並用一個簡單的常用算法實例的運行性能對比,為大傢展示Spark的強大能力。
1.1Hadoop——大數據時代的火種
1.1Hadoop——大數據時代的火種
1.1.1大數據的由來
1965年4月19日,時任仙童半導體公司工程師,後來創建英特爾公司的戈登·摩爾在著名的《電子學》雜誌(Electronics Magazine)發錶文章,預言半導體芯片上集成的晶體管和電阻數量將每年增加1倍。10年後,摩爾在IEEE國際電子組件大會上將他的預言修正為半導體芯片上集成的晶體管和電阻數量將每兩年增加1倍,這就是著名的“摩爾定律”[1](如圖1��1所示)。誰也想不到,這個預言猶如一隻看不見的大手推動著半導體行業在半個世紀裏的飛速發展,並見證瞭以此為基礎的IT産業的蓬勃發展。然而,不是所有人都能有摩爾這樣的洞察力和幸運。在變幻莫測的科技界,更多自信滿滿的預言者被無情的現實擊敗。下麵,就讓我們一起來迴顧一下科技史上最為著名的6個失敗預言,並見證隨著這些預言逐一破滅而到來的大數據時代。
圖1��1摩爾和摩爾定理
�r 最失敗預言一: “我找不到普通傢庭也需要計算機的理由。”
——肯·奧爾森(Ken Olsen),數字設備公司(DEC)創始人
1977年,美國數字設備公司(DEC)創始人肯·奧爾森認為,普通的傢庭是不會花費巨資來購買一颱計算機的。他認為普通傢庭既承擔不起計算機那昂貴的價格,也不需要計算機如此強大的計算能力。當然,後來的故事我們已經知道,隨著Apple、IBM等推齣價廉物美的個人計算機,PC迅速普及到普通傢庭。早在2011年在美國進行的一次關於PC擁有量的調查就顯示,僅擁有一颱PC的傢庭就占到14%,而約60%的傢庭擁有3颱或者3颱以上PC。在中國市場,2014年全國傢庭電腦普及率已超過50%,在經濟較為發達的城市中,傢庭電腦普及率已超過80%。很多傢庭不僅擁有供傢庭娛樂或辦公用的颱式機,還會購買一些齣門旅行或者移動工作時需要的便攜式電腦,包括筆記本、上網本、平闆電腦等,甚至還有少數人會擁有自己的服務器。毫無疑問,計算機已成為我們日常生活的一部分。通過計算機,我們每個人都能夠以前人所無法想象的速度産生、處理和消費數據。
�r 最失敗預言二: “很多人預測1996年互聯網産業將大規模增長。但我的預測是,1996年互聯網産業由於增長過於快速,將像超新星一樣爆炸後而走嚮崩潰。”
——羅伯特·邁特卡爾夫(Robert Metcalfe),3Com公司創始人
1995年,美國公共電視網(Public Broadcasting Service,PBS)推齣瞭一檔電視節目,名為《計算機記事》(Computer Chronicles)。這個節目介紹瞭當時還隻是少數極客玩具的互聯網相關技術、軟件和服務。由此,互聯網正式開始進入美國公眾視野,隨之而來的是快速增長的互聯網用戶並給當時有限的網絡帶寬帶來瞭極大的壓力。在這一背景下,網絡設備製造商3Com創始人羅伯特·邁特卡爾夫在InfoWorld發文作齣瞭悲觀的預測。他預測1996年互聯網産業將由於增長過於快速而走嚮崩潰,並錶示如果事實情況證明自己該預測有誤,將當眾“自食其果”。顯然,互聯網並沒有如他預測的那樣走嚮衰敗,反而日益繁榮。因此,在1999年舉行的國際互聯網大會上,邁特卡爾夫在眾目睽睽之下,把印有這一預測文字的紙張攪拌到一杯水中,然後一飲而盡。到瞭21世紀的今天,互聯網已經滲透到經濟社會各領域,給每個人的生活帶來瞭前所未有的改變。Google、Facebook、Youtube、Twitter、QQ、微博、微信等豐富多彩的互聯網服務,為每個人打開瞭一扇從網絡瞭解世界、嚮世界分享自我的窗口,在互聯網中自由平等地交換數據與信息。
�r 最失敗預言三: “全球垃圾郵件問題將在今後兩年內得到解決。”
——比爾·蓋茨(Bill Gates),微軟創始人
隨著20世紀90年代互聯網的齣現和發展,由於互聯網及相關服務的高度開放性和交互性,任何一個網站或個人都能生産和發布信息,這為所有信息的傳播開闢瞭一個幾乎不受限製的空間。在此之前,全球的數據量基本是每20個月增加1倍。而在互聯網齣現之後,數據量則呈現齣幾何級數增長的趨勢。然而,在暴漲的數據中,並不完全是對用戶有益,其中還充斥著大量垃圾數據,垃圾郵件就是其中最臭名昭著的一類。比爾·蓋茨,微軟帝國的締造者,毫無疑問是一位“技術控”,他堅信隨著技術的發展垃圾郵件必然會得到有效控製,並且這一目標將很快實現,互聯網會因此變得更加安全。因此,2004年11月在馬德裏舉行的一次互聯網大會上,比爾·蓋茨錶示: “目前垃圾郵件已成為全球非常嚴重的安全問題,業界還沒有找到有效遏製措施,但我們希望這一現象在兩年之內得到控製。”遺憾的是,現實比他預言的要殘酷得多,直到今天垃圾郵件仍然是睏擾全球互聯網用戶的頑疾。就在筆者編寫本段文字的時候,在屏幕的右上角就在彈齣郵件軟件收到的垃圾郵件提示信息。
�r 最失敗預言四: “電視節目的流行時間不會超過半年,公眾每晚會麵對著一個小盒子,他們將對此感到厭煩。”
——達裏爾·紮努剋(Darryl Zanuck),20世紀福剋斯公司高管
在20世紀中期,電視機雖然已經開始走入普通傢庭,開啓瞭影音娛樂時代。但早期的電視機可以說隻是一個簡陋的黑白圖像接收器,在這樣的設備上觀看娛樂節目的體驗可想而知。因此,雖然像20世紀福剋斯這樣的傳統電影製作和發行公司感覺到瞭電視所帶來的挑戰,但他們仍然認為這種簡陋的娛樂形式很快會隨著人們對電視機新鮮勁的過去而被淘汰,這也是為什麼達裏爾·紮努剋會預言電視節目的壽命會非常短暫的原因。然而,紮努剋嚴重低估瞭人們對即時影音媒介的強烈需求以及技術所帶來的變化。隨著彩色電視、無綫技術和光通信技術的發展,電視節目從模擬信號發展為數字信號。同時,電視節目的傳輸媒介已經不僅僅局限在無綫電波和有綫電視綫纜,人們可以通過PC、手機、平闆電腦等多種終端收看電視節目。收看電視節目已經不僅僅是為瞭人們每晚的休閑娛樂,更是人們認識世界、瞭解世界的途徑。人們對富媒體的需求不但沒有減退,反而與日俱增。同時,人們對電視節目的視覺效果也提齣瞭更高的要求,從標清到高清再到超高清,人們不斷提齣著對視覺效果的更高要求並得到滿足。清晰度的不斷提升,意味著在畫麵大小不變的情況下,需要有更多的像素點,這也帶來瞭在網絡中傳輸數據的快速膨脹。
……
前言/序言
自2012年迴歸校園開始電信與互聯網大數據分析科研生涯,我與Hadoop那頭黃色小象就結下瞭不解之緣。感謝Google的論文、Yahoo的資助、Doug Cutting無與倫比的聰明纔智,以及Hadoop開源社區無私奉獻的參與者,讓成韆上萬跟我們一樣的中小開發者團隊擁有瞭低成本處理大規模數據的能力。HDFS、MapReduce、Pig、Hive、HBase這些技術組件,幫助我們完成瞭一個又一個TB甚至PB級數據集的分析任務。那頭可愛的黃色小象,陪伴我度過瞭一個又一個美好的日子。多麼希望這種隻用一個技術族就能解決各種大數據處理問題的美好日子能一直持續下去,相信這也是很多開發者夢寐以求的理想國度。然而,夢想終歸是夢想。在兩年前的某一天,無意中從網絡上的一篇技術文章中看到瞭Spark這一新興技術,文中宣稱Spark性能和功能均優於Hadoop。將信將疑的我按照文章中的綫索找到瞭Spark官網,下載解壓後經過短暫試用,我就被Spark的簡潔、高效、靈活的特性徹底迷住瞭。從那時起我就知道,Hadoop,我心目中大數據處理王者技術上的真正挑戰者到來瞭。Spark以分布式內存對象架構為基礎,以RDD轉換模式為核心,並輔以豐富的RDD算子,不僅解決瞭大數據處理迭代任務的性能問題,還將開發者從簡陋的Map/Reduce編程模式中解放齣來,以更加靈活的方式控製數據的計算過程,並激發無窮的創意。因此,我們的團隊逐漸將數據處理技術棧由Hadoop轉嚮Spark。在這個過程中,我們發現目前已有的Spark相關書籍大多集中在介紹Spark技術的基礎原理以及Spark相關工具(例如SparkSQL、SparkR等)的基本使用方法上。而要學習如何使用Spark中提供的豐富算子進行算法設計時,隻能以大浪淘沙的方式從網絡中零散的資料中尋找參考。因此,我們覺得如果有一本能以豐富示例介紹Spark程序和數據挖掘算法設計的書籍,應當能更好地幫助Spark開發者提高學習效率,這也就是我們撰寫本書的原動力。
基於這一原動力,本書突齣以實例的方式介紹和展示Spark程序和算法設計的方法。第1章以科技史上最為著名的6個失敗預言引齣瞭大數據時代以及Hadoop技術齣現的必然性,然後通過Hadoop與Spark的對比揭示瞭Hadoop的局限性和Spark的優勢。第2章以簡潔明瞭的方式說明瞭如何以最快的方式搭建一個Spark運行環境,並通過Shell環境體驗Spark的強大功能。第3章以圖文並茂的形式講解瞭Spark的工作原理、架構與運行機製,並著重介紹瞭Spark的核心RDD的變換過程。第4章以大量示例代碼的形式詳細說明瞭Spark豐富的算子,包括創建算子、變換算子、行動算子和緩存算子。為瞭幫助讀者掌握使用Spark設計和實現復雜算法的方法,第5章以10個常見算法實例展示瞭Spark處理復雜數據處理工作的能力。第6章從閤理分配資源、控製並行度等9個方麵介紹瞭優化Spark性能、拓展Spark功能的方法。
與市麵上大部分Spark書籍不同,除原理性文字外,本書還提供瞭大量的Spark代碼實例,完成這些代碼是一項艱巨的工作。因此,除本書的作者外,我們必須要感謝為文中代碼編寫和測試作齣瞭巨大貢獻的參與者,他們是來自北京郵電大學數據科學中心的研究生梁陽、林澍榮、王濛、秦超、邱德揚等同學,以及北京浩瀚深度信息技術股份有限公司大數據專傢張碩、宋若寜。
由於作者水平有限,加之開源社區的高度活躍性,Spark技術仍在快速發展中。因此,書中難免會存在不足之處,還請讀者見諒並批評指正。意見、建議或交流請發電子郵件至liujun@bupt.edu.cn。
北京郵電大學 數據科學中心 劉軍
2016年8月
《海納百川:從數據洪流到智能洞察》 在這個信息爆炸的時代,數據如同奔騰不息的河流,以驚人的速度和規模衝擊著我們。如何駕馭這股洪流,從中挖掘齣有價值的寶藏,將原始數據轉化為洞察力、驅動創新、重塑商業格局,成為瞭當今技術領域最重要的課題之一。本書《海納百川:從數據洪流到智能洞察》正是一本緻力於解答這一挑戰的指南,它將帶領讀者深入瞭解如何構建和運用強大的數據處理體係,將海量、異構、高速流動的數據轉化為能夠賦能決策、驅動增長的寶貴資産。 本書並非零散的技術堆砌,而是以一條清晰的脈絡,引導讀者從宏觀的認知齣發,逐步深入到具體的技術細節和實踐應用。我們將首先建立起對大數據時代核心挑戰的深刻理解,認識到傳統數據處理方式在麵對“4V”——Volume(體量)、Velocity(速率)、Variety(多樣性)和 Veracity(真實性)——時的局限性。隻有清晰地認識到問題的復雜性,我們纔能更好地理解後續解決方案的必要性和優越性。 在奠定基礎之後,本書將聚焦於現代大數據處理架構的核心組件。我們將深入剖析分布式存儲的原理,理解數據是如何在集群中被高效、可靠地管理和訪問的。這包括對分布式文件係統(如HDFS)的內部機製、數據分片、副本冗餘、容錯機製等方麵的詳盡解讀。瞭解這些底層原理,是構建穩定、可擴展數據處理平颱的前提。 接著,我們將目光轉嚮分布式計算。這是大數據處理的引擎。本書將係統性地介紹主流的分布式計算模型和框架。我們會詳細講解 MapReduce 的經典範式,雖然它在某些方麵已被更先進的技術所超越,但其核心思想——“分而治之”——至今仍具有重要的參考價值。在此基礎上,我們將重點闡述流式處理和批處理在現代數據架構中的協同作用。 對於流式處理,我們將深入探討其在實時數據分析、事件驅動架構中的關鍵作用。我們會介紹領先的流式處理引擎,分析它們在數據攝入、狀態管理、事件排序、窗口計算等方麵的核心技術。通過具體的案例,讀者將理解如何在數據剛剛産生的那一刻,就能對其進行實時分析和響應,捕捉轉瞬即逝的商業機會。 在批處理方麵,我們將深入探討其在大規模離綫數據處理、ETL(Extract, Transform, Load)流程、數據倉庫構建中的不可替代性。我們將介紹業界領先的批處理框架,解析其在任務調度、數據分區、容錯恢復、優化執行等方麵的精妙設計。通過對這些批處理技術的掌握,讀者將能夠高效地處理 TB 甚至 PB 級彆的數據集,完成復雜的報錶生成、數據挖掘任務。 本書並非隻停留在概念和原理的層麵,更重要的是,我們將帶領讀者深入到具體技術的應用實踐中。我們知道,理論的海洋需要實踐的扁舟纔能抵達成功的彼岸。因此,本書將穿插大量的實踐指導和案例分析。 在數據存儲方麵,我們將探討不同類型的大數據存儲解決方案,包括分布式關係型數據庫、NoSQL數據庫(如鍵值存儲、文檔數據庫、列族數據庫、圖數據庫)以及數據倉庫和數據湖等。我們會分析它們各自的適用場景、優缺點,以及在實際應用中如何進行選擇和部署。理解數據的存儲模式,是高效檢索和處理數據的關鍵。 在數據處理方麵,本書將詳細解析如何利用強大的分布式計算框架來解決實際問題。我們將重點介紹這些框架在數據清洗、轉換、聚閤、連接、機器學習模型訓練等方麵的強大能力。通過實例,讀者將學習如何將原始數據轉化為結構化、可用化的信息,如何構建復雜的數據管道,以及如何自動化數據處理流程。 此外,本書還將重點關注數據分析和智能洞察的實現。我們將介紹如何利用大數據處理技術來支持各種高級分析場景,包括但不限於: 探索性數據分析 (EDA):如何快速地對海量數據進行概覽,發現數據中的模式、趨勢和異常。 商業智能 (BI):如何構建數據報錶和儀錶盤,為業務決策者提供直觀、易懂的數據洞察。 機器學習與人工智能 (AI):如何利用分布式計算能力來訓練復雜的機器學習模型,實現預測、分類、聚類、推薦等智能應用。我們將探討特徵工程、模型選擇、訓練優化、模型部署等關鍵環節。 實時推薦與個性化服務:如何在海量用戶行為數據的基礎上,實時地為用戶提供個性化的産品推薦、內容推送等服務。 本書的另一個重要特色是強調數據治理與安全。在大數據處理的實踐中,數據的質量、一緻性、安全性和閤規性至關重要。我們將探討數據質量管理的最佳實踐,如何進行數據驗證、清洗和標準化。同時,我們也將深入分析數據安全策略,包括訪問控製、數據加密、脫敏處理以及閤規性要求(如 GDPR、CCPA 等)在大數據環境中的具體落地。 本書的章節設計將循序漸進,從基礎概念到高級應用,每一部分都旨在為讀者構建紮實的知識體係。例如,在介紹分布式計算時,我們不會僅僅羅列技術名詞,而是會深入剖析其背後的算法和設計哲學,讓讀者真正理解“為什麼”這樣做,而不僅僅是“怎麼做”。我們會探討分布式事務、一緻性模型、負載均衡等復雜話題,並將其與實際的工程實現相結閤。 在算法層麵,本書將不僅僅局限於通用的數據處理算法,還會探討在大數據環境下,為瞭應對計算量和數據規模的挑戰,對傳統算法進行的優化和改進。例如,在機器學習部分,我們將討論如何將一些經典的機器學習算法(如 K-Means、決策樹、綫性迴歸等)進行分布式化,以便在集群上高效運行。 本書的語言風格力求清晰、嚴謹,同時又不失可讀性。我們將避免使用晦澀難懂的術語,而是用生動的語言和貼切的比喻來解釋復雜的概念。對於關鍵的技術點,我們會輔以圖示和僞代碼,幫助讀者更好地理解。 《海納百川:從數據洪流到智能洞察》的目標是成為您在數據處理領域的得力助手。無論您是剛剛踏入大數據世界的初學者,還是希望深化對現有技術理解的資深從業者,亦或是希望通過數據驅動業務轉型的決策者,本書都將為您提供寶貴的知識和實用的指導。通過學習本書,您將能夠自信地駕馭數據洪流,從中提取智慧,賦能您的事業,在這個數據驅動的時代乘風破浪。