大家好!貓大來了!在前不久的Sort Benchmark Competition(資料排序基準競賽)中,Spark在三十分鐘內將多達100 TB的資料量排序完成,打破了由Hadoop保有72分鐘的世界記錄,而且所使用的機器數量是Hadoop的十分之一!Spark這一次參加的是資料排序基準競賽中的GraySort項目,此項目是針對極大量資料的排序的效能做的比賽,究竟是什麼樣的架構讓Spark在此次競賽中遠遠超越傳統的Hadoop Map Reduce呢 ?
Spark概觀
Spark是一個靈活的計算框架,適合做批次處理、流處理(Spark Streaming)、互動式分析(Spark SQL )、迭代式機器學習(ML Lib)等不同類型的應用,因此Spark可以成為一個用途廣泛的大數據計算引擎。記憶體內運算(In-Memory Computing)
Hadoop在做運算時需要將中間產生的數據存在硬碟中,因此會有讀寫資料的延遲問題;有別於Hadoop的Disk-based MapReduce,Spark是以Scala撰寫,並基於記憶體計算的開源集群計算系統,號稱比原先的Hadoop快100倍。I/O往往是效能的瓶頸,因此記憶體內運算減少了資料的移動,又記憶體的存取速度又比傳統硬碟快很多,故加快了資料的I/O速度。下圖是相同的運算(羅吉斯回歸)下,Hadoop和Spark的效能比較,可以明顯的看出其差異:
分散的數據集
Spark 提出 RDD(Resilient Distributed Dataset),可以說是Spark的核心概念,RDD可以被駐留在記憶體中,後續的任務可以直接讀取記憶體中的數據。透過多台機器上不同RDD的聯合分區機制,就能減少機器間的Data shuffuling。RDD有以下幾種特性:
1. 是在從集結點上不可變的、已分區的集合物件
2. 透過並行轉換的方式來產生(如map, filter, join…)
3. 失敗會自動重建
4. 可以控制記憶體、磁碟進行運算
5. 是可序列化的
6. 是靜態類別
RDD典型的操作順序如下:
1. 從檔案系統讀入
2. 經過一系列的Transformation,由父RDD轉換得到新的RDD給下一次Transformation使用
3. 最後就是Action(count, collect, save,…),經最後一個RDD進行轉換輸出到外部
與Hadoop的結合
Spark提供Hadoop Storage API可以無縫介接各種儲存系統,像是HDFS、S3及POSIX compliant檔案系統等,並且同樣支援YARN,可以與MapReduce運行在同一個從集哩,共享儲存資源與運算,而且也幾乎與Hive完全相容。Spark是基於in-memory的計算框架,是用於需要多次操作特定Data set的應用場合,需要反覆操作的次數越多,所需讀取的資料量越大,則越能看出Spark的效能,由於RDD的特性,Spark不太適合增量修改的應用,例如Web服務的儲存或是爬蟲、索引。目前Spark支援安種語言,Scala、Python、Java。總的來說Spark的適用面比Hadoop廣泛。隨著分析技術不斷的進步,許多電子商務、零售業、半導體產業也開始使用大數據分析工具,最近Spark的竄紅也引起了大家的注意,許多企業也轉而採用Spark做為更進階的分析工具,相信Spark在未來會有很好的發展。
採礦貓
採礦貓過去在許多金控公司當過顧問,看到很多台灣散戶投資者被國外的投資公司坑殺,因而希望能提供散戶強大的投資工具與武器以提升獲利率、避免走上被坑殺的道路