天天看點

地鐵譯:Spark for python developers --- 搭建Spark虛拟環境1了解資料密集型應用的架構

一個多月的地鐵閱讀時光,閱讀《Spark for python developers》電子書,不動筆墨不看書,随手在evernote中做了一下翻譯,多年不習英語,自娛自樂。周末整理了一下,發現再多做一點就可基本成文了,于是開始這個地鐵譯系列。

本章中,我們将為開發搭建一個獨立的虛拟環境,通過Spark和Anaconda提供的PyData 庫為該環境補充能力。 這些庫包括Pandas,Scikit-Learn, Blaze, Matplotlib, Seaborn, 和 Bokeh. 我們的操作如下:

  • 使用Anaconda 的Python 釋出包搭建開發環境,包括使用 IPython Notebook 環境來完成我們的資料探索任務。
  • 安裝并使Spark以及 PyData 庫正常工作,例如Pandas,Scikit- Learn, Blaze, Matplotlib, 和 Bokeh.
  • 建構一個 word count例子程式來保證一切工作正常.

近些年來湧現出了很多資料驅動型的大公司,例如Amazon, Google, Twitter, LinkedIn, 和 Facebook. 這些公司,通過傳播分享,透漏它們的基礎設施概念,軟體實踐,以及資料處理架構,已經培育了一個生機勃勃的開源軟體社群,形成了企業的技術,系統和軟體架構,還包括新型的基礎架構,DevOps,虛拟化,雲計算和軟體定義網絡。

受到Google File System (GFS)啟發,開源的分布式計算架構Hadoop和MapReduce被開發出來處理PB級資料。在保持低成本的同時克服了擴充的複雜性,着也導緻了資料存儲的新生,例如近來的資料庫技術,列存儲資料庫 Cassandra, 文檔型資料庫 MongoDB, 以及圖譜資料庫Neo4J。

Hadoop, 歸功于他處理大資料集的能力,培育了一個巨大的生态系統,通過Pig, Hive, Impala, and Tez完成資料的疊代和互動查詢。

當隻使用MapReduce的批處理模式時,Hadoop的操作是笨重而繁瑣的。Spark 創造了資料分析和處理界的革命,克服了MapReduce 任務磁盤IO和帶寬緊張的缺陷。Spark 是用 Scala實作的, 同時原生地內建了 Java Virtual Machine (JVM) 的生态系統. Spark 很早就提供了Python API 并使用PySpark. 基于Java系統的強健表現,使 Spark 的架構和生态系統具有内在的多語言性.

本書聚焦于PySpark 和 PyData 生态系統 Python 在資料密集型處理的學術和科學社群是一個優選程式設計語言. Python已經發展成了一個豐富多彩的生态系統. Pandas 和 Blaze提供了資料處理的工具庫 Scikit-Learn專注在機器學習 Matplotlib, Seaborn, 和 Bokeh完成資料可視化 是以, 本書的目的是使用Spark and Python為資料密集型應用建構一個端到端系統架構. 為了把這些概念付諸實踐 我們将分析諸如 Twitter, GitHub, 和 Meetup.這樣的社交網絡.我們通過通路這些網站來關注Spark 和開源軟體社群的社交活動與互動.

建構資料密集型應用需要高度可擴充的基礎架構,多語言存儲, 無縫的資料內建, 多元分析處理, 和有效的可視化. 下面要描述的資料密集型應用的架構藍圖将貫穿本書的始終. 這是本書的骨幹.

我們将發現spark在廣闊的PyData 生态系統中的應用場景.

了解資料密集型應用的架構


為了了解資料密集型應用的架構 使用了下面的概念架構 該架構 被設計成5層:

• 基礎設施層

• 持久化層

• 內建層

• 分析層

• 參與層

下圖描述了資料密集型應用架構的五個分層:

從下往上 我們周遊各層的主要用途.

基礎設施層(Infrastructure layer)

基礎設施層主要關注虛拟化,擴充性和持續內建. 在實踐中, 虛拟化一詞, 我們指的是開發環境 的VirtualBox以及Spark 和Anaconda 的虛拟機環境。 如果擴充它,我們可以在雲端建立類似的環境。建立一個隔離的開發環境,然後遷移到測試環境,通過DevOps 工具,還可以作為持續內建的一部分被部署到生産環境,例如 Vagrant, Chef, Puppet, 和Docker. Docker 是一個非常流行的開源項目,可以輕松的實作新環境的部署和安裝。本書局限于使用VirtualBox建構虛拟機. 從資料密集型應用架構看,我們将在關注擴充性和持續內建前提下隻闡述虛拟化的基本步驟.

持久化層(Persistence layer)

持久化層管理了适應于資料需要和形态的各種倉庫。它保證了多中繼資料存儲的建立和管理。 這包括關系型資料庫如 MySQL和 PostgreSQL;key-value資料存儲 Hadoop, Riak, 和 Redis ;列存儲資料庫如HBase 和 Cassandra; 文檔型資料庫 MongoDB 和 Couchbase; 圖譜資料庫如 Neo4j. 持久化層還管理了各種各樣的檔案系統,如 Hadoop’s HDFS. 它與各種各樣的存儲系統互動,從原始硬碟到 Amazon S3. 它還管理了各種各樣的檔案存儲格式 如 csv, json, 和parquet(這是一個面向列的格式).

內建層(Integration layer)

內建層專注于資料的擷取、轉移、品質、持久化、消費和控制.基本上由以下的5C來驅動: connect, collect, correct, compose和consume.這五個步驟描述了資料的生命周期。它們聚焦于如何擷取有興趣的資料集、探索資料、反複提煉使采集的資訊更豐富,為資料消費做好準備. 是以, 這些步驟執行如下的操作:

  • Connect: 目标是從各種各樣資料源選擇最好的方法.如果存在的話,這些資料源會提供APIs,輸入格式,資料采集的速率,和提供者的限制.
  • Correct: 聚焦于資料轉移以便于進一步處理 同時保證維護資料的品質和一緻性
  • Collect: 哪些資料存儲在哪 用什麼格式 友善後面階段的組裝和消費
  • Compose: 集中關注如何對已采集的各種資料集的混搭, 豐富這些資訊能夠建構一個引入入勝的資料驅動産品。
  • Consume: 關注資料的使用、渲染以及如何使正确的資料在正确的時間達到正确的效果。
  • Control: 這是随着資料、組織、參與者的增長,早晚需要的第六個附加步驟,它保證了資料的管控。


    下圖描述了資料擷取以及提煉消費的疊代過程:

分析層(Analytics layer)

分析層是Spark 處理資料的地方,通過各種模型, 算法和機器學習管道進而得出有用的見解. 對我們而言, 本書的分析層使用的是Spark. 我們将在接下來的章節深入挖掘Spark的優良特性. 簡而言之,我們使它足夠強大以緻于在單個同一平台完成多周範式的分析處理。 它允許批處理, 流處理和互動式分析. 在大資料集上的批處理盡管有較長的時延單使我們能夠提取模式和見解,也可以在流模式中處理實時事件。 互動和疊代分析更适合資料探索. Spark 提供了Python 和R語言的綁定API,通過SparkSQL 子產品和Spark Dataframe, 它提供了非常熟悉的分析接口.

參與層(Engagement layer)

參與層完成與使用者的互動,提供了 Dashboards,互動的可視化和告警. 我們将聚焦在 PyData 生态系統提供的工具如Matplotlib, Seaborn, 和Bokeh.