1. 程式人生 > >spark初識一

spark初識一

spark 介紹

spark是一個實現快速通用的叢集計算平臺。它是由加州大學伯克利分校AMP實驗室 開發的通用記憶體平行計算框架,用來構建大型的、低延遲的資料分析應用程式。它擴充套件了廣泛使用的MapReduce計算模型。高效的支撐更多計算模式,包括互動式查詢和流處理。spark的一個主要特點是能夠在記憶體中進行計算,及時依賴磁碟進行復雜的運算,Spark依然比MapReduce更加高效。

spark一個大一統的軟體棧

Spark的各個元件如圖所示:


Spark軟體棧

  1. Spark Core 實現了Spark的基本功能:任務排程、記憶體管理、錯誤恢復、儲存系統互動模組以及彈性分散式資料集api定義
  2. Spark Sql 是Spark來操作結構化資料的程式包,可以讓我使用SQL語句的方式來查詢資料,Spark支援 多種資料來源,包含Hive表,parquest以及JSON等內容。
  3. Spark Streaming 是Spark提供的實時資料進行流式計算的元件。
  4. Mlib 是Spark中提供的常見的機器學習功能的程式庫。
  5. GraphX 是一種操作圖的程式庫。可以進行並行的圖計算。
  6. 叢集管理器 高效的執行在一個計算節點到數千個計算節點伸縮計算。

應用場景

Yahoo將Spark用在Audience Expansion中的應用,進行點選預測和即席查詢等

淘寶技術團隊使用了Spark來解決多次迭代的機器學習演算法、高計算複雜度的演算法等。應用於內容推薦、社群發現等

騰訊大資料精準推薦藉助Spark快速迭代的優勢,實現了在“資料實時採集、演算法實時訓練、系統實時預測”的全流程實時並行高維演算法,最終成功應用於廣點通pCTR投放系統上。

優酷土豆將Spark應用於視訊推薦(圖計算)、廣告業務,主要實現機器學習、圖計算等迭代計算。

核心概念簡介

  1. 在每個Spark程式執行過程中,我們都是由一個驅動器程式(SparkContext)發起來併發叢集上的各種並行操作。 並且驅動程式主要包含在main函式中。定義了叢集上的分散式資料集。
  2. 我們建立好SparkConext之後就可以建立RDD,在此基礎上進行各種操作,如collect,count等等
  3. 在我們執行這些操作的時候,驅動程式一般會管理多個執行器節點。這個節點是跟在配置的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>

構建完成我們第一個程式 。