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

3.3 獨立應用程序編程

不同于使用Spark Shell自動初始化SparkContext的例子,獨立應用程序需要初始化一個SparkContext作為程序的一部分,然后將一個包含應用程序信息的SparkConf對象傳遞給SparkContext構造函數。

接下來編寫簡單應用程序SimpleApp,并描述一些簡單的編碼流程。

3.3.1 創建SparkContext對象

編寫一個Spark程序,首先創建SparkConf對象,該對象包含應用的信息。SparkConf對象構建完畢,需要創建SparkContext對象,該對象可以訪問Spark集群。

          // 創建SparkConf對象
          val conf = new SparkConf().setAppName("Simple Application")
          // 創建SparkContext對象
          val sc = new SparkContext(conf)

3.3.2 編寫簡單應用程序

一個常見的Hadoop數據流模式是MapReduce,Spark可以輕易地實現MapReduce數據流,我們通過Spark API創建一個簡單的Spark應用程序SimpleApp.scala。

          import org.apache.spark.SparkContext
          import org.apache.spark.SparkContext._
          import org.apache.spark.SparkConf
          object SimpleApp {
          def main(args: Array[String]) {
          val logFile = "$YOUR_SPARK_HOME/README.md" //測試文件
          val conf = new SparkConf().setAppName("Simple Application")
          val sc = new SparkContext(conf)
          val logData = sc.textFile(logFile, 2).cache()
          val numAs = logData.filter(line =>line.contains("a")).count()
          val numBs = logData.filter(line =>line.contains("b")).count()
          println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
              }
          }

這個程序統計了Spark的README.md中含有“a”的行數和含有“b”的行數。實際需要用Spark的安裝路徑替換YOUR_SPARK_HOME。

3.3.3 編譯并提交應用程序

可以采用IDEA生成Jar包的方式,也可以采取sbt或者mvn的方式打成Jar包。以sbt package為例,創建一個包含應用程序代碼的Jar包。

一旦用戶的應用程序被打包,就可以使用$SPARK_HOME./bin/spark-submit腳本啟動應用程序。spark-submit腳本負責建立Spark的類路徑和相關依賴,并支持不同的集群管理(Local、Standalone、YARN)和部署模式(Client、Cluster),通過提交參數進行區別。

1. 使用sbt打成Jar包

使用sbt打成Jar包過程如下:

            sbt package
            ...
            [info] Packaging {..}/{..}/target/scala-2.10/simple-project_2.10-1.0.jar

2. 應用程序提交模板

應用程序提交模板如下:

            ./bin/spark-submit \
                --class <main-class>\
                --master <master-url>\
                --deploy-mode <deploy-mode>\
                ... # other options
            <application-jar>\
            [application-arguments]

選項解釋說明:

□--class:應用程序入口位置,如org.apache.spark.examples.SparkPi。

□--master:集群的master的URL,如spark://xxx.xxx.xxx.xxx:7077;或使用local在本地單線程地運行,或使用local[N]在本地以N個線程運行。通常應該由運行local進行測試開始。

□--deploy-mode:集群部署模式,Cluster模式和Client模式(默認模式)。

□ application-jar:包含應用程序和所有依賴的Jar包的路徑。該URL必須是在集群中全局可見的,如一個hdfs://路徑或者一個在所有Worker節點都出現的f ile://路徑。

□ application-arguments:傳遞給主類的main函數的參數。

對于Python應用,在<application-jar>的位置傳入一個.py文件代替一個Jar包,并且以-py-f iles的方式在搜索路徑下加入Python.zip、.egg或.py文件。

注意

常見的部署策略是從同一物理位置,即同一個網關的服務器上提交應用程序。在這種設置中,采用Client模式比較合適。在Client模式中,Driver直接在用戶的spark-submit進程中啟動,應用程序的輸入和輸出連接到控制臺(console)。因此,這個模式對于涉及REPL(Read-Eval-Print Loop,“讀取-求值-輸出”循環)的應用程序尤其合適。

另外,如果你的應用程序是從遠離Worker機器的某臺機器上提交的(如你的筆記本電腦上),一般要用Cluster模式,使Drivers和Executors之間的網絡延遲最小化。(目前Standalone部署模式、Mesos集群模式和Python編寫的應用不支持Cluster模式。)

傳遞給Spark的Master URL可以是如表3-1所示的某個格式。

表3-1 Spark的Master URL格式及說明

3.以Local模式提交應用程序

以Local模式在4個CPU核上運行應用程序,命令如下:

          $ YOUR_SPARK_HOME/bin/spark-submit \
              --class "SimpleApp" \
              --master local[4] \
              target/scala-2.10/simple-project_2.10-1.0.jar
          ...

4.以Standalone模式提交應用程序

以Standalone模式運行應用程序,命令如下:

          ./bin/spark-submit \
              --class "SimpleApp" \
              --master spark://*.*.*.*:7077 \
              --executor-memory 2G \
              --total-executor-cores 10 \
          target/scala-2.10/simple-project_2.10-1.0.jar

5.以YARN模式提交應用程序

以YARN模式運行應用程序,命令如下:

          ./bin/spark-submit \
              --class "SimpleApp" \
              --master yarn-cluster \ # 也可以是 'yarn-client' 模式
                --executor-memory 2G \
                --num-executors 10 \
            target/scala-2.10/simple-project_2.10-1.0.jar
主站蜘蛛池模板: 神木县| 洞头县| 班戈县| 定襄县| 白山市| 岱山县| 郎溪县| 敖汉旗| 谢通门县| 克拉玛依市| 太仓市| 北票市| 浪卡子县| 兴山县| 连江县| 江达县| 京山县| 河北省| 凤山市| 灵川县| 通榆县| 泽库县| 莱西市| 庆安县| 曲阳县| 冷水江市| 淮南市| 辉南县| 万安县| 商南县| 威宁| 奎屯市| 遂溪县| 江北区| 柘城县| 松阳县| 萍乡市| 京山县| 龙门县| 安福县| 仙游县|