LoginSignup
6
5

More than 5 years have passed since last update.

Bluemix上でSparkアプリケーションを動かすよ

Last updated at Posted at 2016-04-21

bluemixのSpark周りがしれっと更新されてるみたい。
* sparkのverson 1.6.0に更新
* notebookだけじゃなくてアプリケーションとして.jarの実行が可能に
* notebook実行時に右のenvironmentからjob historyが見れるように

ってことで、sparkのversionもv1.6.0に更新されてました。
今までのインスタンスから新しいnotebookを作成すると1.4.1、
新しいインスタンスを作成してから新しいnotebookを作成すると1.6.0の模様

バッチ実行はclientがLinuxでしかまだ動作しないって公式は書いてありますが、macでも動きます。
これでSpark Streamingの実行も簡単にできるようになりました。

spark-submit.shをダウンロード

bluemix上でSparkを動作させるためのシェルをダウンロードする必要があります。
spark-submit.sh

VCAPファイルを作成

vcap.jsonの名称でサービス資格情報をjsonファイルに保存しておきます。

{
  "credentials": {
    "tenant_id": "XXXXXXXXXXX",
    "tenant_id_full": "XXXXXXXXXXXXXX",
    "cluster_master_url": "https://XXXXXXXXX:8443/",
    "instance_id": "XXXXXXXXXXXXXXXXXX",
    "tenant_secret": "XXXXXXXXXXXXXXXXX",
     "plan":"ibm.SparkService.PayGoPersonal"
  }
}

ちなみにこの情報はSparkのダッシュボードのメニューからサービス資格情報で取得できます。
下記の図のところから取得可能
スクリーンショット 2016-04-21 15.56.21.png

作ったSparkのアプリケーションの実行

/spark-submit.sh --vcap ./vcap.json --deploy-mode cluster --class com.y.t.p.sample --master https://169.54.219.20 target/scala-2.11/xxxxxxx.jar param1 param2

こんな感じで実行すると勝手に.jarのアップロードが始まるのでしばし待つ。

アップロードが終わると下のようにポーリングしてくれる
スクリーンショット 2016-04-21 18.58.16.png

数回ポーリングし終わると、stderrとstdoutのダウンロードを勝手にやってくれて終わり。
スクリーンショット 2016-04-21 19.01.20.png

job may still be runnningという文言でて終わってます。
statusを取得したい場合はこちら的なメッセージも一緒に吐いてくれてる

実行中のアプリケーションのstatus取得

下記を実行

./spark-submit.sh --status driver-20160421045627-0000-6fa7a1db-b58a-4bbf-a277-81bb8d25b0f7 --vcap ./vcap.json --master https://169.54.219.20

ちゃんと実行されてるのが見て取れる
スクリーンショット 2016-04-21 19.04.17.png

bluemixのダッシュボードとかの画面も確認して見たけれども、特に実行中のアプリケーションに関する情報は表示されない模様・・・え”、コマンド毎回叩くの??

アプリケーションの終了

終了する場合はkillする

./spark-submit.sh --kill driver-20160421045627-0000-6fa7a1db-b58a-4bbf-a277-81bb8d25b0f7 --vcap ./vcap.json --master https://169.54.219.20

スクリーンショット 2016-04-21 19.09.20.png

kill後、再度statusを確認するとちゃんとKILLEDになってる
スクリーンショット 2016-04-21 19.10.10.png

ファイル周り

Spark as a Service にはディフォルトでオブジェクトストレージがついてきますが、
今までのnotebookでの指定の仕方から変更が必要な場合があります。

公式ページの注意書き

Restriction: If your application accesses Object Store using credentials, do not include spark in the Swift URI. For example: Instead of sc.textFile("swift://notebooks.spark/2015_small.csv”), use sc.textFile("swift://notebooks.keystone/2015_small.csv”).

あと、はまりそうなのが、今までnotebookでSparkConfの設定を飛ばして書いてる場合。
アプリケーションとして実行するときはきちんとSparkConfの設定が必要です。

以下参考までに

def setConfig(name:String, settings:scala.collection.mutable.HashMap[String,String]) : SparkConf = {
    val pfx = "fs.swift.service." + name
    val i = settings.toIterator
    val conf = sc.getConf
    for(v <- i){
        conf.set(pfx + v._1,v._2)
    }
    conf.set(pfx + "auth.endpoint.prefix", "endpoints")
}
var c2 = scala.collection.mutable.HashMap[String, String](
  "auth_uri"->"",
  "global_account_auth_uri"->"",
  "username"->"aaa",
  "password"->"bbb",
  "auth_url"->"https://identity.open.softlayer.com",
  "project"->"ccc",
  "project_id"->"ddd",
  "region"->"dallas",
  "user_id"->"eee",
  "domain_id"->"fff",
  "domain_name"->"aaa",
  "filename"->"xxx.csv",
  "container"->"objectstore",
  "tenantId"->"s76f-aaa"
)
val conf = setConfig("sample",c2)

設定内容はご自身の環境のものに置き換えてください。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5