spark簡介
整體認識
apache spark是一個圍繞速度、易用性和複雜分析建構的大資料處理架構。最初在2009年由加州大學伯克利分校的amplab開發,并于2010年成為apache的開源項目之一。
spark在整個大資料系統中處于中間偏上層的地位,如下圖,對hadoop起到了補充作用:
基本概念
fork/join架構是java7提供了的一個用于并行執行任務的架構, 是一個把大任務分割成若幹個小任務,最終彙總每個小任務結果後得到大任務結果的架構。
第一步分割任務。首先我們需要有一個fork類來把大任務分割成子任務,有可能子任務還是很大,是以還需要不停的分割,直到分割出的子任務足夠小。
第二步執行任務并合并結果。分割的子任務分别放在雙端隊列裡,然後幾個啟動線程分别從雙端隊列裡擷取任務執行。子任務執行完的結果都統一放在一個隊列裡,啟動一個線程從隊列裡拿資料,然後合并這些資料。
具體可參考fork/join
核心概念
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
spark部署
關于spark的部署網上相關資料很多,這裡進行歸納整理
部署環境
ubuntu 14.04lts
hadoop:2.7.0
java jdk 1.8
spark 1.6.1
scala 2.11.8
hadoop安裝
由于spark會利用hdfs和yarn,是以需要提前配置hadoop,配置教程可以參考:
setting up aapache hadoop 2.7 single node on ubuntu 14.04
hadoop安裝教程_單機/僞分布式配置_hadoop2.6.0/ubuntu14.04
spark安裝
在安裝好hadoop的基礎上,搭建spark,配置教程參考:
spark快速入門指南 – spark安裝與基礎使用
scala安裝
scala作為編寫spark的源生語言,更新速度和支援情況肯定是最好的,而另一方面scala本身語言中對于面向對象和函數式程式設計兩種思想的糅合,使得該語言具有很多炫酷的文法糖,是以在使用spark的過程中我采用了scala語言進行開發。
scala最終編譯成位元組碼需要運作在jvm中,是以需要依托于jdk,需要部署jdk
eclipse作為一款開發java的ide神器,在scala中當然也可以使用,有兩種方式:
基于以上兩步已經可以進行scala開發,需要用到scala自帶的sbt編譯的同學可以裝下scala官網下載下傳位址,本人一直使用maven進行包管理就延續maven的使用
簡單示例:wordcount(spark scala)
開發ide:eclipse scala
包管理:maven
開發語言:scala
建立maven項目
right click on project -> configure - > add scala nature.
right click on project- > go to properties -> scala compiler -> update scala installation version to 2.10.5
right click on the project -> build path -> configure build path and remove scala library container.
原理如下圖:
參考文獻:
作者:張景龍 暢移(上海)資訊科技有限公司cto,ccfyocsef上海委員,京東今夜酒店特價app技術創始者和首任cto,中國第一代智能手機開發者。