從事分散式系統、計算、hadoop 等方面工作需要哪些基礎?
更新(2014.07.31):What are some good resources for learning about distributed computing? Why? 今天在quora上看到這個問題,感覺特別全面,質量也都A+級別的,貼在這裡供大家參考。
課程:
MIT 6.824: Distributed Computer Systems Engineering——經典和詳細的介紹了分散式系統的技術和工程實現經驗,值得每個做分散式系統的人去看一遍,繼續錘鍊和提高自己的眼界和技術。
補充三篇論文:
1. Sinfonia: A New Paradigm for Building Scalable Distributed Systems,這篇論文是SOSP2007的Best Paper,闡述了一種構建分散式文件系統的範式方法,個人感覺非常有用。淘寶在構建TFS、OceanBase和Tair這些系統時都充分參考了這篇論文。
2. The Chubby lock service for loosely-coupled distributed systems,http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/zh-CN//archive/chubby-osdi06.pdf,這篇論文詳細介紹了Google的分散式鎖實現機制Chubby。Chubby是一個基於文件實現的分散式鎖,Google的Bigtable、Mapreduce和Spanner服務都是在這個基礎上構建的,所以Chubby實際上是Google分散式事務的基礎,具有非常高的參考價值。另外,著名的zookeeper就是基於Chubby的開源實現,但是根據在Google工作的朋友講,zookeeper跟Chubby在性能和功能上都還有差距。
3. Spanner: Google"s Globally-Distributed Database,這個是第一個全球意義上的分散式資料庫,也是Google的作品。其中介紹了很多一致性方面的設計考慮,為了簡單的邏輯設計,還採用了原子鐘,同樣在分散式系統方面具有很強的借鑒意義。
剛出的,讀了一下樣章,感覺還不錯,一起推薦給大家——《大規模分散式存儲系統:原理解析與架構實戰》華章圖書 - 大規模分散式存儲系統:原理解析與架構實戰
項目地址:Qix/ds.md at master · ty4z2008/Qix · GitHub
分散式系統(Distributed System)資料
- 《Reconfigurable Distributed Storage for Dynamic Networks》
介紹:這是一篇介紹在動態網路裡面實現分散式系統重構的paper.論文的作者(導師)是MIT讀博的時候是做分散式系統的研究的,現在在NUS帶學生,不僅僅是分散式系統,還有無線網路.如果感興趣可以去他的主頁了解.
- 《Distributed porgramming liboratory》
介紹:分散式編程實驗室,他們發表的很多的paper,其中不僅僅是學術研究,還有一些工業界應用的論文.
- 《MIT Theory of Distributed Systems》
介紹:麻省理工的分散式系統理論主頁,作者南希·林奇在2002年證明了CAP理論,並且著《分散式演算法》一書.
- 《Notes on Distributed Systems for Young Bloods》
介紹:分散式系統搭建初期的一些建議
- 《Principles of Distributed Computing》
介紹:分散式計算原理課程
- 《Google"s Globally-Distributed Database》
介紹:Google全球分散式數據介紹
- 《The Architecture Of Algolia』s Distributed Search Network》
介紹:Algolia的分散式搜索網路的體系架構介紹
- 《Build up a High Availability Distributed Key-Value Store》
介紹:構建高可用分散式Key-Value存儲系統
- 《Distributed Search Engine with Nanomsg and Bond》
介紹:Nanomsg和Bond的分散式搜索引擎
- 《Distributed Processing With MongoDB And Mongothon》
介紹:使用MongoDB和Mongothon進行分散式處理
- 《Salt: Combining ACID and BASE in a Distributed Database》
介紹:分散式資料庫中把ACID與BASE結合使用.
- 《Makes it easy to understand Paxos for Distributed Systems》
介紹:理解的Paxos的分散式系統,參考閱讀:關於Paxos的歷史
- 《There is No Now Problems with simultaneity in distributed systems》
介紹:There is No Now Problems with simultaneity in distributed systems
- 《Distributed Systems》
介紹:倫敦大學學院分散式系統課程課件.
- 《Distributed systems for fun and profit》
介紹:分散式系統電子書籍.
- 《Distributed Systems Spring 2015》
介紹:卡內基梅隆大學春季分散式課程主頁
- 《Distributed Systems: Concepts and Design (5th Edition)》
介紹: 電子書,分散式系統概念與設計(第五版)
- 《走向分散式》
介紹:這是一位台灣網友 ccshih 的文字,短短的篇幅介紹了分散式系統的若干要點。pdf
- 《Introduction to Distributed Systems Spring 2013》
介紹:清華大學分散式系統課程主頁,裡面的schedule欄目有很多寶貴的資源
- 《Distributed systems》
介紹:免費的在線分散式系統書籍
- 《Some good resources for learning about distributed computing》
介紹:Quora上面的一篇關於學習分散式計算的資源.
- 《Spanner: Google』s Globally-Distributed Database》
介紹:這個是第一個全球意義上的分散式資料庫,也是Google的作品。其中介紹了很多一致性方面的設計考慮,為了簡單的邏輯設計,還採用了原子鐘,同樣在分散式系統方面具有很強的借鑒意義.
- 《The Chubby lock service for loosely-coupled distributed systems》
介紹:Google的統面向鬆散耦合的分散式系統的鎖服務,這篇論文詳細介紹了Google的分散式鎖實現機制Chubby。Chubby是一個基於文件實現的分散式鎖,Google的Bigtable、Mapreduce和Spanner服務都是在這個基礎上構建的,所以Chubby實際上是Google分散式事務的基礎,具有非常高的參考價值。另外,著名的zookeeper就是基於Chubby的開源實現.推薦The google stack,Youtube:The Chubby lock service for loosely-coupled distributed systems
- 《Sinfonia: a new paradigm for building scalable distributed systems》
介紹:這篇論文是SOSP2007的Best Paper,闡述了一種構建分散式文件系統的範式方法,個人感覺非常有用。淘寶在構建TFS、OceanBase和Tair這些系統時都充分參考了這篇論文.
- 《Data-Intensive Text Processing with MapReduce》
介紹:Ebook:Data-Intensive Text Processing with MapReduce.
- 《Design and Implementation of a Query Processor for a Trusted Distributed Data Base Management System》
介紹:Design and Implementation of a Query Processor for a Trusted Distributed Data Base Management System.
- 《Distributed Query Processing》
介紹:分散式查詢入門.
- 《Distributed Systems and the End of the API》
介紹:分散式系統和api總結.
- 《Distributed Query Reading》
介紹:分散式系統閱讀論文,此外還推薦github上面的一個論文列表The Distributed Reader。
- 《Replication, atomicity and order in distributed systems》
介紹:Replication, atomicity and order in distributed systems
- 《MIT course:Distributed Systems》
介紹:2015年MIT分散式系統課程主頁,這次用Golang作為授課語言。6.824 Distributed Systems課程主頁
- 《Distributed systems for fun and profit》
介紹:免費分散式系統電子書。
- 《Ori:A Secure Distributed File System》
介紹:斯坦福開源的分散式文件系統。
- 《Availability in Globally Distributed Storage Systems》
介紹:Google論文:設計一個高可用的全球分散式存儲系統。
- 《Calvin: Fast Distributed Transactions For Partitioned Database Systems》
介紹:對於分區資料庫的分散式事務處理。
- 《Distributed Systems Building Block: Flake Ids》
介紹:Distributed Systems Building Block: Flake Ids.
- 《Introduction to Distributed System Design》
介紹:Google Code University課程,如何設計一個分散式系統。
- 《Sheepdog: Distributed Storage System for KVM》
介紹:KVM的分散式存儲系統.
- 《Readings in Distributed Systems Systems》
介紹:分散式系統課程列表,包括資料庫、演算法等.
- 《Tera》
介紹:來自百度的分散式表格系統.
- 《Distributed systems: for fun and profit》
介紹:分散式系統的在線電子書.
- 《Distributed Systems Reading List》
介紹:分散式系統資料,此外還推薦Various articles about distributed systems.
- 《Designs, Lessons and Advice from Building Large Distributed Systems》
介紹:Designs, Lessons and Advice from Building Large Distributed Systems.
- 《Testing a Distributed System》
介紹:Testing a distributed system can be trying even under the best of circumstances.
- 《The Google File System》
介紹: 基於普通伺服器構建超大規模文件系統的典型案例,主要面向大文件和批處理系統, 設計簡單而實用。 GFS是google的重要基礎設施, 大數據的基石, 也是Hadoop HDFS的參考對象。 主要技術特點包括: 假設硬體故障是常態(容錯能力強), 64MB大塊, 單Master設計,Lease/鏈式複製, 支持追加寫不支持隨機寫.
- 《Bigtable: A Distributed Storage System for Structured Data》
介紹:支持PB數據量級的多維非關係型大表, 在google內部應用廣泛,大數據的奠基作品之一 , Hbase就是參考BigTable設計。 Bigtable的主要技術特點包括: 基於GFS實現數據高可靠, 使用非原地更新技術(LSM樹)實現數據修改, 通過range分區並實現自動伸縮等.
- 《PacificA: Replication in Log-Based Distributed Storage Systems》
介紹:面向log-based存儲的強一致的主從複製協議, 具有較強實用性。 這篇文章系統地講述了主從複製系統應該考慮的問題, 能加深對主從強一致複製的理解程度。 技術特點: 支持強一致主從複製協議, 允許多種存儲實現, 分散式的故障檢測/Lease/集群成員管理方法.
- 《Object Storage on CRAQ, High-throughput chain replication for read-mostly workloads》
介紹:分散式存儲論文:支持強一直的鏈式複製方法, 支持從多個副本讀取數據,實現code.
- 《Finding a needle in Haystack: Facebook』s photo storage》
介紹:Facebook分散式Blob存儲,主要用於存儲圖片. 主要技術特色:小文件合併成大文件,小文件元數據放在內存因此讀寫只需一次IO.
- 《Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency》
介紹: 微軟的分散式存儲平台, 除了支持類S3對象存儲,還支持表格、隊列等數據模型. 主要技術特點:採用Stream/Partition兩層設計(類似BigTable);寫錯(寫滿)就封存Extent,使得副本位元組一致, 簡化了選主和恢復操作; 將S3對象存儲、表格、隊列、塊設備等融入到統一的底層存儲架構中.
- 《Paxos Made Live – An Engineering Perspective》
介紹:從工程實現角度說明了Paxo在chubby系統的應用, 是理解Paxo協議及其應用場景的必備論文。 主要技術特點: paxo協議, replicated log, multi-paxo.參考閱讀:關於Paxos的歷史
- 《Dynamo: Amazon』s Highly Available Key-Value Store》
介紹:Amazon設計的高可用的kv系統,主要技術特點:綜和運用一致性哈希,vector clock,最終一致性構建一個高可用的kv系統, 可應用於amazon購物車場景.新內容來自分散式存儲必讀論文
- 《Efficient Replica Maintenance for Distributed Storage Systems》
介紹:分散式存儲系統中的副本存儲問題.
- 《PADS: A Policy Architecture for Distributed Storage Systems》
介紹:分散式存儲系統架構.
- 《The Chirp Distributed Filesystem》
介紹:開源分散式文件系統Chirp,對於想深入研究的開發者可以閱讀文章的相關Papers.
- 《Time, Clocks, and the Ordering of Events in a Distributed System》
介紹:經典論文分散式時鐘順序的實現原理.
- 《Making reliable distributed systems in the presence of sodware errors》
介紹:面向軟體錯誤構建可靠的分散式系統,中文筆記.
- 《MapReduce: Simplified Data Processing on Large Clusters》
介紹:MapReduce:超大集群的簡單數據處理.
- 《Distributed Computer Systems Engineering》
介紹:麻省理工的分散式計算課程主頁,裡面的ppt和閱讀列表很多乾貨.
- 《The Styx Architecture for Distributed Systems》
介紹:分散式系統Styx的架構剖析.
- 《What are some good resources for learning about distributed computing? Why?》
介紹:Quora上面的一個問答:有哪些關於分散式計算學習的好資源.
- 《RebornDB: The Next Generation Distributed Key-Value Store》
介紹:下一代分散式k-v存儲資料庫.
- 《Operating System Concepts Ninth Edition》
介紹:分散式系統歸根結底還是需要操作系統的知識,這是耶魯大學的操作系統概念書籍首頁,裡面有提供了第8版的在線電子版和最新的學習操作系統指南,學習分散式最好先學習操作系統.
- 《The Log: What every software engineer should know about real-time data"s unifying abstraction》
介紹:分散式系統Log剖析,非常的詳細與精彩. 中文翻譯 | 中文版筆記.
- 《Operating Systems Study Guide》
介紹:分散式系統基礎之操作系統學習指南.
- 《分散式系統領域經典論文翻譯集》
介紹:分散式系統領域經典論文翻譯集.
- 《Maintaining performance in distributed systems》
介紹:分散式系統性能維護.
- 《Computer Science from the Bottom Up》
介紹:計算機科學,自底向上,小到機器碼,大到操作系統內部體系架構,學習操作系統的另一個在線好材料.
- 《Operating Systems: Three Easy Pieces》
介紹:&<操作系統:三部曲&>在線電子書,虛擬、並發、持續.
- 《Database Systems: reading list》
介紹:資料庫系統經典論文閱讀列,此外推送github上面的db reading.
- 《Unix System Administration》
介紹:Unix System Administration ebook.
- 《The Amoeba Distributed Operating System》
介紹:分散式系統經典論文.
- 《Principles of Computer Systems》
介紹:計算機系統概念,以分散式為主.此外推薦Introduction to Operating Systems筆記
- 《Person page of EM?N GüN S?RER》
介紹:推薦康奈爾大學的教授EM?N GüN S?RER的主頁,他的研究項目有分散式,數據存儲。例如HyperDex資料庫就是他的其中一個項目之一.
- 《Scalable, Secure, and Highly Available Distributed File Access》
介紹:來自卡內基梅隆如何構建可擴展的、安全、高可用性的分散式文件系統,其他papers.
- 《Distributed (Deep) Machine Learning Common》
介紹:分散式機器學習常用庫.
- 《The Datacenter as a Computer》
介紹:介紹了如何構建倉儲式數據中心,尤其是對於現在的雲計算,分散式學習來說很有幫助.本書是Synthesis Lectures on Computer Architecture系列的書籍之一,這套叢書還有 《The Memory System》,《Automatic Parallelization》,《Computer Architecture Techniques for Power Efficiency》,《Performance Analysis and Tuning for General Purpose Graphics Processing Units》,《Introduction to Reconfigurable Supercomputing》 等
- 《helsinki:Distributed Systems Course slider》
介紹:來自芬蘭赫爾辛基的分散式系統課程課件:什麼是分散式,複製,一致性,容錯,同步,通信.
- 《TiDB is a distributed SQL database》
介紹:分散式資料庫TiDB,Golang開發.
- 《S897: Large-Scale Systems》
介紹:課程資料:大規模系統.
- 《Large-scale L-BFGS using MapReduce》
介紹:使用MapReduce進行大規模分散式集群環境下並行L-BFGS.
- 《Twitter是如何構建高性能分散式日誌的》
介紹:Twitter是如何構建高性能分散式日誌的.
- 《Distributed Systems: When Limping Hardware Is Worse Than Dead Hardware》
介紹:在分散式系統中某個組件徹底死了影響很小,但半死不活(網路/磁碟),對整個系統卻是毀滅性的.
- 《Tera - 高性能、可伸縮的結構化資料庫》
介紹:來自百度的分散式資料庫.
- 《SequoiaDB is a distributed document-oriented NoSQL Database》
介紹:SequoiaDB分散式文檔資料庫開源.
- 《Readings in distributed systems》
介紹:這個網址里收集了一堆各TOP大學分散式相關的課程.
- 《Paxos vs Raft》
介紹:這個網站是Raft演算法的作者為教授Paxos和Raft演算法做的,其中有兩個視頻鏈接,分別講上述兩個演算法.參考閱讀:關於Paxos的歷史
- 《A Scalable Content-Addressable Network》
介紹:A Scalable Content-Addressable Network.
- 《500 Lines or Less》
介紹:這個項目其實是一本書( The Architecture of Open Source Applications)的源代碼附錄,是一堆大牛合寫的.
- 《MIT 6.824 Distributed System》
介紹:這只是一個課程主頁,沒有上課的視頻,但是並不影響你跟著它上課:每一周讀兩篇課程指定的論文,讀完之後看lecture-notes里對該論文內容的討論,回答裡面的問題來加深理解,最後在課程lab里把所看的論文實現。當你把這門課的作業刷完後,你會發現自己實現了一個分散式資料庫.
- 《HDFS-alike in Go》
介紹:使用go開發的分散式文件系統.
- 《What are some good resources for learning about distributed computing? Why?》
介紹:Quora上關於學習分散式的資源問答.
- 《SeaweedFS is a simple and highly scalable distributed file system》
介紹:SeaweedFS是使用go開發的分散式文件系統項目,代碼簡單,邏輯清晰.
- 《Codis - yet another fast distributed solution for Redis》
介紹:Codis 是一個分散式 Redis 解決方案, 對於上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有明顯的區別
- 《Paper: Coordination Avoidance In Distributed Databases By Peter Bailis》
介紹:Coordination Avoidance In Distributed Databases.
- 《從零開始寫分散式資料庫》
介紹:本文以TiDB 源碼為例.
- 《what we talk about when we talk about distributed systems》
介紹:分散式系統概念梳理,為分散式系統涉及的主要概念進行了梳理.
- 《Distributed locks with Redis》
介紹:使用Redis實現分散式鎖.
- 《CS244b: Distributed Systems》
介紹: 斯坦福2014年秋季分散式課程.
- 《RAMP Made Easy》
介紹: 分散式的「讀原子性」.
- 《Strategies and Principles of Distributed Machine Learning on Big Data》
介紹: 大數據分散式機器學習的策略與原理.
- 《Distributed Systems: What is the CAP theorem?》
介紹: 分散式CAP法則.
- 《How should I start to learn distributed storage system as a beginner?》
介紹: 新手如何步入分散式存儲系統.
- 《Cassandra - A Decentralized Structured Storage System》
介紹: 分散式存儲系統Cassandra剖析,推薦白皮書Introduction to Apache Cassandra.
- 《What is the best resource to learn about distributed systems?》
介紹: 分散式系統學習資源.
- 《What are some high performance TCP hacks?》
介紹: 一些高性能TCP黑客技巧.
- 《Maintaining performance in distributed systems》
介紹:分散式系統性能提升.
- 《A simple totally ordered broadcast protocol》
介紹:Benjamin Reed 和 Flavio P.Junqueira 所著論文,對Zab演算法進行了介紹,zab演算法是Zookeeper保持數據一致性的核心,在國內有很多公司都使用zookeeper做為分散式的解決方案.推薦與此相關的一篇文章ZooKeeper』s atomic broadcast protocol: Theory and practice.
- 《zFS - A Scalable Distributed File System Using Object Disk》
介紹:可擴展的分散式文件系統ZFS,The Zettabyte File System,End-to-end Data Integrity for File Systems: A ZFS Case Study.
- 《A Distributed Haskell for the Modern Web》
介紹:分散式Haskell在當前web中的應用.
- 《Reasoning about Consistency Choices in Distributed Systems》
介紹:POPL2016的論文,關於分散式系統一致性選擇的論述,POPL所接受的論文,github上已經有人整理.
- 《Paxos Made Simple》
介紹:Paxos讓分散式更簡單.譯文.參考閱讀:關於Paxos的歷史
- 《Consensus Protocols: Paxos》
介紹:分散式系統一致性協議:Paxos.參考閱讀:關於Paxos的歷史
- 《Consensus on Transaction Commit》
介紹:事務提交的一致性探討.
- 《The Part-Time Parliaments》
介紹:在《The Part-Time Parliament》中描述了基本協議的交互過程。在基本協議的基礎上完善各種問題得到了最終的議會協議。 為了讓人更容易理解《The Part-Time Parliament》中描述的Paxos演算法,Lamport在2001發表了《Paxos Made Simple》,以更平直的口頭語言描述了Paxos,而沒有包含正式的證明和數學術語。《Paxos Made Simple》中,將演算法的參與者更細緻的劃分成了幾個角色:Proposer、Acceptor、Learner。另外還有Leader和Client.參考閱讀:關於Paxos的歷史
- 《Paxos Made Practical》
介紹:看這篇論文時可以先看看理解Paxos Made Practical.
- 《PaxosLease: Diskless Paxos for Leases》
介紹:PaxosLease:實現租約的無盤Paxos演算法,譯文.
- 《Paxos Made Moderately Complex》
介紹:Paxos演算法實現,譯文,同時推薦42 Paxos Made Moderately Complex.
- 《Hadoop Reading List》
介紹:Hadoop學習清單.
- 《Hadoop Reading List》
介紹:Hadoop學習清單.
- 《2010 NoSQL Summer Reading List》
介紹:NoSQL知識清單,裡面不僅僅包含了資料庫閱讀清單還包含了分散式系統資料.
- 《Raft: Understandable Distributed Consensus》
介紹:Raft可視化圖幫助理解分散式一致性
- 《Etcd:Distributed reliable key-value store for the most critical data of a distributed system》
介紹:Etcd分散式Key-Value存儲引擎
- 《Understanding Availability》
介紹:理解peer-to-peer系統中的可用性究竟是指什麼.同時推薦基於 Peer-to-Peer 的分散式存儲系統的設計
- 《Process structuring, synchronization, and recovery using atomic actions》
介紹:經典論文
- 《Programming Languages for Parallel Processing》
介紹:並行處理的編程語音
- 《Analysis of Six Distributed File Systems》
介紹:此篇論文對HDFS,MooseFS,iRODS,Ceph,GlusterFS,Lustre六個存儲系統做了詳細分析.如果是自己研發對應的存儲系統推薦先閱讀此篇論文
- 《A Survey of Distributed File Systems》
介紹:分散式文件系統綜述
- 《Concepts of Concurrent Programming》
介紹:並行編程的概念,同時推薦卡內基梅隆FTP
- 《Concurrency Control Performance Modeling:Alternatives and Implications》
介紹:並發控制性能建模:選擇與意義
- 《Distributed Systems - Concepts and Design 5th Edition》
介紹:ebook分散式系統概念與設計
- 《分散式系統設計的形式方法》
介紹:分散式系統設計的形式方法
- 《互斥和選舉演算法》
介紹:互斥和選舉演算法
- 《Actors:A model Of Concurrent Cornputation In Distributed Systems》
介紹:經典論文
- 《Security Engineering: A Guide to Building Dependable Distributed Systems》
介紹:如何構建一個安全可靠的分散式系統,About the Author,Bibliography:文獻資料,章節訪問把鏈接最後的01換成01-27即可
- 《15-712 Advanced and Distributed Operating Systems》
介紹:卡內基梅隆大學的分散式系統博士生課程主頁,有很豐富的資料
- 《Dapper, Google"s Large-Scale Distributed Systems Tracing Infrastructure》
介紹:Dapper,大規模分散式系統的跟蹤系統,譯文,譯文對照
- 《CS262a: Advanced Topics in Computer Systems》
介紹:伯克利大學計算機系統進階課程,內容有深度,涵蓋分散式,資料庫等內容
- 《Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System》
介紹:PB級分散式系統構建/擴展經驗
- 《CS162: Operating Systems and Systems Programming》
介紹:伯克利大學計算機系統課程:操作系統與系統編程
- 《MDCC: Multi-Data Center Consistency》
介紹:MDCC主要解決跨數據中心的一致性問題中間件,一種新的協議
- 《Research at Google:Distributed Systems and Parallel Computing》
介紹:google公開對外發表的分散式系統與並行計算論文
- 《HDFS Architecture Guide》
介紹:分散式文件系統HDFS架構
- 《ActorDB distributed SQL database》
介紹:分散式 Key/Value資料庫
- 《An efficient data location protocol for self-organizing storage clusters》
介紹:是著名的Ceph的負載平衡策略,文中提出的幾種策略都值得嘗試,比較贊的一點是可以對照代碼體會和實踐,如果你還需要了解可以看看Ceph:一個 Linux PB 級分散式文件系統,除此以外,論文的引用部分也挺值得閱讀的,同時推薦Ceph: A Scalable, High-Performance Distributed File System
- 《A Self-Organizing Storage Cluster for Parallel Data-Intensive Applications》
介紹:Surrento的冷熱平衡策略就採用了延遲寫技術
- 《HBA: Distributed Metadata Management for Large Cluster-Based Storage Systems》
介紹:對於分散式存儲系統的元數據管理.
- 《Server-Side I/O Coordination for Parallel File Systems》
介紹:伺服器端的I/O協調並行文件系統處理,網路,文件存儲等都會涉及到IO操作.不過裡面涉及到很多技巧性的思路在實踐時需要斟酌
- 《Distributed File Systems: Concepts and Examples》
介紹:分散式文件系統概念與應用
- 《CSE 221: Graduate Operating Systems》
介紹:加利福尼亞大學的研究生操作系統課程主頁,論文很值得閱讀
- 《S4: Distributed Stream Computing Platform》
介紹:Yahoo出品的流式計算系統,目前最流行的兩大流式計算系統之一(另一個是storm),Yahoo的主要廣告計算平台
- 《Pregel: a system for large-scale graph processing》
介紹:Google的大規模圖計算系統,相當長一段時間是Google PageRank的主要計算系統,對開源的影響也很大(包括GraphLab和GraphChi)
- 《GraphLab: A New Framework for Parallel Machine Learning》
介紹:CMU基於圖計算的分散式機器學習框架,目前已經成立了專門的商業公司,在分散式機器學習上很有兩把刷子,其單機版的GraphChi在百萬維度的矩陣分解都只需要2~3分鐘;
- 《F1: A Distributed SQL Database That Scales》
介紹:這篇論文是Google 2013年發表的,介紹了F1的架構思路,13年時就開始支撐Google的AdWords業務,另外兩篇介紹文章F1 - The Fault-Tolerant Distributed RDBMS Supporting Google"s Ad Business .Google NewSQL之F1
- 《Cockroach DB:A Scalable, Survivable, Strongly-Consistent SQL Database》
介紹:CockroachDB :一個可伸縮的、跨地域複製的,且支持事務的數據存儲,InfoQ介紹,Design and Architecture of CockroachDb
- 《Multi-Paxos: An Implementation and Evaluation》
介紹:Multi-Paxos實現與總結,此外推薦Paxos/Multi-paxos Algorithm,Multi-Paxos Example,地址:ftp://ftp.cs.washington.edu/tr/2009/09/UW-CSE-09-09-02.PDF
- 《Zab: High-performance broadcast for primary-backup systems》
介紹:一致性協議zab分析
- 《A Distributed Hash Table》
介紹:分散式哈希演算法論文,擴展閱讀Introduction to Distributed Hash Tables,Distributed Hash Tables
- 《Comparing the performance of distributed hash tables under churn》
介紹:分散式hash表性能的Churn問題
- 《Brewer』s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web》
介紹:分散式系統的CAP問題,推薦Perspectives on the CAP Theorem.對CAP理論的解析文章,PODC ppt,A plain english introduction to CAP Theorem,IEEE Computer issue on the CAP Theorem
註:裡面的很多內容需要梯子- 我是來潑冷水的,旗幟鮮明的反對先看hadoop,以及google三篇論文的答案們。這對於分散式系統的初學者來說,門檻太高,我認為讀分散式系統,應該先看這本書:現代操作系統(第3版) (豆瓣)。
- 這一條肯定會帶來很多的質疑,因為這本書,講解的是操作系統是單機的,為什麼看分散式系統要看這本書,以下來說說我推薦這本書的原因,那就是這本書不僅僅講解了現代操作系統是如何組成的,同時也詳細的講解了這種組成的原因,以及演化。
- 現在的操作系統的所有基礎概念,是由於cpu的運作原理,高速緩存,內存和硬碟這幾個不同的硬體的處理速度差異所導致的,而比如進程調度,進程切換,進程鎖,以及進程通信,也同樣組成了分散式操作系統實現的基礎,其中,進程的互斥鎖,可以說就是分散式鎖的簡化版。
- 其次,我是來反對凡事必提bigtable,spanner並認為分散式資料庫是解決一切問題的觀點的,要理解分散式資料庫,還是需要先了解傳統的資料庫,我建議從:資料庫系統實現 (豆瓣) 這本書開始入手,其中最重要的一點就是理解本地事務的概念
- 為什麼傳統資料庫使用SQL來進行交互
- 本地事務就是二階段進行的,先寫入本地日誌,並再改變資料庫的表內容,為何如此設計,是為了保證事務的什麼特性
- 傳統資料庫的擴展方式,傳統資料庫的橫向擴展難點到底在哪裡
- nosql的出現究竟是為了解決什麼問題,拋棄了哪些傳統資料庫的特性,為何拋棄了一部分傳統資料庫的特性,就可以獲得更好的擴展性
- 同樣身為nosql,mongodb和hbase有什麼本質區別
- OLAP和OLTP這兩個不同的方向,是不是一種妥協的方案
- 在這個基礎上,再開始看newSql的一類產品,想想newSql究竟是缺了傳統資料庫什麼內容,為了達成什麼目標(是的,我一直認為完美的無限擴展的資料庫產品不存在)
- 最後來做一下總結,了解分散式系統,無論是從實踐中了解,還是從論文了解,如果需要理解本質,而不是理解實現的細節,還是建議從最最基礎的內容來推演,但是建議不必一開始就需要完善的了解全部的細節,而是能夠舉一反三,其中這個一肯定就是現代操作系統基礎了~
先看百度文庫這篇《分式系統工程實踐》http://wk.baidu.com/view/895a2a3467ec102de2bd8902?pcf=2#page/1/1375282274254 ;再看「Google三大論文」;接下來再研究Hadoop的實現。
1. 優秀的計算機基礎知識(動手能力強一些會更好)
2. 強大的學習能力
3. 英文
其實所有的方向(工程方面的)需要這三點基礎就夠了。
上面的回答很多,但是個人感覺這些回答不太系統(要系統回答,這個需要論文才行。我下面也只是簡單說說自己的一些觀點,權當補充)
首先。lz需要了解分散式系統是一個很廣泛的概念。任何系統可以大致劃分成三個方面:計算,存儲,網路。分散式系統也不例外。比如Hadoop/Spark是分散式計算系統,HDFS/Tachyon/Ceph這些是分散式存儲系統,分散式資料庫(諸如BigTable,DynamoDB)也是存儲系統。只要是分散式系統,必定是含有網路的,純粹的分散式網路系統很少,SDN/Openflow這些可以算是分散式網路分系統。
其次。選擇系統的教程來學習。比較好的書籍上面已經有推薦了,MIT的課程也不錯。初學者進行一個系統的學習還是很有必要的。如果你已經有OS的基礎,寫過網路編程,了解CAP原理,不進行這些系統的學習也是可以的。
再次。閱讀好的論文,論文在精不在多。Google的MapReduce是計算系統的經典之作,Amazon的dynamodb是資料庫系統的經典之作,Google的GFS算是文件系統方面比較好的論文。系統領域的頂會是SOSP/OSDI,偏重網路的還有SIGCOMM.
再次。玩弄和hack主流的分散式系統。自己部署一個Hadoop集群或者Spark集群,在上面寫寫簡單的例子,自己實地感受一下這些分散式。選擇主流的系統是因為分散式系統對於初學者有很多的坑,主流的系統有足夠多的參考資料。如果在上面跑跑程序之後對背後的原理感興趣,可以去看看源代碼。論文只能夠提供大概思路,好的idea,如果實現很差,性能也會差別很大。這個階段需要你學會一些網路知識和系統配置管理。
最後。當你已經能夠hack主流的分散式系統後,你就可以到達自己根據需求來定製自己的分散式系統了。這個階段,你會對已有的系統進行很多思考,會閱讀很多相關的論文,並且自己會不斷的進行demo驗證,最終實現出你自己的想法。到達這個階段之後,你就真正走入了分散式系統這個領域。如果你英文閱讀能力還行的話,我建議你去http://quora.com上面搜這個問題,肯定有你想要的。
另外,
分散式系統的工作還是比較基礎的計算機實踐,建議先熟悉操作系統,網路,資料庫這三個基本課程的內容,最好再加上編譯。接著從Google的三篇論文入手,GFS,MapReduce,Bigtable,其分別代表了分散式存儲、計算和Nosql三個領域。Hadoop1.0是根據MapReduce這篇論文做出來的東西。當然這都是快10年前的東西了,然後針對自己要研究的方面再繼續看深入的東西。Hadoop近幾年發展很迅速,現在發展到Hadoop2.0,希望了解的話可以關注SOCC2013的YARNhttp://www.socc2013.org/home/program/a5-vavilapalli.pdf?attredirects=0,然後再看看現在YARN的上層應用spark之類的。
其實,國內有個壞毛病,就是一旦國外搞個什麼東東,就以為是什麼聖經,一幫衛道士們到處炫耀以為很牛逼,我看一幫人推薦Hadoop的書,實在有點好笑,就一工具有啥好推薦的,如果樓主真的想踏踏試試的從事分散式方面的,想扎紮實實地學點基本功,就從網路、分散式一點一滴的慢慢學期,把基礎打撈,其它基本上是不攻自破了,這裡我推薦幾本書吧:
《計算機網路》Tanenbaum版
《TCP/IP協議詳解》一、二卷
《分散式系統:概念與設計》
《分散式系統:原理與范型》
《分散式操作系統》Tanenbaum版
我倒是推薦你先把 Google FS、MapReduce、BigTable、Dynamo 等幾篇原始的經典論文通讀一下。基本都是 OSDI 上的,到會議網站開放下載。
剛開始學,不推薦看書。
技術類學習的第一步是實踐。可以先去學著搭環境,寫個hello world程序(hadoop中的word count)。接下來就是多寫,多想,逐步提升。當你有了實戰所需的技術和經驗,需要對自己所學的內容做一個升華時,或者當你的實戰能力遭遇到了瓶頸的時候,再去看書。
你們真牛逼,話說你們分享的東西都整明白了么。
可以逛一逛我的blog,http://www.r66r.net hadoop方面的筆記整理
全面深入的閱讀Google經典系列論文分散式stack:BigTable, GFS, Chubby,BigQuery, Spanner還有大牛lamport經典論文timing和paxos
1.O"Reilly 的 Hadoop指南,建議看英文版本的
2.hadoop.apache.org, 這是Hadoop的官網,裡面有大數據和Hadoop的應用
Hadoop核心系統原理 http://www.kokojia.com/xitongyunwei/video22625-1250.html這個鏈接裡面內容挺好的,有興趣的可以看看,說不定對你有所幫助。
作為一個大數據的初學者,我覺得剛開始學就按照 @超大杯摩卡星冰樂所說的那樣,先搭建環境自己感受一下,動手實踐理解的會更快更深刻,而且,當使用某種大數據技術時(比如hadoop),從一開始就養成好習慣,嚴格按照官網的 Tutorial執行,先跑一些入門的例子,有良好的開端和思維方式,後面的路要好走些。
最近正在做畢業設計,題目跟大數據和機器學習有關,還在學習的過程中,就說一下個人最近的學習體會吧。
首先我不是計算機專業的,有些關於程序的東西不是很懂,所以在學習的時候查了好多關於程序本身的問題,整個過程就是按常式敲代碼,然後查錯.....
所以我總結出來,實踐是很重要的。一開始因為不會,寫出來肯定很多錯誤,針對每一個錯誤去debug本身就是一個學習的過程。而且由於是親身經歷過的bug所以印象都比較深刻。綜上,最主要的是實踐,一定要動手編,一定要自己先思考。
《hadoop權威指南》這本書不錯,但它是一本工具書。我對工具書的理解是當你需要的時候再去查找它。也就是說在實踐中遇到問題了去查找對應章節。這裡存在一個問題,只查找對應章節是看不懂的,因為章節之間相互聯繫、逐步遞進,所以一定要清楚查工具書時可能需要逐步往前,通過翻看之前的章節來理清問題的脈絡。我在看這本書時除了剛上手時看了前幾章外,其它都是遇到問題了再去找書,現在也差不多看了一半多了,現在如果要求做一個簡單的分散式程序也是可以做出來的。但總之這是一個反覆查書,反覆學習強化的過程。
另外我也看到有人提到了Google關於分散式系統、Mapreduce等的三大論文,那三個論文我也看過,確實很經典(雖然我只是略讀理解不深)而且有助於對大數據處理平台的整體把握。理解Map-Reduce結構對於理解程序十分有必要。
如果題主是在校生的話建議查一些對應的博士學位論文,論文里都會給出介紹的,當然也包括他們當時處理問題時的一些構想,還是很有價值的。
利用Hadoop對大數據進行處理往往利用的是Hadoop整個生態系統,也就是除了Hadoop Common之外往往需要其他一些軟體,比如Sqoop、Hive、Mahout……基本上都要了解一些。
因為最近也在學習Mahout,所以覺得《Mahout in Action》也不錯,順手推薦一下。
StackOverflow和CSDN以及其他一些論壇和博客都是很好的學習地點,在這裡也感謝那些分享過自己經驗的人,他們的經驗給予我很多幫助。
當然還要一些基礎知識,這段放最後是因為覺得應該很多人都會,只是我當時入門的時候不太會而已,比如像Java語言啊啥的(原來用的比較熟的語言只有C,唉自控狗的本科教學真是...有點脫軌)但是做機器學習中用到了一些數學基礎還是學習的挺快的,哈哈哈哈哈哈,畢竟數學類課程還挺多。
手機碼這麼些字還真不容易....好累。正在看這本
Data-Intensive Text Processing with MapReduce
Jimmy Lin and Chris Dyer
作者GitHub lintool (Jimmy Lin) · GitHub 有PDF
http://lintool.github.io/MapReduceAlgorithms/MapReduce-book-final.pdf
Hadoop權威指南
最靠譜的是動手實踐,去一家大型公司做相關實習要遠比自己看書要體會深刻的多。
英語一般的話,可以看看《Hadoop權威指南》,第二版比第一版好多了,當然英語好就另當別論了
hadoop 看這本吧《Oreilly.Hadoop.The.Definitive.Guide.2nd.Edition 》 中文版就不推薦了,直接看英文的吧。
學習
推薦閱讀:
※為什麼 Storm 比 Hadoop 快?是由哪幾個方面決定的?
※在社交網路中,如何去計算中兩個人之間的最短路徑?
※Hadoop 一般用在哪些業務場景?