中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Spark踩坑記——初試

Spark簡介

整體認識

Apache Spark是一個圍繞速度、易用性和復雜分析構建的大數據處理框架。最初在2009年由加州大學伯克利分校的AMPLab開發,并于2010年成為Apache的開源項目之一。
Spark在整個大數據系統中處于中間偏上層的地位,如下圖,對hadoop起到了補充作用:
大數據系統架構圖

基本概念

Fork/Join框架是Java7提供了的一個用于并行執行任務的框架, 是一個把大任務分割成若干個小任務,最終匯總每個小任務結果后得到大任務結果的框架。
Fork/Join原理圖

  • 第一步分割任務。首先我們需要有一個fork類來把大任務分割成子任務,有可能子任務還是很大,所以還需要不停的分割,直到分割出的子任務足夠小。
  • 第二步執行任務并合并結果。分割的子任務分別放在雙端隊列里,然后幾個啟動線程分別從雙端隊列里獲取任務執行。子任務執行完的結果都統一放在一個隊列里,啟動一個線程從隊列里拿數據,然后合并這些數據。
    具體可參考

核心概念

  • RDD(Resilient Distributed Dataset) 彈性分布數據集介紹
    彈性分布式數據集(基于Matei的研究論文)或RDD是Spark框架中的核心概念。可以將RDD視作數據庫中的一張表。其中可以保存任何類型的數據。Spark將數據存儲在不同分區上的RDD之中。
    RDD可以幫助重新安排計算并優化數據處理過程。
    此外,它還具有容錯性,因為RDD知道如何重新創建和重新計算數據集。
    RDD是不可變的。你可以用變換(Transformation)修改RDD,但是這個變換所返回的是一個全新的RDD,而原有的RDD仍然保持不變。
    RDD支持兩種類型的操作:
    • 變換(Transformation)
    • 行動(Action)
      變換:變換的返回值是一個新的RDD集合,而不是單個值。調用一個變換方法,不會有任何求值計算,它只獲取一個RDD作為參數,然后返回一個新的RDD。變換函數包括:map,filter,flatMap,groupByKey,reduceByKey,aggregateByKey,pipe和coalesce。
      行動:行動操作計算并返回一個新的值。當在一個RDD對象上調用行動函數時,會在這一時刻計算全部的數據處理查詢并返回結果值。
      行動操作包括:reduce,collect,count,first,take,countByKey以及foreach。
  • 共享變量(Shared varialbes)
    • 廣播變量(Broadcast variables)
    • 累加器(Accumulators)
  • Master/Worker/Driver/Executor
    原理圖
    • Master:1. 接受Worker的注冊請求,統籌記錄所有Worker的CPU、Memory等資源,并跟蹤Worker結點的活動狀態;2. 接受Driver中App的注冊請求(這個請求由Driver端的Client發出),為App在Worker上分配CPU、Memory資源,生成后臺Executor進程;之后跟蹤Executor和App的活動狀態。
    • Worker:負責接收Master的指示,為App創建Executor進程。Worker在Master和Executor之間起著橋梁作用,實際不會參與計算工作。
    • Driver:負責用戶側邏輯處理。
    • Executor:負責計算,接受并執行由App劃分的Task任務,并將結果緩存在本地內存或磁盤。

Spark部署

關(guan)于Spark的部署網上(shang)相關(guan)資料很(hen)多,這里(li)進行歸納整理

部署環境

  • Ubuntu 14.04LTS
  • Hadoop:2.7.0
  • Java JDK 1.8
  • Spark 1.6.1
  • Scala 2.11.8

Hadoop安裝

由于Spark會利用HDFS和YARN,所以需要提前配置Hadoop,配置教程可以參考:

Spark安裝

在安裝好Hadoop的基礎上,搭建Spark,配置教程參考:

scala安裝

Scala作為編(bian)寫Spark的源生語(yu)(yu)(yu)言(yan)(yan),更(geng)新速度和(he)支持情(qing)況肯定是最好(hao)的,而另一方面(mian)Scala本(ben)身(shen)語(yu)(yu)(yu)言(yan)(yan)中對(dui)于面(mian)向對(dui)象(xiang)和(he)函數式(shi)編(bian)程兩(liang)種思(si)想的糅(rou)合,使得該(gai)語(yu)(yu)(yu)言(yan)(yan)具有很多炫酷的語(yu)(yu)(yu)法糖,所以在使用(yong)Spark的過程中我采用(yong)了(le)Scala語(yu)(yu)(yu)言(yan)(yan)進行開發。

  • Scala最終編譯成字節碼需要運行在JVM中,所以需要依托于jdk,需要
  • Eclipse作為一款開發Java的IDE神器,在Scala中當然也可以使用,有兩種方式:
    • Eclipse->Help->Install New Software
    • 下載官網已經提供的集成好的
  • 基于以上兩步已經可以進行Scala開發,需要用到Scala自帶的SBT編譯的同學可以裝下Scala官網,本人一直使用Maven進行包管理就延續Maven的使用

簡單示例:WordCount(Spark Scala)

  • 開發IDE:Eclipse Scala
  • 包管理:Maven
  • 開發語言:Scala

創建Maven項目


  1. 跳過archetype項目模板的選擇
  2. 下載
  3. 對maven項目添加Scala屬性:
    Right click on project -> configure - > Add Scala Nature.
  4. 調整下Scala編譯器的版本,與Spark版本對應:
    Right click on project- > Go to properties -> Scala compiler -> update Scala installation version to 2.10.5
  5. 從Build Path中移除Scala Library(由于在Maven中添加了Spark Core的依賴項,而Spark是依賴于Scala的,Scala的jar包已經存在于Maven Dependency中):
    Right click on the project -> Build path -> Configure build path and remove Scala Library Container.
  6. 添加package包com.spark.sample
  7. 創建Object WordCount和SimpleCount,用來作為Spark的兩個簡單示例

Spark Sample


原理如下圖:

參考文獻:

posted @ 2016-06-13 22:38  xlturing  閱讀(3051)  評論(1)    收藏  舉報