1. 程式人生 > >大數據--spark

大數據--spark

keep 對數 cache 數據處理 這一 for 基礎上 性能 持久化

在剛接觸大數據的時候,我們主要接受的是關於hadoop的相關知識,雖然比較淺顯,但是基本介紹了hadoop每一個過程或者組建的運行的原理以及架構,包括優缺點以及他的使用場景,例如hdfs、mapreduce、zookeeper以及hive、hbase等,但是,在這之後,為了滿足大數據的增長需求以及更好的對數據進行處理得到數據中的有用信息,很多的時間場景下,Hadoop的計算速度以及模式已經不能完全的滿足計算分析的需求,所以,在hadoop的基礎上,我們增加了另外一個新的技術===spark
什麽是spark呢?
在spark的官方網站上對於spark是這樣定義的=Apache Spark是一種快速通用的集群計算系統。它提供Java,Scala,Python和R中的高級API,以及使用最先進的DAG調度,查詢優化器和物理執行引擎,實現了在數據處理方面的一個高速和高性能,而且spark中封裝了大量的庫,例如?SQL和DataFrames,MLlib機器學習,GraphX和spark Streaming 可以在應用程序中直接使用在這個庫,而且,為了實現spark的通用性,目前spark支持local、standalone、mesos、yarn四種運行模式
Spark是主要有scala語言進行編寫,當然也包括java甚至是python,伯克利大學針對spark構建了一個數據分析棧
技術分享圖片

與大數據相關的需求包括:離線計算、實時計算、機器學習、交互式查詢,若meiyouspark需要搭建mr、storm、mahout、hive四種不同的集群進行相應的處理,但是,spark中的不同集群封裝了不同的處理集群進行出去,然後在運行的時候只需要搭建一套spark就可以完成幾乎所有的操作
Spark的體系架構:
結合上面的講解,spark的體系架構主要包括數據存儲、API、管理框架三個方面
數據存儲:spark用hdfs文件系統存儲數據,與hadoop相同,所以它可以存儲兼容於所有的Hadoop的數據源

API:spark的編程語言是基於JVM的,而除了基於JVM的scala和java兩種之外,spark還只是python和R語言,一共四種API
資源管理框架:
技術分享圖片
Spark相比hadoop來說發展迅速,在短短的幾年間就完成了相關的設計,在到09-16年年間進行了版本的更新和設計,完善了spark的功能,用戶能夠更好地使用和體驗
Spark的設計就是為了效率快,執行時間短,那spark為什麽比mapreduce快呢?Mapreduce是基於磁盤的叠代計算(每次計算的邏輯一樣但是計算的數據不一樣),每一次的計算會將結果放置到hdfs中,當下一次進行計算的時候在去hdfs中讀取上一次計算的結果進行計算
而spark可已經數據持久化到 內存中,而內存的讀取速度比磁盤的要快很多倍,在一個原因就是因為spark執行的是並行的計算框架,減少了數據的落地
Spark的特性
1、高效率:基於內存的叠代運算,效率高,而且知識DAG的分布式的並行計算框架,減少了叠代過程的數據落地
2、容錯性高:spark中的彈性數據集(RDD)的抽象,如果數據集的一部分丟失,需要進行重建,而且數據集的操作類型更加豐富
為提高spark的容錯性,引進了分布式彈性數據集(RDD)的抽象,他是分布在節點上的一組只讀數據集合,可以通過不同的算子進行操作,而這些算子主要可以分為三類:transformation類算子:代表的map、flatmap等,是一種延遲操作,提前對數據進行操作
Action類算子:觸發transformation類的執行,提交job,並將數據輸出spark
持久化類算子:cache、persist算子,將數據持久化到內存,提升了計算的效率
對於這RDD操作的算子後期還會詳細講解
除了引入RDD這一特點之外,還有許多其他的結構來支持spark的高性能
·Spark Core封裝了一部分的計算框架和運行框架以及RDD
SparkStreaming是一個對實時數據流進行高通量、容錯處理的流式處理系統·Spark SQL
SparkSQL的前身是Shark,Shark是伯克利實驗室Spark生態環境的組件之一,它修改了內存管理、物理計劃、執行三個模塊,並使之能運行在Spark引擎上,從而使得SQL查詢的速度得到10-100倍的提升
這就是spark的初期介紹,後面我們還會就spark的各個組件進行相應的詳細介紹

大數據--spark