spark初識一
阿新 • • 發佈:2019-02-16
spark 介紹
spark是一個實現快速通用的叢集計算平臺。它是由加州大學伯克利分校AMP實驗室 開發的通用記憶體平行計算框架,用來構建大型的、低延遲的資料分析應用程式。它擴充套件了廣泛使用的MapReduce計算模型。高效的支撐更多計算模式,包括互動式查詢和流處理。spark的一個主要特點是能夠在記憶體中進行計算,及時依賴磁碟進行復雜的運算,Spark依然比MapReduce更加高效。
spark一個大一統的軟體棧
Spark的各個元件如圖所示:
Spark軟體棧
- Spark Core 實現了Spark的基本功能:任務排程、記憶體管理、錯誤恢復、儲存系統互動模組以及彈性分散式資料集api定義
- Spark Sql 是Spark來操作結構化資料的程式包,可以讓我使用SQL語句的方式來查詢資料,Spark支援 多種資料來源,包含Hive表,parquest以及JSON等內容。
- Spark Streaming 是Spark提供的實時資料進行流式計算的元件。
- Mlib 是Spark中提供的常見的機器學習功能的程式庫。
- GraphX 是一種操作圖的程式庫。可以進行並行的圖計算。
- 叢集管理器 高效的執行在一個計算節點到數千個計算節點伸縮計算。
應用場景
Yahoo將Spark用在Audience Expansion中的應用,進行點選預測和即席查詢等
淘寶技術團隊使用了Spark來解決多次迭代的機器學習演算法、高計算複雜度的演算法等。應用於內容推薦、社群發現等
騰訊大資料精準推薦藉助Spark快速迭代的優勢,實現了在“資料實時採集、演算法實時訓練、系統實時預測”的全流程實時並行高維演算法,最終成功應用於廣點通pCTR投放系統上。
優酷土豆將Spark應用於視訊推薦(圖計算)、廣告業務,主要實現機器學習、圖計算等迭代計算。
核心概念簡介
- 在每個Spark程式執行過程中,我們都是由一個驅動器程式(SparkContext)發起來併發叢集上的各種並行操作。 並且驅動程式主要包含在main函式中。定義了叢集上的分散式資料集。
- 我們建立好SparkConext之後就可以建立RDD,在此基礎上進行各種操作,如collect,count等等
- 在我們執行這些操作的時候,驅動程式一般會管理多個執行器節點。這個節點是跟在配置的cpu核心數有關。1:1的對比關係。核心數越多代表我們並行的任務越多
執行器
4. 程式碼簡單實現
@Component public class SparkTest implements Serializable { @Autowired private transient JavaSparkContext scContext; public void sparkContextTest() { SparkConf conf = new SparkConf().setMaster("local").setAppName("My App Test"); } }
maven 配置檔案
<properties>
<scala.version>2.10.4</scala.version>
<spark.version>1.6.2</spark.version>
</properties>
<!-- spark 相關內容 -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.4</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-launcher_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
構建完成我們第一個程式 。