入門
- clone代碼
從github上的spark-jobserver工程clone代碼到本地 - 編譯
- 需要將工程根目錄下的config文件刪除
- 將文件夾job-server/config拷貝到工程根目錄下
- 將local.conf.template/local.sh.template重命名爲locao.conf/local.sh
- 配置環境
export JAVA_HOME=/d/java/jdk1.7.0_75
`</li>
bin/server_package.sh local`(需要sbt環境)
<li>運行編譯命令- 打好的包位於:/tmp/job-server/job-server.tar.gz(打包位置,可以在bin/server_package.sh中設置WORK_DIR,來改變)
- 將job-server.tar.gz上傳到linux系統中
- 配置
- local.conf
- master: 指定spark的master
- jobserver: server的配置
- settings.sh
- port配置
- server路徑
- log路徑
- spark的home/conf路徑等配置
- server_start.sh
- 此腳本,使用
spark-submit
提交作業 - spark的相關配置信息,可以在此腳本里配置
- 運行/停止server
- ./server_start.sh
- ./server_stop.sh
- 日誌
- setting.sh中配置的
LOG_DIR
,是日誌所在位置 - server_start.log
- 本地server日誌
- spark-job-server.log
- spark的driver日誌
- setting.sh中配置的
- 使用
- 初始化spark的context
- 例
curl -d "" 'ip:port/contexts/contextName?context-factory=spark.jobserver.context.SQLContextFactory'
ip:port
:爲spark job server啓動的機器和端口contextName
:context的名字,後面執行操作
需要用到,還可以在jobTracker頁面,通過此名字搜索運行的applicationcontext-factory
:初始化context
spark.jobserver.context.SQLContextFactory
用來初始化SQLContextspark.jobserver.context.HiveContextFactory
用來初始化HiveContextspark.jobserver.context.DefaultSparkContextFactory
用來初始化SparkContextspark.jobserver.context.StreamingContextFactory
用來初始化StreamingContext
- 例
- 上傳jar包,初始化appName
- 例
curl --data-binary @/xx/xx/job-server-extras_2.10-0.7.0-SNAPSHOT.jar ip:port/jars/appName
- @指定本地資源路徑
jars/appName
指定appName,後面執行操作
需要用到
- 例
- 執行操作(sql等)
- 例
curl -d "sql=\"show databases\"" 'ip:port/jobs?appName=xxx&classPath=spark.jobserver.SqlTestJob&context=contextName&sync=true'
- post方式將數據”sql=xxx”傳遞給server
appName
:步驟2中初始化的值classPath
:用戶可以自定義,實現接口spark.jobserver.api.SparkJobBase
的方法runJob
即可
- spark.jobserver.SqlTestJob實現邏輯
- 拿到傳入的sql
SQLContext.sql(sql).collect()
執行
context
:指定提交到的contextName,步驟1中初始化的值sync
:是否爲同步模式
- true:會等待一段時間,如果超過這個時間,沒有返回,則返回json格式,有報錯信息
- 例:
{"status": "ERROR", "result": {"message": "Ask timed out on [Actor[akka://JobServer/user/context-supervisor/hive-context-test#91063205]] after[10000 ms]", "errorClass": "akka.pattern.AskTimeoutException", "stack": ["akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:334)", ..."]}
- false:直接返回json,包括信息如下:
- duration
- 作業完成時,則爲作業總共佔用時間,
xx secs
- 作業未完成,則爲”Job not done yet”
- 作業完成時,則爲作業總共佔用時間,
- classPath:指定的classPath
- startTime:作業提交時間
- context:提交到的context的name
- status
- ”STARTED”:開始執行
- jobId:spark運行的jobId
- 例
- 獲取返回結果
- 例
curl -v 'ip:port/jobs/jobId'
- 查詢jobId的結果
- duration:作業運行時間
- result:步驟3中自定義的classPath的返回結果
- status
- FINISHED
- ERROR
- RUNNING
- 等
- 例:
{ "duration": "24.463 secs", "classPath": "spark.jobserver.HiveTestJob", "startTime":"2016-11-17T11:01:09.249+08:00", "context": "hive-context-test", "result": ["[2,www]",...],"status": "FINISHED", "jobId": "5bc87741-c289-4f13-8f5c-de044256fcc7"}
- 例
- 初始化spark的context
- 其他使用
- context操作
- 獲取:
curl http://host:port/contexts
- 刪除:
curl -X DELETE http://host:port/contexts/name
- kill所有的context,並reload配置中的:
curl -X PUT http://host:port/contexts?reset=reboot
- job操作
- 獲取:
curl http://host:port/jobs
- kill:
curl -X DELETE http://host:port/jobs/jobId