spark job server使用方法

入門

  • 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>
      <li>運行編譯命令
      bin/server_package.sh local`(需要sbt環境)
    • 打好的包位於:/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日誌
  • 使用
    1. 初始化spark的context
      • curl -d "" 'ip:port/contexts/contextName?context-factory=spark.jobserver.context.SQLContextFactory'
      • ip:port:爲spark job server啓動的機器和端口
      • contextName:context的名字,後面執行操作需要用到,還可以在jobTracker頁面,通過此名字搜索運行的application
      • context-factory:初始化context
        • spark.jobserver.context.SQLContextFactory用來初始化SQLContext
        • spark.jobserver.context.HiveContextFactory用來初始化HiveContext
        • spark.jobserver.context.DefaultSparkContextFactory用來初始化SparkContext
        • spark.jobserver.context.StreamingContextFactory用來初始化StreamingContext
    2. 上傳jar包,初始化appName
      • curl --data-binary @/xx/xx/job-server-extras_2.10-0.7.0-SNAPSHOT.jar ip:port/jars/appName
      • @指定本地資源路徑
      • jars/appName指定appName,後面執行操作需要用到
    3. 執行操作(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
    4. 獲取返回結果
      • 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"}
  • 其他使用
    • 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

參考文獻

spark job server git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章