跳轉到主要內容
工程的博客

基準測試Apache火花在單個節點上的機器

分享這篇文章

Apache火花已成為事實上的嗎統一的分析引擎在分布式環境中進行大數據的處理。然而我們看到越來越多的用戶選擇在一台機器上運行的火花,通常他們的筆記本電腦,處理大型數據集,比選出一個大型集群火花。這種選擇主要是因為以下的原因:

  1. 一個單一的、統一的API,規模從“小數據”在筆記本電腦上“大數據”集群上
  2. 通曉多種語言的編程模式,支持Python, R, Scala和Java
    ANSI SQL支持
  3. 與PyData緊密集成工具,例如,熊貓熊貓用戶定義函數

雖然上述可能是顯而易見的,用戶往往驚訝地發現:

  • 火花安裝在單個節點上不需要配置(下載並運行它)。
  • 火花通常可以更快,由於並行性,比單節點PyData工具。
  • 火花可以降低內存消耗,可以處理更多的數據比筆記本電腦的內存大小,因為它不需要整個數據集加載到內存中之前處理。

PyData工具和管道造成了Apache火花的易用性和性能。例如,熊貓的靈感火花的數據幀的API。另一個例子是,在火花2.3熊貓udf顯著提高PySpark性能結合火花和熊貓。

在這個博客中,我們將演示使用PySpark單節點計算的優點和分享我們的觀察。通過實驗,我們將展示為什麼您可能想要使用PySpark而不是熊貓大型數據集超過單節點機器的內存。

設置Apache火花在筆記本電腦上

即使火花最初設計用於分布式數據處理,很多努力已經投入當地的發展使其更容易安裝,給開發人員的新火花容易平台實驗:隻需要下載tarball,其解壓縮,可以立即開始使用它不需要任何設置。Beplay体育安卓版本例如,下麵的命令將下載tarball火花和發射PySpark:

wget https://www-us.apache.org/dist/spark/spark-2.3。0/火花-2.3。0- - - - - --hadoop2。7. tgz焦油-xvf火花,2.3。0- - - - - --hadoop2。7. tgzcd火花,2.3。0- - - - - --hadoop2。7/ pyspark

更好的是,火花也可以PyPI家釀,Conda,可以安裝使用一個命令:

pip安裝pyspark
              家釀安裝apache-spark

單節點的性能

這是幾年以來,英特爾能夠推高CPU時鍾頻率。而不是使一個核心更強大的高頻率,最新的芯片擴展核心數。因此,它並不少見的筆記本電腦或工作站有16個核心,和服務器有64甚至128內核。通過這種方式,這些多核單節點機器的工作像一個分布式係統比傳統的單一核心的機器。

我們經常聽到,分布式係統是當數據低於單節點係統適合在單個機器的內存。通過比較內存使用和性能之間的火花和熊貓使用常見的SQL查詢,我們觀察到,並非總是如此。我們使用了三種常見的SQL查詢顯示單節點火花和熊貓的比較:

查詢1。從store_sales選擇馬克斯(ss_list_price)

查詢2。從store_sales選擇計數(ss_customer_sk截然不同)

查詢3。選擇和(ss_net_profit)由ss_store_sk store_sales集團

為了演示上麵,我們測量的最大數據大小(拚花和CSV)熊貓可以加載在單個節點上有244 GB的內存,並比較三個查詢的性能。

設置和配置

硬件

我們使用一個虛擬機使用以下設置:
* CPU核心數:32個虛擬核(16個物理核心),英特爾至強處理器e5 - 2686 v4 @ 2.30 ghz
*係統內存:244 GB
*總本地磁盤空間洗牌:4 x 1900 GB NVMe SSD

軟件

  • 操作係統:Ubuntu 16.04
  • 火花:Apache在當地引發tripwire集群模式
  • 熊貓版:0.20.3
  • Python版本:2.7.12

PySpark和熊貓

我們的基準表的輸入數據集從TPC-DS“store_sales”,有23列和數據類型是長/雙。

可伸縮性

熊貓需要大量的內存資源加載數據文件。以下的測試負載表“store_sales”10到270使用熊貓和Pyarrow和記錄的最大一個Python駐留集大小的過程。如下圖顯示的數據大小線性增加的那麼駐留集大小(RSS)單一節點上的機器。

我們還檢測了最小的文件大小,熊貓將無法i3.8xlarge實例上的負載。

的火花,很容易從小規模數據集在筆記本電腦上,“大數據”與一個集群API。即使在單個節點上,火花的運營商泄漏數據到磁盤,如果不適合在內存中,允許它運行在任何大小的數據。

性能

運行SQL查詢的基準包括在表“store_sales”(10 - 260)規模鋪文件格式。

PySpark跑在本地集群模式10 gb內存和16個線程。

我們觀察到,隨著輸入數據大小的增加,PySpark實現更好的性能結果與有限的資源,而熊貓墜毀,未能處理拚花超過39 gb的文件。

因為所有核上並行執行,PySpark比熊貓在測試更快,即使PySpark之前沒有緩存數據到內存中運行查詢。證明,我們也跑的基準PySpark與不同數量的線程,與輸入數據規模250(約35 gb磁盤上)。

PySpark UDF和熊貓

另一方麵,熊貓UDF建立在Apache箭頭協議高性能Python開發人員,你是否使用單節點機器上的熊貓udf或分布式集群。介紹了Apache 2.3火花,李進兩個σ演示了熊貓UDF與PySpark的緊密集成。使用熊貓udf和火花,他比較計算的基準測試結果累積概率,以及其他計算功能,標準的Python UDF row-at-time和熊貓UDF之間。

熊貓udf用於vectorizing標量操作。考慮使用標量熊貓UDF PySpark計算累積概率值的正態分布N(0,1)使用scipy包中。

進口熊貓作為pdscipy進口統計數據@pandas_udf (“雙”)def提供(v):返回pd.Series (stats.norm.cdf (v))#火花DataFrame #現在用熊貓UDF#df.withColumn (“cumulative_probability”,cdf實驗組(df.v))

熊貓UDF,比常規的Python UDF這段代碼要快得多。下麵的圖表顯示,熊貓udf比Python udf row-at-a-time表現更好,在所有計算功能。

部分圖表對cdf實驗組的提取熊貓UDF的博客

結論

在總結中,我們概述了為什麼有些用戶選擇火花在單個機器上運行。在一些火花釋放,熊貓貢獻和集成與火花。一個巨大的勝利熊貓udf。事實上,因為熊貓API與火花DataFrames相似,許多開發人員經常將二者結合在一起的方便他們之間進行互操作

對於單節點分析大型數據集超過單節點的內存,火花提供更快的多核並行運行時和更大的可伸縮性,better-pipelined執行引擎。

用於該基準可以訪問源代碼https://github.com/databricks/benchmarks/tree/master/pandas

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map