天天看點

新手入門:Spark 部署實戰入門

spark簡介

整體認識

apache spark是一個圍繞速度、易用性和複雜分析建構的大資料處理架構。最初在2009年由加州大學伯克利分校的amplab開發,并于2010年成為apache的開源項目之一。

spark在整個大資料系統中處于中間偏上層的地位,如下圖,對hadoop起到了補充作用:

基本概念

fork/join架構是java7提供了的一個用于并行執行任務的架構, 是一個把大任務分割成若幹個小任務,最終彙總每個小任務結果後得到大任務結果的架構。

新手入門:Spark 部署實戰入門

第一步分割任務。首先我們需要有一個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部署

關于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項目

新手入門:Spark 部署實戰入門

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.

新手入門:Spark 部署實戰入門

原理如下圖:

新手入門:Spark 部署實戰入門

參考文獻:

作者:張景龍 暢移(上海)資訊科技有限公司cto,ccfyocsef上海委員,京東今夜酒店特價app技術創始者和首任cto,中國第一代智能手機開發者。