本書是一本Spark GraphX入門書籍。前5章為基礎內容,即使讀者對Spark、GraphX、Scala不熟悉,也能快速上手;后5章為圖計算進階,主要是圖算法和機器學習算法的相關內容。專門講圖計算的書很少,本書在第2、3、4章介紹了圖的基礎知識、GraphX基礎知識、GraphX內置的圖算法。第6章到第10章,主要介紹了GraphX之外的圖算法、機器學習、圖工具、GraphX監控和優化、GraphX的能力增強等實用技能。第9章和第10章主要介紹性能調優和監控,主要面向生產環境,有不少可以借鑒的技巧。本書面向對圖計算感興趣的讀者,旨在幫助讀者掌握Spark GraphX的相關知識及其應用。
序言
圖(Graph)是什么?圖是由邊和頂點組成的,不是由坐標軸和刻度構成的。在 Spark中是如何使用圖的?這就是本書將要回答的問題。
常常說,圖可以做任何事情,或者有很多不同的事情可以用圖來實現。當然了,這兩種說法等于什么也沒說。所以在本書中我們展示了一些具體的、實際的圖應用,以及探討如何用 Spark GraphX實現這些圖應用。
本書中有許多專業術語:大數據、 Hadoop、Spark、圖、機器學習、 Scala和函數式編程,這些內容本書都會一一講解。本書會涉及技術的高級部分,但不會涉及編程能力的每個方面,如 Java編程。
下圖是 Google在趨勢上的統計,展示了這些專業術語在 2016年之前的受歡迎程度。
Big Data
Hadoop
Machine learning
Apache Spark Edges and vertices
2005 2007 2009 2011 2013 2015
注意,通常用 Spark和圖作為規范的通用術語,而不是 Apache Spark和 Edges and vertices,趨勢上后者已明顯被取代。機器學習和圖,在計算機科學中有悠久的歷史,現在作為主流的大數據技術,在商業領域又引起了新的潮流。如果你在學校學習過這些技術的理論知識,那么現在準備實踐一下這些技術吧。
許多我們正在或曾經工作過的公司,已經把 Spark用在生產環境中了,盡管不一定用了 GraphX。當嘗試用 GraphX做一些圖解決方案的原型時,會很方便。如果你已經有了一個 Spark集群或者決定用云平臺上的 Spark集群(例如 Databricks或 Amazon),那么無須重新搭建一個新的特定于圖計算的集群,并且你可以在 GraphX API中使用已有的 Spark技能。現在越來越多的圖應用為大家所熟知,從根據 Twitter數據發掘出恐怖分子網絡到根據信用卡交易數據發現欺詐行為, GraphX已成為一個快速嘗試這些圖算法場景的易于使用的平臺。
本書有兩個明確目標:一是全面覆蓋 Spark GraphX的方方面面;二是以讀者在前面提到的大數據和圖計算方面沒有任何專業知識為假定前提。寫這本書最大的挑戰是要有許多技術儲備,特別是 Spark、Scala和圖;了解大量的 GraphX API以及圖的不同用法也是不小的挑戰。面對這種情形,本書就需要與其他技術書籍略有不同:首先要花點時間入門,前 5章主要講解的就是基礎內容;本書還有大量有趣的實例,可以跟著一步步練習。本書中涉及的其他技術,讀者需要另做學習,本書將努力做到讓讀者并不需要有過多背景知識和經驗,就可以淺顯易懂地了解圖所能解決的問題。
致謝
感謝 Manning出版社許多工作人員對本書出版所做的努力,特別需要感謝三個人,他們的諸多指導使本書可以較好地完成。 Marina Michaels,我們的開發編輯,從一開始就指出有些章節有很大的技術問題,這些問題大都是 Spark和圖計算的新問題。Michael Roberts,我們的技術開發編輯,在本書的制作過程中,與 Marina一樣,他給出了大量的建議。 Antonio Magnaghi,我們的技術校對,不但對本書的示例代碼進行了嚴謹的核對,還編輯校對了本書的文本內容。
同時也感謝本書草稿時期給出諸多有價值建議的讀者,他們是 Andy Petrella, Brent Foust,Charles Feduke,Gaurav Bhardwaj,Jason Kolter,Justin Fister,Michael Bright,Paul-Michael Sorhaindo,Rodrigo Abreu,Romi Kuntsman,Sumit Pal, Vincent Liard。
作者 Michael Malak感謝妻子和孩子在這幾個月寫作期間給予的耐心支持。
作者 Robin East感謝妻子和兩個兒子,他們容忍和支持了作者長時間的寫作以及在樓上偶爾消失。
關于本書
通過學習本書,希望能降低難懂的圖學習門檻,了解如何在市場份額最大的分布式計算框架 Apache Spark中開發圖應用。
本書的讀者對象
我們假定本書的讀者并不熟悉 Spark、Scala和圖相關的知識,本書會快速學習前面提到的這些知識,會特別側重于 Scala。在第 3章有 Scala的簡要介紹,全書中只要出現新的 Scala知識點都會有 Scala小貼士做詳細介紹(完整的列表見附錄 D)。實際上,本書通過第 3章、Scala小貼士和附錄對 Scala做了較全面的介紹。
另外,雖然在大學的圖論課程中數學證明很常見,但本書完全不做數學證明。本書的目標是圖算法和圖應用,有時會應需介紹圖相關的術語。
本書使用的是 Spark/GraphX 1.6版本。
我們假定讀者在 Java語言編程方面有一些經驗,而在圖方面要求不多,但通過書中插圖能自然地知道這些圖應用。
本書的內容組織
本書分為 3個部分。第 1部分有 3章,主要介紹使用 Spark GraphX的準備知識。第 2部分有 4章,主要介紹如何使用 GraphX。第 3部分有 3章,主要介紹 GraphX的進階知識。也可以將本書分為兩部分,前 5章為準備知識和 GraphX的基本 API,后 5章為 GraphX應用。
下面是各章的內容提要。
.第 1章介紹了什么是大數據、 Spark和圖, Spark GraphX如何處理數據流。第 1章是一本迷你書,篇幅不長但內容涉及面較廣。
.第 2章簡單示范了如何使用 GraphX,無須具有 GraphX經驗。
.第 3章介紹了 Spark、Scala和圖的基礎知識。
.第 4章介紹了 Spark GraphX的基礎操作,以及如何使用 GraphX的兩個主要算法: Map/Reduce和 Pregel。
.第 5章演示了如何使用 GraphX的諸多內置算法。
.第 6章介紹了 GraphX API之外的內容,即 20世紀中期經典的圖算法,并用 GraphX實現了這些算法。
.第 7章重點講機器學習。機器學習的內容本身就夠講一本書的,這里沒有講解太多機器學習的基礎知識和經驗,而是直接介紹監督學習、無監督學習和半監督學習的高級實例。
.第 8章展示了 GraphX如何完成一些自定義操作,有可能會構建一個圖處理庫:讀 RDF文件、圖的合并、圖查找和計算全局聚類系數。
.第 9章介紹了如何監控性能以及查看正在執行的 GraphX應用程序,如何利用緩存、checkpointing和序列化調優做性能調優。
.第 10章介紹了在 GraphX中如何使用 Scala之外的語言(強烈建議不要這么做),以及如何使用一些工具來補充 GraphX的不足。展示了用 GraphX在 Apache Zeppelin的交互式命令行 notebook上對圖進行可視化。第三方的工具 Spark JobServer可以讓 GraphX從單純的批處理系統轉變成一個在線圖數據庫。最后,介紹了 Github上的一個項目GraphFrames(GraphX的開發者開發的),它用 Spark SQL DataFrames而非 RDD提供了一種方便和高性能的圖查詢方式。
另外,本書包含 4個附錄。附錄 A介紹了 Spark的安裝方法,附錄 B簡要介紹了 Gephi可視化軟件,附錄 C包含關于 GraphX的在線資料以及如何跟上社區最新進展,附錄 D中列出了本書中的 Scala小貼士。如果你在 Spark、Scala或圖方面是新手,通過前 5章的閱讀,能力可以得到提升。然后,就可以選擇性地閱讀后面 5章的內容了。如果你對 Spark、Scala和圖的知識已經比較精通,但對 GraphX還不熟悉,那么可以跳過前 3章甚至前 5章的內容直接閱讀后面的內容。
關于本書中的代碼
本書中的源代碼可以在博文視點官方網站上下載,地址為 https:// www. broadview.com.cn。這本書中的大部分代碼是可以在交互式的 Spark Shell中執行的。從技術上來講, Scala擴展是一個誤稱,因為這些文件不能用 scalac編譯器進行編譯。要想讓這些實例代碼方便地編譯和執行,可以用 Maven的 pom.xml或 SBT的 .sbt文件完成。本書中的源代碼實例,有帶編號的列表,也有普通的文本,這兩類源代碼都用了等寬字體以便與普通的正文區分開來。
一般情況下,源碼都會被格式化,我們添加了換行符,也修改了縮進以便適應本書的頁面大小,甚至在代碼清單中添加了續行符( .)。另外,如果正文中對代碼有解釋,源碼中的注釋會被刪掉。代碼注釋會附帶許多列表,以突出重要的概念。
本書的示例代碼也可以從如上的出版社網站上下載。
關于作者
Michael Malak一直從事軟件開發工作,自 2013年年初以來他一直用 Spark為財富 200強的公司做開發工作,經常進行演示和分享,特別是在科羅拉多州他住的丹佛 /博爾德地區。他的個人技術博客的地址是 http://technicaltidbit.com。
Robin East在一些大型企業曾擔任過 15年以上的顧問,在金融、政府、醫療保健和公共事業領域提供大數據和智能解決方案。他是 Worldpay的數據科學家,幫助公司實現把數據用于核心業務上。可以在這里看到他在 Spark、GraphX和機器學習方面的作品: https://mlspeed.wordpress.com。
配套服務
輕松注冊成為博文視點社區用戶(www.broadview.com.cn),即可享受以下服務:下載資源:本書所提供的示例代碼及資源文件均可在下載資源處下載。提交勘誤:您對書中內容的修改意見可在提交勘誤處提交,若被采