天天看點

《Spark核心技術與進階應用》——2.1節部署準備

本節書摘來自華章社群《spark核心技術與進階應用》一書中的第2章,第2.1節部署準備,作者于俊 向海 代其鋒 馬海平,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.1 部署準備

部署準備工作包括下載下傳spark、編譯spark和叢集部署,接下來會一一闡述。

2.1.1 下載下傳spark

無論如何部署spark,首先必須下載下傳合适的版本。spark提供源碼壓縮包和編譯好的二進制檔案壓縮包。本書的内容主要以spark 1.5.0版本為基礎,熟悉sbt和maven編譯的讀者,建議嘗試自己編譯适合的版本。

spark下載下傳步驟如下:

1)選擇spark發行版本,截止到本書編寫時最新版本為1.5.0;

2)選擇發行包類型,可以選擇source code[can build several hadoop versions]、pre-built for hadoop 2.6 and later、pre-built for hadoop 2.4 and later、pre-built for hadoop 2.3、pre-built for hadoop 1.x;

3)選擇下載下傳方式,包括direct download、select apache mirror;

4)點選標明的版本download spark。

圖2-1所示為spark 1.5.0版本的選擇與下載下傳過程。

《Spark核心技術與進階應用》——2.1節部署準備

2.1.2 編譯spark版本

spark源碼編譯主要包括:使用sbt編譯和使用maven編譯兩種方式,編譯的前置條件是配置java環境變量。

1.配置java環境變量

如果沒有配置java環境,需要先配置java環境變量,從oracle官網下載下傳java版本。

配置步驟如下:

第一步,安裝java程式,主要包括三種方式:

1)下載下傳安裝包進行安裝;

2)通過軟體源執行安裝指令進行安裝;

3)直接複制相同作業系統的安裝檔案目錄(叢集部署時一般采取這種模式)。

三種安裝方式網上都有詳細的參考資料。

第二步,配置java環境,使用vim指令在/etc/prof?ile檔案中增加變量,以ubuntu 12.04作業系統為例,指令如下:

如果想立即生效,可以通過運作source /etc/prof?ile,否則隻能在下次使用者重新登入加載環境變量時生效。

第三步,測試java環境:

打開終端,輸入java -version。如若有顯示java的版本資訊,則表示安裝成功。

關于jdk的環境變量配置,一般包括四種方式:

1) 在使用者環境變量檔案/etc/prof?ile檔案中添加變量,需要具有root權限才能進行配置,對linux下所有使用者長期有效。

2) 在使用者目錄下的.prof?ile檔案中增加變量,對目前使用者長期生效。

3) 直接運作export指令定義變量,隻對目前shell臨時有效。在shell的指令行下直接使用[export變量名=變量值]定義變量,該變量隻在目前的shell或其子shell下是有效的,若shell關閉,變量則失效,再打開新shell時就沒有這個變量,若需要使用,則還需要重新定義。

4) 在系統環境變量/etc/environment中進行配置。

2.使用sbt編譯

spark使用sbt(simple build tool,簡單編譯工具)進行編譯,編譯源碼時需要花費一些時間,如果沒有安裝sbt,spark建構腳本将會為你下載下傳正确的sbt版本。下載下傳好spark源碼之後,在源碼目錄(預設spark-1.5.0)執行打包指令:

如果底層存儲采用hdfs,而其版本又和spark預設的版本不一緻,則需要修改spark根目錄所在的project/sparkbuild.scala檔案中的hadoop_version,然後重新編譯。執行重新編譯指令:

從源碼建構spark将花費一些時間,當編譯過程停頓很長時間沒有反應之後,停止,然後重新執行./sbt/sbt package打包指令。

其中,spark的sbt檔案工程結構中包含以下檔案:

project——工程定義檔案;

project/build/.scala——主要的工程定義檔案;

project/build.properties——工程,sbt以及scala版本定義;

src/main——應用代碼目錄,不同的子目錄名稱表示不同的程式設計語言(例如,src/main/scala、src/main/java);

src/main/resources——你想添加到jar包裡的靜态檔案(如日志配置檔案);

lib_managed——工程所依賴的jar檔案存放路徑,在sbt更新時添加到該目錄;

target——最終生成的檔案存放的目錄(例如,生成的thrift代碼、class檔案、jar檔案)。

3.使用maven編譯

maven是一個采用純java編寫的開源項目管理工具。maven采用pom(project object model,項目對象模型)概念來管理項目,所有的項目配置資訊都被定義在一個叫做pom.xml的檔案中,通過該檔案,maven可以管理項目的整個聲明周期,包括編譯、建構、測試、釋出、報告等。目前apache下絕大多數項目都已經采用maven進行管理,maven本身還支援多種插件,可以更加友善靈活地控制項目。

使用maven編譯流程如下:

在任意目錄下以指令行的形式設定maven參數。其中,-xmx為java虛拟機堆記憶體最大允許值,-xx:maxpermsize為最大允許的非堆記憶體大小,-xx:reservedcodecachesize為緩存大小。

在spark源碼目錄(預設spark-1.5.0)下,編譯參數hadoop.version可根據具體版本修改,編譯nexus依賴可以通過pom.xml檔案修改,編譯spark運作環境指令如下:

2.1.3 叢集部署概述

在進行spark程式設計之前,我們要進行spark叢集部署,目前與spark相關的叢集環境,也就是叢集管理器(cluster manager),主要包括:spark自帶的standalone資料總管、mesos叢集管理器和hadoop yarn資料總管。

表2-1總結了叢集部署和運作過程中,可能會使用到的叢集相關基礎概念,可以對叢集部署和運作有個更深刻的了解。

表2-1 叢集相關基礎概念

《Spark核心技術與進階應用》——2.1節部署準備