1. 程式人生 > >Spark jobServer搭建+提交作業執行

Spark jobServer搭建+提交作業執行

安裝scala

根據spark版本,在官網下載對應的unix版tar檔案
配置環境變數

export PATH="$PATH:/usr/scala-2.10.6/bin"

立即生效命令

source /etc/profile

部署sbt

配置環境變數

export PATH="$PATH:/usr/sbt/"

建立啟動sbt的指令碼檔案
在sbt目錄下,建立sbt檔案

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS
-jar /usr/sbt/bin/sbt-launch.jar "[email protected]"

檢視sbt版本,第一次啟動會自動下載檔案

sbt sbt-version

搭建jobServer

在github上下載對應spark版本的jobServer原始碼
在config目錄下,重新命名template(模板)檔案,local.conf 和 local.sh
修改local.sh中的配置
(INSTALL_DIR: jobServer安裝路徑)
這裡寫圖片描述

bin目錄下執行

./server_package.sh local

編譯需要較長時間,編譯成功後,在生成的job-server目錄下啟動

./server_start.sh

在8090埠檢視

這裡寫圖片描述

打包wordcount並提交執行

在原始碼目錄下,打包job-server-tests

sbt job-server-tests/package

上傳jar包,作為一個app,名為test

curl --data-binary @/usr/spark-jobserver-0.6.2/job-server-tests/target/scala-2.10/job-server-tests_2.10-0.6.2.jar master:8090/jars/test

臨時context方式(作業執行完成後刪除context)

非同步方式提交任務
jobserver會建立自己的SparkContext,會返回一個jobID供隨後的查詢

# curl -d "input.string = a b c a b see" 'localhost:8090/jobs?appName=test&classPath=spark.jobserver.WordCountExample'
{
  "status": "STARTED",
  "result": {
    "jobId": "2e943174-63e3-41f2-bf4e-e56ff85169a9",
    "context": "6d262fce-spark.jobserver.WordCountExample"
  }
}

通過jobid查詢結果

# curl master:8090/jobs/2e943174-63e3-41f2-bf4e-e56ff85169a9
{
  "duration": "0.278 secs",
  "classPath": "spark.jobserver.WordCountExample",
  "startTime": "2017-07-19T01:05:12.863-04:00",
  "context": "6d262fce-spark.jobserver.WordCountExample",
  "result": {
    "a": 2,
    "b": 2,
    "see": 1,
    "c": 1
  },
  "status": "FINISHED",
  "jobId": "2e943174-63e3-41f2-bf4e-e56ff85169a9"
}

同步方式提交任務(新增sync引數,值為true)

curl -d "input.string = a b c a b see" 'master:8090/jobs?appName=test&classPath=spark.jobserver.WordCountExample&sync=true'
{
  "result": {
    "a": 2,
    "b": 2,
    "see": 1,
    "c": 1
  }
}

常駐context方式

建立一個常駐context,叢集為其分配資源,一直處於執行狀態(jobserver重啟會終止context,釋放資源)

curl -d "" 'master:8090/contexts/test-context?num-cpu-cores=4&memory-per-node=512m'

在context中執行任務(同步)

curl -d "input.string = a b c a b see" "localhost:8090/jobs?appName=test&classPath=spark.jobserver.WordCountExample&context=test-context&sync=true"