- Spark核心技術(shù)與高級應(yīng)用
- 于俊等
- 329字
- 2019-01-01 01:24:31
第2章
Spark部署和運行
合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。
——《道德經(jīng)》第六十四章
合抱的粗木,是從細(xì)如針毫?xí)r長起來的;九層的高臺,是一筐土一筐土筑起來的;千里的行程,是一步又一步邁出來的。那么,Spark高手之路,是從Spark部署和運行開始的,只要堅持,就一定會有收獲!
對于大部分想學(xué)習(xí)Spark的人而言,如何構(gòu)建穩(wěn)定的Spark集群是學(xué)習(xí)的重點之一,為了解決構(gòu)建Spark集群的困難,本章內(nèi)容從簡入手,循序漸進(jìn),主要包括:部署準(zhǔn)備工作、本地模式部署、獨立模式部署、YARN模式部署,以及基于各種模式的應(yīng)用程序運行。
很多優(yōu)秀的集成部署工具值得推薦,如cloudera manager,但是本章重點講解手動部署,借以加深對部署的理解。部署完畢,可以直接體驗一下運行的快感,在自我陶醉的同時,細(xì)細(xì)品味過程中的細(xì)節(jié)。
2.1 部署準(zhǔn)備
部署準(zhǔn)備工作包括下載Spark、編譯Spark和集群部署,接下來會一一闡述。
2.1.1 下載Spark
無論如何部署Spark,首先必須下載合適的版本。Spark提供源碼壓縮包和編譯好的二進(jìn)制文件壓縮包。本書的內(nèi)容主要以Spark 1.5.0版本為基礎(chǔ),熟悉SBT和Maven編譯的讀者,建議嘗試自己編譯適合的版本。
Spark下載路徑:http://spark.apache.org/downloads.html。
Spark下載步驟如下:
1)選擇Spark發(fā)行版本,截止到本書編寫時最新版本為1.5.0;
2)選擇發(fā)行包類型,可以選擇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版本的選擇與下載過程。

圖2-1 Spark選擇與下載步驟圖
2.1.2 編譯Spark版本
Spark源碼編譯主要包括:使用SBT編譯和使用Maven編譯兩種方式,編譯的前置條件是配置Java環(huán)境變量。
1.配置Java環(huán)境變量
如果沒有配置Java環(huán)境,需要先配置Java環(huán)境變量,從Oracle官網(wǎng)下載Java版本。
配置步驟如下:
第一步,安裝Java程序,主要包括三種方式:
1)下載安裝包進(jìn)行安裝;
2)通過軟件源執(zhí)行安裝命令進(jìn)行安裝;
3)直接復(fù)制相同操作系統(tǒng)的安裝文件目錄(集群部署時一般采取這種模式)。
三種安裝方式網(wǎng)上都有詳細(xì)的參考資料。
第二步,配置Java環(huán)境,使用vim命令在/etc/prof ile文件中增加變量,以Ubuntu 12.04操作系統(tǒng)為例,命令如下:
sudo vim /etc/profile export JAVA_HOME=$YOUR_JAVA_HOME#$YOUR_JAVA_HOME為實際安裝路徑 export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
如果想立即生效,可以通過運行source /etc/prof ile,否則只能在下次用戶重新登錄加載環(huán)境變量時生效。
第三步,測試Java環(huán)境:
打開終端,輸入java -version。如若有顯示Java的版本信息,則表示安裝成功。
注意
關(guān)于JDK的環(huán)境變量配置,一般包括四種方式:
1) 在用戶環(huán)境變量文件/etc/prof ile文件中添加變量,需要具有root權(quán)限才能進(jìn)行配置,對Linux下所有用戶長期有效。
2) 在用戶目錄下的.prof ile文件中增加變量,對當(dāng)前用戶長期生效。
3) 直接運行export命令定義變量,只對當(dāng)前shell臨時有效。在shell的命令行下直接使用[export變量名=變量值]定義變量,該變量只在當(dāng)前的shell或其子shell下是有效的,若shell關(guān)閉,變量則失效,再打開新shell時就沒有這個變量,若需要使用,則還需要重新定義。
4) 在系統(tǒng)環(huán)境變量/etc/environment中進(jìn)行配置。
2.使用SBT編譯
Spark使用SBT(simple build tool,簡單編譯工具)進(jìn)行編譯,編譯源碼時需要花費一些時間,如果沒有安裝sbt,Spark構(gòu)建腳本將會為你下載正確的SBT版本。下載好Spark源碼之后,在源碼目錄(默認(rèn)spark-1.5.0)執(zhí)行打包命令:
./sbt/sbt package
如果底層存儲采用HDFS,而其版本又和Spark默認(rèn)的版本不一致,則需要修改Spark根目錄所在的project/SparkBuild.scala文件中的HADOOP_VERSION,然后重新編譯。執(zhí)行重新編譯命令:
./sbt/sbt clean compile
從源碼構(gòu)建Spark將花費一些時間,當(dāng)編譯過程停頓很長時間沒有反應(yīng)之后,停止,然后重新執(zhí)行./sbt/sbt package打包命令。
其中,Spark的SBT文件工程結(jié)構(gòu)中包含以下文件:
□ project——工程定義文件;
□ project/build/.scala——主要的工程定義文件;
□ project/build.properties——工程,SBT以及Scala版本定義;
□ src/main——應(yīng)用代碼目錄,不同的子目錄名稱表示不同的編程語言(例如,src/main/scala、src/main/java);
□ src/main/resources——你想添加到Jar包里的靜態(tài)文件(如日志配置文件);
□ lib_managed——工程所依賴的Jar文件存放路徑,在SBT更新時添加到該目錄;
□ target——最終生成的文件存放的目錄(例如,生成的thrift代碼、class文件、Jar文件)。
3.使用Maven編譯
Maven是一個采用純Java編寫的開源項目管理工具。Maven采用POM(Project Object Model,項目對象模型)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM. xml的文件中,通過該文件,Maven可以管理項目的整個聲明周期,包括編譯、構(gòu)建、測試、發(fā)布、報告等。目前Apache下絕大多數(shù)項目都已經(jīng)采用Maven進(jìn)行管理,Maven本身還支持多種插件,可以更加方便靈活地控制項目。
使用Maven編譯流程如下:
1)Maven下載:http://maven.apache.org/;
2)Maven配置:export M2_HOME=$your_path; export PATH=$M2_HOME/bin:$PATH;
3)Maven編譯Spark。
在任意目錄下以命令行的形式設(shè)置Maven參數(shù)。其中,-Xmx為Java虛擬機(jī)堆內(nèi)存最大允許值,-XX:MaxPermSize為最大允許的非堆內(nèi)存大小,-XX:ReservedCodeCacheSize為緩存大小。
在Spark源碼目錄(默認(rèn)spark-1.5.0)下,編譯參數(shù)hadoop.version可根據(jù)具體版本修改,編譯Nexus依賴可以通過pom.xml文件修改,編譯Spark運行環(huán)境命令如下:
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m" mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package
2.1.3 集群部署概述
在進(jìn)行Spark編程之前,我們要進(jìn)行Spark集群部署,目前與Spark相關(guān)的集群環(huán)境,也就是集群管理器(cluster manager),主要包括:Spark自帶的Standalone資源管理器、Mesos集群管理器和Hadoop YARN資源管理器。
表2-1總結(jié)了集群部署和運行過程中,可能會使用到的集群相關(guān)基礎(chǔ)概念,可以對集群部署和運行有個更深刻的理解。
表2-1 集群相關(guān)基礎(chǔ)概念

- Redis使用手冊
- GitHub Essentials
- SQL Server 2016 數(shù)據(jù)庫教程(第4版)
- Game Development with Swift
- MySQL從入門到精通(第3版)
- 業(yè)務(wù)數(shù)據(jù)分析:五招破解業(yè)務(wù)難題
- 數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程(Visual FoxPro 9.0)
- Spark核心技術(shù)與高級應(yīng)用
- Ceph源碼分析
- 基于Apache CXF構(gòu)建SOA應(yīng)用
- 金融商業(yè)算法建模:基于Python和SAS
- PostgreSQL指南:內(nèi)幕探索
- Unreal Engine Virtual Reality Quick Start Guide
- 大數(shù)據(jù)與機(jī)器學(xué)習(xí):實踐方法與行業(yè)案例
- 數(shù)據(jù)應(yīng)用工程:方法論與實踐