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

第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ǔ)概念

主站蜘蛛池模板: 民勤县| 麻阳| 武汉市| 衡水市| 邯郸市| 武宣县| 上犹县| 桃园县| 连江县| 东莞市| 肥东县| 枣阳市| 广元市| 伽师县| 琼海市| 铜梁县| 昌宁县| 巫溪县| 大理市| 余干县| 濉溪县| 墨竹工卡县| 广宗县| 长乐市| 开封县| 阆中市| 安化县| 蒲江县| 保德县| 托克托县| 科技| 尉犁县| 江源县| 永州市| 思南县| 柳州市| 鲜城| 南康市| 堆龙德庆县| 靖边县| 岳阳县|