官术网_书友最值得收藏!

第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 集群相關基礎概念

主站蜘蛛池模板: 安多县| 阿克陶县| 梨树县| 张北县| 克山县| 渑池县| 土默特左旗| 汝阳县| 宿州市| 正镶白旗| 克什克腾旗| 泽普县| 瓦房店市| 信丰县| 镇原县| 饶阳县| 沧州市| 平塘县| 连州市| 乌鲁木齐市| 化隆| 德惠市| 会理县| 咸宁市| 桦川县| 宜昌市| 屏东市| 崇明县| 崇信县| 繁昌县| 锡林浩特市| 淮南市| 琼海市| 芦山县| 长宁区| 德惠市| 巴彦县| 津市市| 丰宁| 乐至县| 汉中市|