大數據日知錄:架構與算法

大數據日知錄:架構與算法

《大數據日知錄:架構與算法》內容簡介:大數據是當前最為流行的熱點概念之一,其已由技術名詞衍生到對很多行業產生顛覆性影響的社會現象,作為最明確的技術發展趨勢之一,基於大數據的各種新型產品必將會對每個人的日常生活產生日益重要的影響。書中從架構與算法角度全面梳理了大數據存儲與處理的相關技術。大數據技術具有涉及的知識點異常眾多且正處於快速演進發展過程中等特點,其技術點包括底層的硬體體系結構、相關的基礎理論、大規模數據存儲系統、分散式架構設計、各種不同套用場景下的差異化系統設計思路、機器學習與數據挖掘並行算法以及層出不窮的新架構、新系統等。《大數據日知錄:架構與算法》對眾多紛繁蕪雜的相關技術文獻和系統進行了擇優汰劣並系統性地對相關知識分門別類地進行整理和介紹,將大數據相關技術分為大數據基礎理論、大數據系統體系結構、大數據存儲,以及包含批處理、流式計算、互動式數據分析、圖資料庫、並行機器學習的架構與算法以及增量計算等技術分支在內的大數據處理等幾個大的方向。通過這種體系化的知識梳理與講解,相信對於讀者整體和系統地了解、吸收和掌握相關的優秀技術有極大的幫助與促進作用。《大數據日知錄:架構與算法》的讀者對象包括對NoSQL系統及大數據處理感興趣的所有技術人員,以及有志於投身到大數據處理方向從事架構師、算法工程師、數據科學家等相關職業的在校本科生及研究生。

基本介紹

  • 書名:大數據日知錄:架構與算法
  • 作者:張俊林
  • 出版社:電子工業出版社
  • 頁數:388頁
  • 開本:16
  • 品牌:電子工業出版社
  • 外文名:Big Data
  • 類型:科技
  • 出版日期:2014年9月1日
  • 語種:簡體中文
  • ISBN:7121241536
基本介紹,內容簡介,作者簡介,圖書目錄,序言,名人推薦,

基本介紹

內容簡介

1.大數據領域技術專家、暢銷書《這就是搜尋引擎:核心技術詳解》作者張俊林最新力作,歷時3年,質量上乘
2.《大數據》《信息檢索導論》譯者王斌、機器學習專家張棟、新浪微博平台及大數據總經理劉子正、盛大文學首席數據官陳運文、CSDN/《程式設計師》創始人蔣濤聯袂力薦
3.全面梳理大數據相關技術,從數據、算法、策略、套用和系統架構等多個維度進行剖析,包羅萬象又深入淺出
4.內容全部是乾貨,緊跟技術前沿,是作者理論與實踐經驗的總結,絕對值得一讀
5.每章後列有精選高質量論文,可以節約讀者篩選讀物的時間
同作者著作《這就是搜尋引擎:核心技術詳解》

作者簡介

張俊林是技術書籍《這就是搜尋引擎:核心技術詳解》(該書榮獲全國第十二屆輸出版優秀圖書獎)的作者,目前擔任暢捷通智慧型平台總監。在此之前,張俊林曾經在阿里巴巴搜尋技術中心、百度商務搜尋部鳳巢廣告平台以及新浪微博搜尋部及數據系統部擔任資深技術專家,新浪微博技術委員會成員,負責算法策略方向。他還曾是智慧型信息聚合網站“玩聚網”的聯合創始人之一。他的研發興趣集中在:搜尋技術、推薦系統、社交挖掘、自然語言處理與大數據算法架構等方面,並在以上領域有多年工業界實踐經驗。
張俊林本科畢業於天津大學管理學院,1999年至2004年在中科院軟體所直接攻讀博士學位,研究方向是信息檢索理論與自然語言處理,就學期間曾在ACL/COLING/IJCNLP等國際頂級會議發表多篇學術論文,另外,他在此期間領導設計的搜尋系統曾在美國國防部DARPA主持的TREC第二屆高精度檢索系統評測中在17支國際高水平研究團隊激烈競爭中勝出,並取得綜合排名第一名的優異成績。

圖書目錄

第0 章 當談論大數據時我們在談什麼 1
0.1 大數據是什麼 2
0.2 大數據之翼:技術范型轉換 4
0.3 大數據商業鍊金術 6
0.4 “大數據”在路上 7
第1 章 數據分片與路由 9
1.1 抽象模型10
1.2 哈希分片(Hash Partition) 11
1.2.1 Round Robin11
1.2.2 虛擬桶(Virtual Buckets) 12
1.2.3 一致性哈希(Consistent Hashing) 13
1.3 範圍分片(Range Partition) 18
參考文獻19
第2 章 數據複製與一致性20
2.1 基本原則與設計理念21
2.1.1 原教旨CAP 主義21
2.1.2 CAP 重裝上陣(CAP Reloaded)23
2.1.3 ACID 原則24
2.1.4 BASE 原則24
2.1.5 CAP/ACID/BASE 三者的關係25
2.1.6 冪等性(Idempotent)26
2.2 一致性模型分類26
2.2.1 強一致性27
2.2.2 最終一致性28
2.2.3 因果一致性28
2.2.4 “讀你所寫”一致性29
2.2.5 會話一致性29
2.2.6 單調讀一致性30
2.2.7 單調寫一致性30
2.3 副本更新策略30
2.3.1 同時更新30
2.3.2 主從式更新31
2.3.3 任意節點更新32
2.4 一致性協定32
2.4.1 兩階段提交協定(Two—Phrase Commit,2PC)33
2.4.2 向量時鐘(Vector Clock) 38
2.4.3 RWN 協定40
2.4.4 Paxos 協定42
2.4.5 Raft 協定45
參考文獻49
第3 章 大數據常用的算法與數據結構51
3.1 布隆過濾器(Bloom Filter) 51
3.1.1 基本原理52
3.1.2 誤判率及相關計算52
3.1.3 改進:計數Bloom Filter53
3.1.4 套用54
3.2 SkipList55
3.3 LSM 樹58
3.4 Merkle 哈希樹(Merkle Hash Tree) 62
3.4.1 Merkle 樹基本原理62
3.4.2 Dynamo 中的套用63
3.4.3 比特幣中的套用63
3.5 Snappy 與LZSS 算法65
3.5.1 LZSS 算法65
3.5.2 Snappy67
3.6 Cuckoo 哈希(Cuckoo Hashing) 67
3.6.1 基本原理68
3.6.2 套用:SILT 存儲系統68
參考文獻70
第4 章 集群資源管理與調度71
4.1 資源管理抽象模型72
4.1.1 概念模型72
4.1.2 通用架構73
4.2 調度系統設計的基本問題74
4.2.1 資源異質性與工作負載異質性74
4.2.2 數據局部性(Data Locality) 75
4.2.3 搶占式調度與非搶占式調度75
4.2.4 資源分配粒度(Allocation Granularity) 76
4.2.5 餓死(Starvation)與死鎖(Dead Lock)問題76
4.2.6 資源隔離方法77
4.3 資源管理與調度系統范型77
4.3.1 集中式調度器(Monolithic Scheduler)78
4.3.2 兩級調度器(Two—Level Scheduler) 79
4.3.3 狀態共享調度器(Shared—State Scheduler) 79
4.4 資源調度策略81
4.4.1 FIFO 調度策略81
4.4.2 公平調度器(Fair Scheduler)81
4.4.3 能力調度器(Capacity Scheduler) 82
4.4.4 延遲調度策略(Delay Scheduling)82
4.4.5 主資源公平調度策略(Dominant Resource Fair Scheduling)82
4.5 Mesos 84
4.6 YARN87
參考文獻90
第5 章 分散式協調系統91
5.1 Chubby 鎖服務92
5.1.1 系統架構93
5.1.2 數據模型94
5.1.3 會話與KeepAlive 機制95
5.1.4 客戶端快取95
5.2 ZooKeeper 96
5.2.1 體系結構96
5.2.2 數據模型(Data Model) 97
5.2.3 API 98
5.2.4 ZooKeeper 的典型套用場景98
5.2.5 ZooKeeper 的實際套用103
參考文獻104
第6 章 分散式通信106
6.1 序列化與遠程過程調用框架107
6.1.1 Protocol Buffer 與Thrift 108
6.1.2 Avro109
6.2 訊息佇列110
6.2.1 常見的訊息佇列系統110
6.2.2 Kafka 111
6.3 套用層多播通信(Application—Level Multi—Broadcast)114
6.3.1 概述114
6.3.2 Gossip 協定115
參考文獻118
第7 章 數據通道120
7.1 Log 數據收集120
7.1.1 Chukwa121
7.1.2 Scribe122
7.2 數據匯流排123
7.2.1 Databus125
7.2.2 Wormhole 127
7.3 數據導入/導出128
參考文獻129
第8 章 分散式檔案系統131
8.1 Google 檔案系統(GFS) 132
8.1.1 GFS 設計原則132
8.1.2 GFS 整體架構133
8.1.3 GFS 主控伺服器134
8.1.4 系統互動行為136
8.1.5 Colossus 137
8.2 HDFS 138
8.2.1 HDFS 整體架構139
8.2.2 HA 方案140
8.2.3 NameNode 聯盟143
8.3 HayStack 存儲系統145
8.3.1 HayStack 整體架構146
8.3.2 目錄服務147
8.3.3 HayStack 快取148
8.3.4 HayStack 存儲系統的實現148
8.4 檔案存儲布局150
8.4.1 行式存儲151
8.4.2 列式存儲151
8.4.3 混合式存儲156
8.5 糾刪碼(Erasure Code)158
8.5.1 Reed—Solomon 編碼159
8.5.2 LRC 編碼164
8.5.3 HDFS—RAID 架構166
參考文獻166
……
第9 章 記憶體KV 資料庫168
第10 章 列式資料庫176
第11 章 大規模批處理系統199
第12 章 流式計算219
第13 章 互動式數據分析240
第14 章 圖資料庫:架構與算法271
第15 章 機器學習:范型與架構313
第16 章 機器學習:分散式算法337
第17 章 增量計算366
附錄A 硬體體系結構及常用性能指標378
附錄B 大數據必讀文獻380

序言

前 言

像移動網際網路、O2O、可穿戴設備等概念一樣,“大數據”從甫一提出到颶風般席捲並風靡全球,從最初的技術名詞到形成滲透到各行各業的社會現象,所耗時間僅幾年而已,其興也勃焉。
那么,大數據是否會像很多曾經火熱現在已難覓蹤跡的流行概念一樣,將來某日,人們靜心抬眼,發現風已去而水波不興,徒留夕陽下波光粼粼的漣漪,讓人不禁哀嘆其亡也忽焉?
本書的背景
目前看仿佛有此跡象,當一個概念火爆到從街頭隨便抓一個路人,他都能跟你滔滔不絕地侃侃而談;當一個新名詞鋪天蓋地而來,讓你熟悉到再見一次就要吐的程度,這些確實是典型的泡沫將破的徵兆。目前業已出現越來越多的質疑聲音,在這種狂熱的氛圍下,理性的質疑是最難能可貴的,畢竟大數據歸根結底是少數派的遊戲,而現狀好像是人人都處於大數據進行時的狀態,這讓其看上去顯得不甚理性。
但是,從社會發展趨勢的角度,很明顯大數據會是目前肉眼可及的視野範圍里能看到的最大趨勢之一。從傳統IT業到網際網路、網際網路到移動網際網路,從以智慧型手機和Pad為主要終端載體的移動網際網路到可穿戴設備的移動網際網路,然後再到萬物互聯的物聯網,這一定是不可違抗的發展規律和前進方向。伴隨著這個趨勢必然有越來越多、形態越來越豐富的超量數據不斷產生,而大數據明顯是由此衍生出來的明確且必然的發展趨勢。
所以,歸根結底,大數據概念是個短期內炒得過熱,但是從長期來看炒得不足的領域。再過十年如果回望現在,也許會發現:我們今天正在巍峨群山的山腳徘徊,試圖找出一條通往山頂的羊腸小道,如此而已。我們當然不能盲目跟風不斷追逐切換熱點,但是忽視趨勢的力量同樣也不是一個理性的選擇。
本書的內容
以上所述是本書誕生的大背景,目前市面上陸陸續續已經有不少講大數據的書,有面向大眾的概念普及類圖書,也有講解大數據技術的書,本書屬於第二類,專注於大數據處理有關的架構與算法,我相信這是一本比較全面地分門別類梳理大數據技術的書籍。從大約2010年年底起我開始關注並收集整理這方面的技術資料,當然那時還沒有聽說過大數據的概念,現在的所謂大數據已經是後來的事情了,最初引起我關注的是NoSQL相關的技術,尤其是Google和亞馬遜的一系列相關工作,當時隱約地覺得這是一種新的技術發展趨勢,甚至是一次技術范型的大轉換,所以逐步開始投入越來越多的精力到其中,這包括將相關技術資料分門別類地進行收集、閱讀和整理,利用業餘時間開始一章一節地慢慢寫本書,以及在實際工作中儘可能地套用這些技術和系統等若干方面。
本書的寫作
斷斷續續完成本書花了大約3年左右的時間,和最初預估的時間還是比較吻合的,這一方面是由於我可投入的時間本身就不多,但是還是希望能夠寫出一本高質量的技術書籍,所以不得不慢工出細活;另外一方面是由於大數據處理作為一個新領域,其涉及的方方面面的技術點實在太多,而且正處於快速的發展過程中。這個領域是我接觸過的領域中知識涵蓋面最廣的,從底層的硬體開始,到涉及基礎理論、大規模數據存儲系統、分散式架構設計、各種不同適用場景下的差異化系統設計思路、機器學習與數據挖掘並行算法、層出不窮的新架構和新系統等,說無所不包有些誇張但是所需掌握知識點之多確實是很少見的。而且因為其處於快速發展的過程當中,所以各種技術紛繁蕪雜,並無一個成熟的知識分類體系可供參考,需要不斷梳理相關知識點之間的相互區別和聯繫並進行分門別類,如何將紛雜多樣的技術梳理成清晰合理的章節內容曾讓我頭疼不已,當然發展到目前,整個大數據技術體系脈絡已經日漸明晰,我相信參考本書目錄可以清晰地發現這一點。另外一個阻礙是可參考的資料和系統多而雜,且質量良莠不齊,需要從中汰劣余優,儘可能選出有代表性及有發展潛力的理論、方案和系統,這也是很耗費精力的過程,儘管本書每章後只列出了很少一部分參考資料,但是實際參考的文獻與系統要數倍於此,只列出精華部分是為了節省讀者選擇高質量文獻的過程。
十幾年前當我還在中國科學院讀書的時候,就對網際網路的蓬勃發展及其對生活和工作各方面的影響感慨不已,當時最直觀的感受是最新的國際會議論文很容易獲得,往往是會議一開完就能從網上下載到感興趣的文獻,有時候會議沒開有些作者就把論文先放在網上供人參考。覺得有了網際網路這么強大的全球範圍信息便捷分享工具,儘管當時國內科研水平不算高,在最好的國際頂級會議發表論文還是較難的事情,但是隨著網際網路的普及,科研水準應該能夠獲得極為快速長足的發展,因為從追蹤最新技術進展的角度看大家的起跑線是一樣的,而中國人多的優勢慢慢應該能夠發揮出來,事實上也是如此,最近幾年各種國際頂級會議中,國人發表的論文比例越來越高可以證明這一點,而很明顯這個趨勢還會進一步加快。之所以提這個,是因為大數據相關技術研發道理其實也是一樣的,儘管目前國內在這方面的實力和國外相比還有很大的差距,優秀的系統和技術方案往往都是Google、亞馬遜、Facebook、Linkedin等這些國際知名網際網路公司提出的,國內工業界的技術水準大部分還僅僅停留在能把開源的大數據系統套用起來解決手頭碰到的問題這個階段,但是我相信在不遠的將來,國內會逐步湧現出具有國際水準的大數據系統與解決方案,其中的道理與上面所舉的學術進步的例子是一樣的。目前大部分優秀系統是開源的,相關技術文獻也很容易找到,作為有進取心的技術人員,現在所缺乏的不是沒有可參考的學習資料,相反是資料太多良莠不齊反而讓很多人無所適從,不知該如何下手。國內的技術人員只要肯下功夫、會下功夫,有好的職業發展環境和高的自我期許及技術理想,假以時日,越來越多的世界級水準的大數據處理系統出自國人之手是完全可以預料的,我期望本書對於這些技術人員在全面了解吸收並掌握大數據處理的優秀技術過程中,能貢獻綿薄之力。沈利也參與了本書的部分編寫工作。
致謝
感謝我的妻子、岳父、岳母,以及爸爸、媽媽,儘管歷時3年才得以完成本書,但是若是沒有你們的全身心支持,這本書2020年也無法面世。
對了,還有我的女兒,親愛的雪晴,從蹣跚邁出人生第一步,到咿咿呀呀說出第一句話,我總是想起,小小的你,迷茫地站在這遍布新奇的世界裡,東張西望時無助的樣子,這總是令人心疼。你無數人生的第一次帶給我太多歡樂,而我陪你的時間又太少太少,每次聽到你用小手咚咚敲著書房緊閉的門,這經常讓我感到惶惑,不知道這么狠心對你是對還是錯,但是又不得不狠下心來。我相信將來一定會後悔沒有給你更多的時間,把你介紹給這斑斕而殘酷的世界,囑咐它在今後的日子裡能善待你一些。我多想陪你甚至到你白髮蒼蒼的歲月:在初秋的午後陽光下,看到你坐在院中的婆娑樹影里,給你的兒孫講故事,淺笑依然,仿似今天。我可以清楚地想像那時的場景,清晰得就像一切就發生在眼前。雖然我深切地知道這是永不可實現的奢望,但這個夢想會永遠放在我心裡,就像你清澈的目光和純真的笑容一樣。
時間是我們的朋友,也是我們的敵人,希望你們能夠原諒我。

張俊林
2014年3月

名人推薦

我和俊林接觸不多但神交已久,幾年前我看過他一本搜尋方面的技術書籍,覺得寫得相當不錯,從此俊林的書都是必然要收藏的。看了這本書,感覺和上一本一樣出色。和其他介紹大數據技術的書相比,這本書的涉及面相當廣,覆蓋了當前大數據技術(分散式計算、大規 模檔案系統、NoSQL資料庫、常用數據結構和算法、批處理和流式計算、圖資料庫、分散式機器學習等)的方方面面。實在且實用,我想是這本書最大的特點,誠摯推薦對大數據技術感興趣的讀者閱讀。
王斌
中國科學院信息工程研究所研究員、博士生導師
《大數據》《信息檢索導論》譯者
本書區別於市場上已有的眾多大數據概念類書籍,重點講述了解決大數據問題的算法與架構,全書邏輯清晰,重點突出,講述複雜算法時圖文並茂,可以看出作者將實際工作經驗結合理論,在本書上花了很多心血,相信能幫助從事大數據工作的所有工程技術人員。
張棟
原百度科學家,鳳巢系統架構師;原Google研究員,機器學習專家
此書內容跨度很大,可稱為大數據領域“從入門到精通”的教科書,非常全面且系統化。人人都在談論大數據,但事實上並沒有人告訴大家大數據到底是什麼、涵蓋哪些方面,而此書可以給出答案。
劉子正
新浪微博平台及大數據總經理
這是一本大數據技術的百科全書——從大數據的存儲結構、內容管理,講到集群任務調度、分散式數據通信、流行的各類新式資料庫的介紹,還有基於機器學習技術的大數據實現以及大數據挖掘套用範例等內容,既包羅萬象,又深入淺出。俊林的這本心血之作,是大數據研發人員絕好的技術嚮導。
陳運文
盛大文學首席數據官
大數據已成為上到國家領導人,下到媒體會議必談話題,但大數據的套用時代才剛剛開始,各大網際網路公司都奇缺熟悉Hadoop、分散式系統開發和數據分析挖掘的人才,張俊林這本書全面展示了大數據相關的技術,理論算法和實踐,有廣度有深度,對於希望掌握大數據技術的開發者是必備利器。
蔣濤
CSDN總裁、《程式設計師》雜誌創始人
  

相關詞條

熱門詞條

聯絡我們