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

圖2-1 Spark選擇與下載步驟圖
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操作系統為例,命令如下:
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,否則只能在下次用戶重新登錄加載環境變量時生效。
第三步,測試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)執行打包命令:
./sbt/sbt package
如果底層存儲采用HDFS,而其版本又和Spark默認的版本不一致,則需要修改Spark根目錄所在的project/SparkBuild.scala文件中的HADOOP_VERSION,然后重新編譯。執行重新編譯命令:
./sbt/sbt clean compile
從源碼構建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編譯流程如下:
1)Maven下載:http://maven.apache.org/;
2)Maven配置:export M2_HOME=$your_path; export PATH=$M2_HOME/bin:$PATH;
3)Maven編譯Spark。
在任意目錄下以命令行的形式設置Maven參數。其中,-Xmx為Java虛擬機堆內存最大允許值,-XX:MaxPermSize為最大允許的非堆內存大小,-XX:ReservedCodeCacheSize為緩存大小。
在Spark源碼目錄(默認spark-1.5.0)下,編譯參數hadoop.version可根據具體版本修改,編譯Nexus依賴可以通過pom.xml文件修改,編譯Spark運行環境命令如下:
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 集群部署概述
在進行Spark編程之前,我們要進行Spark集群部署,目前與Spark相關的集群環境,也就是集群管理器(cluster manager),主要包括:Spark自帶的Standalone資源管理器、Mesos集群管理器和Hadoop YARN資源管理器。
表2-1總結了集群部署和運行過程中,可能會使用到的集群相關基礎概念,可以對集群部署和運行有個更深刻的理解。
表2-1 集群相關基礎概念

- Python金融大數據分析(第2版)
- MySQL從入門到精通(第3版)
- 文本挖掘:基于R語言的整潔工具
- R數據科學實戰:工具詳解與案例分析(鮮讀版)
- Enterprise Integration with WSO2 ESB
- Creating Dynamic UIs with Android Fragments(Second Edition)
- 大話Oracle Grid:云時代的RAC
- 基于OPAC日志的高校圖書館用戶信息需求與檢索行為研究
- “互聯網+”時代立體化計算機組
- 高維數據分析預處理技術
- SQL應用及誤區分析
- 淘寶、天貓電商數據分析與挖掘實戰(第2版)
- 跨領域信息交換方法與技術(第二版)
- R Object-oriented Programming
- Web Services Testing with soapUI