65
201611日本アイ・ビー・エム株式会社 藤岡英典 Spark on z/OSAsakusa Frameworkによる 基幹バッチアプリケーション開発

Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Embed Size (px)

Citation preview

Page 1: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

2016年11月

日本アイ・ビー・エム株式会社藤岡英典

Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Page 2: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

2

免責事項この資料の掲載内容は作成者自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。

Page 3: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

3

IBM z Systems

本資料では、Spark on z/OSを活用して基幹バッチを開発・実行するソリューションの実際についてご紹介しています

(オープンソースAsakusa Framework*と組み合わせたソリューション)

Asakusa Framework

* ノーチラス・テクノロジーズ社の登録商標http://www.asakusafw.com/

Page 4: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Asakusa Frameworkとは

4

Asakusa Frameworkは、基幹向けの分散バッチアプリケーションを開発するためのフレームワークです。

現在のところ、Asakusa Frameworkはバッチ処理基盤にHadoop/Sparkを採用しています。Asakusa Frameworkでは、基幹向けのバッチアプリケーションの作成に主眼を置いた、独自のドメイン特化言語 (Domain Specific Language : DSL) である「Asakusa DSL」を利用してアプリケーションを作成します。Asakusa DSLはJavaプログラミング言語をベースに作成されており、Hadoopや分散処理特有のプログラムをほとんど記述することなく、 シンプルなJavaのプログラムの組み合せで複雑なHadoop/Spark上のアプリケーションを作成することができます。

基幹バッチシステムに必要な開発環境・実行環境・運用環境を実装しているため、Asakusa Frameworkを使えば、複雑な業務処理もHadoop/Sparkを意識せずに開発可能です。

Page 5: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Asakusa Framework 参考資料

ドキュメント– http://docs.asakusafw.com/

チュートリアル– http://docs.asakusafw.com/basic-tutorial/

– こちらのシナリオをベースに、Spark on z/OSでの動作検証を行っています

技術情報: バッチ設計と実装ガイド– http://www.asakusafw.com/techinfo/methodology.html

技術情報: 参考資料– http://www.asakusafw.com/techinfo/reference.html

5

Page 6: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

基幹バッチをSpark on z/OS上で実行する目的

6

スキルセキュリティ

処理の外出しを検討したが、基幹データなので外部システムにエクスポートしたくない。

これからはJavaのような、主流なスキルセットを持つ人財にも適した仕組みが必要。

コスト

CPU消費を抑えることで、月額のコストを削減できないか。

これらのビジネス課題を解決することを目指す

Page 7: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

IBM z/OS Platform for Apache Spark

USS上で稼働するApache Spark– 2016/3/25出荷開始。– Apache Spark単体(コミュニティ版)と、後述するMDSSとのセットになった製品版がある。

製品版には各種データソースへのアクセスが可能な Mainframe Data Service for Apache Spark

z/OS (MDSS) を同梱– 表中のデータソースに対するANSI 92レベルのSQLアクセスを提供

データソースにアクセスするためのJDBCドライバーを含む– Spark でDB2、IMS、VSAM、SAMなどのメインフレーム・データや分散システムのデータを利用する事が可能

7

メインフレーム・データ分散(Linux/Unix/Windows )上の

データベース

• IBM DB2

• IBM IMS

• VSAMファイル• シーケンシャルファイル• Software AG Adabas

• IBM DB2

• Apache Derby

• IBM Informix

• Oracle

• Microsoft SQL Server

・・・以降、Spark on z/OSと略記

Page 8: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Sparkとメインフレームデータを接続するMDSS

8

Spark

MDSS

Data Service Studio

(Eclipseツール)

DB2 IMS VSAM

z/OS

Windows PC

JDBC

JDBC

MDSSへJDBCで接続し、Virtual Tableに対してSQL発行する。実際のデータソースへのアクセスはMDSSが行う

SAMデータソース

Virtual Table

(データソースの投影)

Virtual tableとデータソースのマッピングを行う

Page 9: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Spark on z/OSと基幹オンラインの連携

9

z/OS

Sparkアプリケーション

Java z/OS (USS上で稼働)

Spark SQLSpark

StreamingMLlib

(機械学習)GraphX

Apache Spark Core

RDD RDD RDD RDD RDD

外部分散システムMDSS

OLTPアプリケーション

(CICS、IMS…)

Sparkを基幹業務の延長線上と考えオンラインから利用

DB2 IMS VSAM SAM

Page 10: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Asakusa FrameworkによってSparkは基幹バッチにも適用できる

10

z/OS

Java z/OS (USS上で稼働)

Spark SQLSpark

StreamingMLlib

(機械学習)GraphX

外部分散システム

バッチアプリケーション

OLTPアプリケーション

(CICS、IMS…)

Sparkを基幹業務の延長線上と考えバッチから利用

Sparkアプリケーション

Apache Spark Core

RDD RDD RDD RDD RDD

MDSS

DB2 IMS VSAM SAM

Page 11: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

コストについて

Q: CPUもメモリーも多く使いそうだけど・・・

A: z Systemsの戦略的に、高額にならないような仕掛けがあります。

11

Though the standard pricing for IBM System z Integrated Information Processors (zIIPs) and memory might not be competitive, as part of the IBM z/OS Platform for Apache Spark offering IBM is offering specially priced zIIPs and memory.

http://www.redbooks.ibm.com/redbooks/pdfs/sg248325.pdf

zIIP* という特殊なCPUとメモリーについて、Spark on z/OSの用途向けのオファリングがあります(詳細はお問い合わせください)

zIIPとは: Javaなどをオフロードすることができる、専用CPU。zIIPはソフトウェア課金の対象外なので、Spark実行時のコスト増大を抑えることができる。なお、zIIPは通常のCPU(GCP)と比較して割安に価格設定されている。

Page 12: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Asakusaとのバージョン整合性は厳密に合わせること

Q: Spark on z/OSのバージョンは?

A: 1.5.2です(2016/11現在)。これに対応するAsakusaのバージョンは0.7.6ですので、今回はこれを使用しました。

12

開発環境 実行環境

Asakusa

Framework

Asakusa

on SparkGradle Spark Hadoop

0.8.0 0.3.0 2.12 1.6.1 2.x

0.7.6 0.2.2 2.8 1.5.2 2.x

Spark 1.5.2に適合するAsakusa 0.7.6を使用

Page 13: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

その他、気になること

Q: Sparkはあることがわかったけれど、Hadoopは?

A: z/OSでは提供されていません。今回はAsakusa FrameworkをHadoopなしで実行します。

Q: では、HDFSに処理対象のデータは置かない?

A: 置きません。AsakusaのWindGate機能から、MDSS-JDBC経由のメインフレームデータ、もしくはUNIXファイルシステムのデータを使用します。

Q: データの文字コードは?

A: z/OSデータセットに関しては、EBCDICです。日本語の文字も扱うことができます。Unixファイルに関しては、Asakusaで入出力するデータはUTF-8です。

13

Page 14: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

バッチアプリ開発・実行

結論: Asakusa on z/OSのアプリケーションが正常実行できた。– hadoopコマンドがないというメッセージは出るものの、実行自体には問題ない

開発: 売上データの振り分け・マスターデータとの結合・集計を行うサンプルアプリケーション(チュートリアル)をベースに、入力データをz/OSデータセットに変換・配置して実行– http://docs.asakusafw.com/basic-tutorial/

詳細: いくつかのノウハウがある。本資料の「補足」にて後述。

性能: 想定通り、zIIPでほとんどのCPU処理を行うことができ、実用的なスループットが得られた。(次ページに検証)

14

Page 15: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

Asakusa on z/OS検証環境

z/OS

Java z/OS (USS上で稼働)

Apache Spark Core

USSSAM

データセット

MDSS

アプリケーション

店舗マスター商品マスター売上明細

集計結果

Telnet接続し、YAESSによりバッチアプリケーション実行

操作端末

15

Page 16: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データソースをホストデータとして準備

チュートリアルのシナリオにて、売り上げ情報のレコード数を増幅してアプリケーションを実行

入力データをz/OSデータセットとして準備し、MDSS経由で読み取り

商品マスタAZK.ASAKUSA.SAMPLE.SEQFILES(ITEMINFO)

店舗マスタAZK.ASAKUSA.SAMPLE.SEQFILES(STORINFO)

売上明細AZK.ASAKUSA.SAMPLE.SEQFILE4

922010001000Milk Chocolate M 110Snack 1600ChocolateSnack ...ツ2010/04/012010/04/012019/12/331 922010001001PREMIUM Chocolate 110Snack 1600ChocolateSnack ...¢2010/04/012010/04/012019/12/331 922010001002Almond Crunch mini 110Snack 1600ChocolateSnack ...ナ2010/04/012010/04/012019/12/331 922020002000CupNoodle Shoyu 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922020002001CupNoodle Salt 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922020002002CupNoodle Curry 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922030003000CupIce YubariMelon 110Snack 1300IceCream ...エ2010/04/012010/04/012019/12/331 922030003001Maccha Sundae 110Snack 1300IceCream ...¥2010/04/012010/04/012019/12/331 922030003002RockIce Ichigo 110Snack 1300IceCream ...2010/04/012010/04/012019/12/331

0000SuperMakuhari-HQ 0001SuperMakuhari-Shinagawa0002SuperMakuhari-Shibuya 0055SuperMakuhari-Heiwajima0004SuperMakuhari-Nishiarai

2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY2011-04-01 10:31:0000014922020002000.......イ...DDUMMY2011-04-01 10:32:0000014922030003000.......エ....DUMMY2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY2011-04-01 10:31:0000014922020002000.......イ...DDUMMY2011-04-01 10:32:0000014922030003000.......エ....DUMMY...

16

Page 17: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

結果:処理スループットは現実的

YAESS実行ログに出力される処理時間で比較

ケース# レコード数 データサイズ(bytes) Elapse(msec)

1 5 265 21,129

2 10,000,002 530,000,106 62,779

3 20,000,004 1,060,000,212 88,430

0

10000

20000

30000

40000

50000

60000

70000

80000

90000

100000

0 500000000 1E+09 1.5E+09

Ela

pse(m

sec)

bytes

0

10000

20000

30000

40000

50000

60000

70000

80000

90000

100000

0 5000000 10000000 15000000 20000000 25000000

Ela

pse(m

sec)

# of records

17

Page 18: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

結果:CPU使用は、大部分をzIIPに逃がせられた

前頁のケース3(レコード数20,000,004件)でのCPU時間– RMF(Workload Activity Report) より

Application (Spark) MDSS

GCP(汎用CPU) 4.847 0.035

zIIP 99.178 0

単位:秒

18

Page 19: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

まとめ

Asakusa FrameworkによるバッチアプリケーションをSpark on z/OS上で実行することができた。

セキュリティ、スキル、コストの観点で、バッチアプリケーションを進化できるソリューションになり得る。

19

Page 20: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

20

補足

アプリケーション開発の概要手順

Page 21: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

開発シナリオ

Asakusa Frameworkでは、小売店の売り上げ情報をカテゴリー別に集計するサンプル・アプリケーションをベースにしたチュートリアルが提供されています。

http://docs.asakusafw.com/basic-tutorial/latest/release/ja/html/index.html

この節では、上のチュートリアルをベースに、一部必要な箇所を修正しながらApache Spark on z/OS上でアプリケーションを稼働させる際に必要なポイントをご紹介していきます。

開発環境としてCentOS 7.2, Jinrikisha 0.7.6を使用し稼働確認を行った結果に基づいて記述しています。

21

Page 22: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

前提SWバージョン

Asakusa Framework (実行環境)

IBM z/OS Platform for Apache Spark (Spark on z/OS)

Asakusa

Framework

Asakusa on Spark Apache

Spark

Apache Hadoop

0.8.1 0.3.1 1.6.2 2.7.2

0.8.0 0.3.0 1.6.1 2.7.2

0.7.6 0.2.2 1.5.2 1.2.1

2.6.0

0.7.5 0.2.1 1.5.2 1.2.1

2.6.0

Spark on z/OS Apache Spark z/OS Bash Java

1.1 1.5.2 2.1 以降 4.2.53以降 IBM 64bit SDK V8 SR2 FP10

IBM z/OS Platform for Apache Sparkに対応するAsakusa Frameworkは0.7.6 もしくは0.7.5

(2016年9月時点)

22

Page 23: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

前提SWバージョン

Asakusa Framework (開発環境)

Jinrikisha(人力車)– Asakusa Frameworkの開発環境を手軽に構築するパッケージ

パッケージ内にはAsakusa Framework、Apache Spark、関連ツールなどが同梱され、わずかな手順でセットアップ可能

– 同梱SW

Asakusa Framework Platform ビルドツール(Gradle)

Java

(JDK)

Eclipse Hadoop

Win Mac Ubuntu Desktop

0.7.6 7(SP1)

10

10.9

10.11

12.04

14.04

2.8 1.7.0_76

1.8.0.66

4.4.2

4.5.1

1.2.1

2.6.0

0.7.5 7(SP1)

10

10.9

10.11

12.04

14.04

2.8 1.7.0_76

1.8.0.66

4.4.2

4.5.1

1.2.1

2.6.0

Jinrikisha Asakusa Framework Platform Eclipse Apache

Spark

Hadoop

Ubuntu Desktop CentOS Mac

0.7.6 0.7.6 16.04 7.2 10.11 4.5.1 × 1.2.1

0.7.5 0.7.5 16.04 7.2 10.11 4.5.1 × 1.2.1

Spark on z/OSに対応するJinrikisha(Asakusa Framework)で開発を行う場合、Apache Sparkが同梱されていない為、対応するApache Spark(1.5.2)を開発環境に別途用意する必要があるので注意

23

Page 24: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

開発の流れ

(1) 対象データの準備– z/OS上のデータ(シーケンシャル・データ、DB2, IMS上のデータ等)を、MDSS提供のJDBCドライバー経由でアクセスすることを想定

------------------------------------Asakusa Frameworkでの開発 (ここから)--------------------------------------

(2) データモデルの作成– 対象データに関して、Asakusa Framework上で操作するためにデータ・モデルを定義する

(3) 演算子の作成– バッチアプリケーションを構成する処理の単位となる 演算子 を作成

(4) フロー部品の作成– 演算子を組み合わせてフローの部品を作成

(5) ジョブフローの作成– フロー部品を組み合わせて一連のフローを作成

(6) バッチの作成– ジョブ・フローを組み合わせて業務バッチを作成

(7) デプロイメント・アーカイブの作成– Spark on z/OS上で稼働させるためのモジュール生成

------------------------------------Asakusa Frameworkでの開発 (ここまで)--------------------------------------

(8) デプロイ/実行24

Page 25: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(1) 対象データの準備

対象データはMDSS経由でアクセスされるz/OS上データ(VSAM, SAM, IMS DB等)、もしくは、USS上のファイルとする。

MDSS経由でアクセスするデータの場合、Virtual TableなどJDBCでアクセスできるようにするためのMDSS上の設定は別途必要(ここでは詳細は触れない)。

USS上のファイルの場合、データはUTF-8で用意する。

※ z/OSではHadoopはサポートされていない

25

Page 26: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(2) データモデルの作成

データ入出力の仕組みは、Direct I/Oは使用できない(*)ため、WindGate経由のアクセス(JDBCアクセスorローカルファイルシステムアクセス)を行う必要がある。

MDSS経由のデータアクセスの場合、WindGateによるJDBCアクセスを行う。– MDSSで使用できるSQLの型には制限があるので注意。

WindGate でサポートされる型

http://docs.asakusafw.com/latest/release/ja/html/windgate/user-

guide.html#dmdljdbc

• MDSS でサポートされる型

http://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.

azkc100/dvs_ag_ref_SQL_Type_Support_by_Shadow_Server_Interface.htm

– 例えば、Asakusaチュートリアルで使用されているDate, TimeはMDSS経由のシーケンシャルファイルでは使用できないため、必要に応じて型の変換等を考慮する必要がある。

USS上のファイルを使用する場合、WindGateによるローカルファイルシステムアクセスを行う– データはCSV形式、UTF-8で用意する。

26

Page 27: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

参考: DMDL記述例

"店舗マスタ"@windgate.jdbc.table(name = "D_STORE_INFO")store_info = {

"店舗コード"@windgate.jdbc.column(name = "D_STORE_CODE")store_code : TEXT;

"店舗名称"@windgate.jdbc.column(name = "D_STORE_NAME")store_name : TEXT;

};

"売上明細"@windgate.csv(

has_header = TRUE,datetime = "yyyy-MM-dd HH:mm:ss"

)sales_detail = {

"売上日時"@windgate.csv.field(name = "日時")sales_date_time : DATETIME;

"店舗コード"@windgate.csv.field(name = "店舗コード")store_code : TEXT;

"商品コード"@windgate.csv.field(name = "商品コード")item_code : TEXT;

"数量"@windgate.csv.field(name = "数量")amount : INT;

"販売単価"@windgate.csv.field(name = "販売単価")unit_selling_price : INT;

"販売金額"@windgate.csv.field(name = "販売金額")selling_price : INT;

"ファイル名"@windgate.csv.file_namefile_name : TEXT;

};

WindGateローカルファイルシステムアクセス(USS上のcsvファイルの場合)

WindGate JDBCアクセス(MDSS経由のメインフレームデータの場合)

27

Page 28: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(3) 演算子の作成、(4) フロー部品の作成

この部分の開発は、実際のデータの持ち方には直接依存しないため、一般的なAsakusa Framework

の作法に従えばよく、特にSpark on z/OS特有の考慮点は無い。

ただし、前述の通り、使用できる型の制約等があり、ロジックで型変換などの対応が必要であれば、その部分を考慮した実装は必要。

28

Page 29: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(5) ジョブフローの作成

前述の通り、Apache Spark for z/OSで稼働させる際にはDirect I/Oは使用できないため、WindGate機能を利用したJDBCアクセス/ローカルファイルシステムアクセスを行う必要がある。

インポーター記述 / エクスポーター記述は、DMDLで指定した入出力方法に合わせた記述を行う必要がある。– JDBC

インポーター記述

http://docs.asakusafw.com/latest/release/ja/html/windgate/user-guide.html#id59

• エクスポーター記述

http://docs.asakusafw.com/latest/release/ja/html/windgate/user-guide.html#id62

– ローカルファイル インポーター記述

http://docs.asakusafw.com/latest/release/ja/html/windgate/user-guide.html#id48

エクスポーター記述

http://docs.asakusafw.com/latest/release/ja/html/windgate/user-guide.html#id51

MDSS経由のJDBCアクセスでは、データの種類によってはRead-onlyとなるので注意– Read-onlyのデータソースに対して出力させない (エクスポーター記述を行わない)

– JobFlowTesterやBatchTesterを使用したテストは、Excelで準備したテストデータを実DBMSに流し込みテストを行うことになるため、Read-onlyのデータソースに対しては利用不可(次頁参照)

FlowPartTestの利用や、書き込み可能な代替環境を用意するなど考慮が必要

29

Page 30: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(6) バッチの作成

(5) ジョブフロー作成と同様、テスト時のMDSSアクセス(Read-only)に注意

30

Page 31: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(7)デプロイメント・アーカイブの作成

Spark on z/OSのバージョンは V1.5.2 であるため、関連するコンポーネントのバージョンもそれに合わせる必要がある。

開発環境 実行環境

Asakusa on Spark Asakusa Framework Gradle Spark Hadoop

0.3.0 0.8.0 2.12 1.6.1 2.x

0.2.2 0.7.6 2.8 1.5.2 2.x

31

Page 32: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(7)デプロイメント・アーカイブの作成…

各コンポーネントのバージョン情報に合わせて、Sparkモジュール生成用にbuild.gradleを修正

buildscript {repositories {

maven { url'http://asakusafw.s3.amazonaws.com/maven/releases' }

}dependencies {

classpath group: 'com.asakusafw.spark', name: 'asakusa-spark-gradle', version: '0.2.2'

}}

task wrapper(type: Wrapper) {distributionUrl

'http://services.gradle.org/distributions/gradle-2.8-bin.zip'

jarFile file('.buildtools/gradlew.jar')}

apply plugin: 'asakusafw'apply plugin: 'asakusafw-organizer'apply plugin: 'eclipse'apply plugin: 'asakusafw-spark'

asakusafw {asakusafwVersion '0.7.6-hadoop2'

modelgen {modelgenSourcePackage 'com.example.modelgen'

}compiler {

compiledSourcePackage 'com.example.batchapp'}

}

asakusafwOrganizer {profiles.prod {

asakusafwVersion asakusafw.asakusafwVersionarchiveName "${project.name}.tar.gz"assembly.into('example-dataset') {

put 'src/test/example-dataset'}

}}

dependencies {compile group: 'com.asakusafw.sdk', name:

'asakusa-sdk-core', version: asakusafw.asakusafwVersion

compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-directio', version: asakusafw.asakusafwVersion

compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-windgate', version: asakusafw.asakusafwVersion

provided (group: 'org.apache.hadoop', name: 'hadoop-client', version: '2.7.1') {

exclude module: 'junit'exclude module: 'mockito-all'exclude module: 'slf4j-log4j12'

}}

32

Page 33: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(8) デプロイ / 実行

前提– Spark on z/OS実行可能なユーザーで操作する想定

生成された.tar.gzファイルをUSS上にバイナリーモードで転送し、gunzipを行う– gzipが入っていない環境の場合、tarに変換してから転送– 例: /u/asakusa/asakusa-develop/asakusa_MDSS01に展開

環境変数を作業シェルに適用

SPARKID:/u/asakusa/asakusa-develop:>mkdir asakusa_MDSS01SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS01SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS01:>tar -xvf ../asakusa-tutorial076-mdss01.tar

SPARKID:/u/asakusa/asakusa-develop:>cat env.shexport JAVA_HOME=/usr/lpp/java/J8.0_64#export HADOOP_CMD=export SPARK_HOME=/usr/lpp/IBM/Sparkexport SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submitexport ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS01export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-developexport _BPX_SPAWN_SCRIPT=YESexport _BPXK_AUTOCVT=ONexport PATH=$PATH:/bin:/usr/lpp/rocket/bash-4.2/bin:$JAVA_HOME/binexport CLASSPATH=$CLASSPATH:/usr/lpp/IBM/Spark/lib/*:/usr/lpp/IBM/Spark/lib

SPARKID:/u/asakusa/asakusa-develop:>. ./env.sh

33

Page 34: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(8) デプロイ / 実行…

.shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える

SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh#!/bin/sh

cd ~for n in `find $ASAKUSA_HOME -name *.sh`; domv $n $n.orgiconv -f IBM-943 -t IBM-939 $n.org > $ndone

for n in `find $ASAKUSA_HOME -name *.properties`; domv $n $n.orgiconv -f IBM-943 -t IBM-939 $n.org > $ndone

for n in `find $ASAKUSA_HOME -name *.sh`; dochmod +x $ndone

SPARKID:/u/asakusa/asakusa-develop:>./conv.sh

34

Page 35: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(8) デプロイ / 実行…

ASAKUSAHOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンク作成

SPARKID:/u/asakusa/asakusa-develop:>cat link.sh#!/bin/sh

cd $ASAKUSA_HOME/windgate/libln -s $SPARK_HOME/lib/spark-assembly-1.5.2-hadoop2.6.0.jar hadoop.jar

SPARKID:/u/asakusa/asakusa-develop:>./link.sh

SPARKID:/u/asakusa/asakusa-develop:>ls -la $ASAKUSA_HOME/windgate/libtotal 2336drwxr-xr-x 2 SPARKID SPKGRP 8192 Aug 9 18:55 .drwxr-xr-x 8 SPARKID SPKGRP 8192 Aug 9 17:24 ..-rw-r--r-- 1 SPARKID SPKGRP 20763 Aug 9 17:24 asakusa-windgate-bootstrap-0.7.6-hadoop2.jar-rw-r--r-- 1 SPARKID SPKGRP 97998 Aug 9 17:24 asakusa-windgate-core-0.7.6-hadoop2.jarlrwxrwxrwx 1 SPARKID SPKGRP 59 Aug 9 18:55 hadoop.jar -> /usr/lpp/IBM/Spark/lib/spark-assembly-1.5.2-hadoop2.6.0.jar-rw-r--r-- 1 SPARKID SPKGRP 263829 Aug 9 17:24 jsch-0.1.51.jar-rw-r--r-- 1 SPARKID SPKGRP 4960 Aug 9 17:24 jul-to-slf4j-1.7.5.jar-rw-r--r-- 1 SPARKID SPKGRP 270750 Aug 9 17:24 logback-classic-1.1.2.jar-rw-r--r-- 1 SPARKID SPKGRP 427729 Aug 9 17:24 logback-core-1.1.2.jar-rw-r--r-- 1 SPARKID SPKGRP 26084 Aug 9 17:24 slf4j-api-1.7.5.jar

35

Page 36: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(8) デプロイ / 実行…

WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の設定を行う– $ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋

...

# Local File Systemresource.local=com.asakusafw.windgate.stream.file.FileResourceProviderresource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS01/example-dataset

# JDBCresource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProviderresource.jdbc.driver=com.rs.jdbc.dv.DvDriverresource.jdbc.url=jdbc:rs:dv://mdsshostname:1200resource.jdbc.user=sparkidresource.jdbc.password=xxxxxxxxresource.jdbc.batchGetUnit=1000resource.jdbc.batchPutUnit=1000resource.jdbc.connect.retryCount=3resource.jdbc.connect.retryInterval=10resource.jdbc.statement.truncate=TRUNCATE TABLE {0}resource.jdbc.properties.loginTimeout=10resource.jdbc.properties.DatabaseType=DVSresource.jdbc.properties.NetworkTimeout=30

...

36

Page 37: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

(8) デプロイ / 実行…

MDSSアクセス用JDBCドライバーの設定を行う– Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、

$ASAKUSA_HOME/windgate/plugin/にコピー

bashに変更し、yaessによりバッチアプリケーションを実行

dv-jdbc-3.1.22756.jarlog4j-api-2.4.1.jarlog4j-core-2.4.1.jar datanucleus-api-jdo-3.2.6.jardatanucleus-core-3.2.10.jar datanucleus-rdbms-3.2.9.jar

SPARKID:/u/asakusa/asakusa-develop:>bashbash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01

37

Page 38: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

メモ

各種バージョンの整合性(開発環境、実行環境)は厳密に合わせる必要がある。– Asakusa Frameworkとしては基本的にソースの上位互換はある。

Asakusa Frameworkとしての開発作法に従う必要がある。– 設計から実装までの工程は、単純なアプリでもステップが多い。– データのマッピング、フローの作成、ともにJavaのコーディング・スキルが必要。– Asakusa Frameworkでデータ構造を表すクラスを自動生成してくれるが、それを直接意識してフローをコーディングする必要があるため、Frameworkでどのような定義を行うとどのようなクラスが生成されるかを理解しておく必要がある。

z/OS上のデータを扱う場合、MDSSの制約に注意する必要がある。– Read-onlyの場合、一部eclipse上から単体テストが行えない。– 使用できるデータの型に制約が生じる。– MDSSとしての読み取り可能なレコード数上限に注意

構成パラメーター: SQLENGMAXDBREAD(デフォルト 25,000レコード)

稼働手順に文字コード変換、権限設定のステップを組み込む必要がある。

一部z/OS上でHadoopが使えないことによる考慮が必要(Asakusa Frameworkでは内部的にHadoop

機能を使用する場合があるため)。– Spark on z/OS環境にてSpark提供のHadoop関連のjarを設定– 実行時にHadoop関連のWarning, Errorメッセージが出る場合がある(無視してよい)

38

Page 39: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データ型Asakusa

Framework

DMDL

Javaクラス JDBC

Spark on z/OS

DB2MDSS

(IMS,VSAM,etc)

32bit符号付き整数 INTint

(IntOption)int ○ ○

64bit符号付き整数 LONGlong

(LongOption)long

○(SQL_Bigint)

※(将来対応予定)

単精度浮動小数点 FLOATfloat

(FloatOption)float ○

倍精度浮動小数点 DOUBLEDouble

(DoubleOption) double ○

文字列 TEXTText

(StringOption)String ○ ○

10進数 DECIMALBigDecimal

(DecimalOption)BigDecimal ○ ○

日付 DATEDate

(DateOption)java.sql.Date ○

日時 DATETIMEDateTime

(DateTimeOption)

Java.sql.Timesta

mp

※(SQL_Time)

論理値 BOOLEANBoolean

(BooleanOption)boolean

8bit符号付き整数 BYTEbyte

(ByteOption)byte

○(SQL_Binary)

16bit符号付き整数 SHORTShort

(ShortOption)short

○(SQL_Smallint)

Spark on z/OSとAsakusa Framework DMDLデータ型の対応

39

Page 40: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

COBOL型 SQL_Type

PIC X(30)PIC A(30)

SQL_Char

PIC S9(3)V9(3)PIC S9(3)V9(3) USAGE DISPLAY

SQL_Char

PIC G(30) USAGE DISPLAY-1 SQL_Graphic

PIC S9(03)V9(3) USAGE COMP-3 SQL_Decimal

PIC S9(n) USAGE BINARYPIC S9(n) USAGE COMPPIC S9(n) USAGE COMP-4PIC S9(n) USAGE COMP-5PIC 9(n) USAGE COMP-5

n=1-4 : SQL_Smallint

n=5-9 : SQL_Integer

n=10-18 : SQL_Binary

※ n=10-18は将来SQL_Bigintをサポート予定

USAGE IS COMP-1 SQL_Float

USAGE IS COMP-2 SQL_Double

PIC S9(03)V9(3) USAGE COMP-3PIC S9(03)V9(3) USAGE PACKED-DECIMAL

SQL_Decimal

Spark on z/OSのCOBOLデータ型とSQLデータ型マッピング

http://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.azkc100/dvs_ag_ref_COBOL1.htm

40

Page 41: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

参考

Asakusa Frameworkチュートリアルのシナリオ*をSpark on z/OS上で稼働させるための詳細手順

* http://docs.asakusafw.com/basic-tutorial/0.8/release/ja/html/index.html

41

Page 42: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データ準備

概要– 入力データはz/OS上に固定長フィールドのデータとして準備し、出力データ(集計結果)はUSS上のファイルとしてCSV形式で生成することを想定

入力データ用COBOL COPYBOOK

– 商品マスター: COPYITEM

– 店舗マスター: COPYSTOR

– 売り上げ情報: COPYSALE

01 DATAFIELDS. 05 D_ITEM_CODE PIC X(13). 05 D_ITEM_NAME PIC X(40). 05 D_DEPARTMENT_CODE PIC X(3). 05 D_DEPARTMENT_NAME PIC X(10). 05 D_CATEGORY_CODE PIC X(4). 05 D_CATEGORY_NAME PIC X(20). 05 D_UNIT_SELLING_PRICE PIC S9(09) COMP. 05 D_REGISTERED_DATE PIC X(10). 05 D_BEGIN_DATE PIC X(10). 05 D_END_DATE PIC X(10).

01 DATAFIELDS. 05 D_STORE_CODE PIC X(04). 05 D_STORE_NAME PIC X(100).

01 DATAFIELDS. 05 D_SALES_DATE_TIME PIC X(19). 05 D_STORE_CODE PIC X(4). 05 D_ITEM_CODE PIC X(13). 05 D_AMOUNT PIC S9(09) COMP. 05 D_UNIT_SELLING_PRICE PIC S9(09) COMP. 05 D_SELLING_PRICE PIC S9(09) COMP. 05 D_FILE_NAME PIC X(5).

DATE型はサポートされないため、日付は文字列型

として定義

DATETIME型はサポートされないため、日時は文字

列型として定義

42

Page 43: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データ準備

入力データ– 商品マスター: AZK.ASAKUSA.SAMPLE.SEQFILES(ITEMINFO)

– 店舗マスター: AZK.ASAKUSA.SAMPLE.SEQFILES(STORINFO)

– 売り上げ情報: AZK.ASAKUSA.SAMPLE.SEQFILE4

922010001000Milk Chocolate M 110Snack 1600ChocolateSnack ...ツ2010/04/012010/04/012019/12/331 922010001001PREMIUM Chocolate 110Snack 1600ChocolateSnack ...¢2010/04/012010/04/012019/12/331 922010001002Almond Crunch mini 110Snack 1600ChocolateSnack ...ナ2010/04/012010/04/012019/12/331 922020002000CupNoodle Shoyu 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922020002001CupNoodle Salt 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922020002002CupNoodle Curry 130Food 1401CupNoodle ...イ2010/04/012010/04/012019/12/331 922030003000CupIce YubariMelon 110Snack 1300IceCream ...エ2010/04/012010/04/012019/12/331 922030003001Maccha Sundae 110Snack 1300IceCream ...¥2010/04/012010/04/012019/12/331 922030003002RockIce Ichigo 110Snack 1300IceCream ...2010/04/012010/04/012019/12/331

0000SuperMakuhari-HQ 0001SuperMakuhari-Shinagawa0002SuperMakuhari-Shibuya 0055SuperMakuhari-Heiwajima0004SuperMakuhari-Nishiarai

2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY2011-04-01 10:31:0000014922020002000.......イ...DDUMMY2011-04-01 10:32:0000014922030003000.......エ....DUMMY2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY2011-04-01 10:31:0000014922020002000.......イ...DDUMMY2011-04-01 10:32:0000014922030003000.......エ....DUMMY...

数値フィールドはバイナリで指定する必要あり

元はcsvファイル名を指定するフィールドなのでここではDUMMYとする

43

Page 44: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データ準備

MDSS経由でアクセスするためのVirtual Tableを作成

このVirutual Tableの名前がJDBC経由でアクセスされる

テーブル名となる

44

Page 45: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

開発環境整備

環境– CentOS V7.2

– Jinrikisha V0.7.6 (& Shafu, DMDLエディター)

インストーラーの入手– 旧バージョンのJinrikishaは以下のサイトからダウンロード可能

Jinrikisha ダウンロードアーカイブhttp://docs.asakusafw.com/jinrikisha/ja/html/download-archive.html

45

Page 46: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

開発環境整備

インストール– 以下の手順に従ってJinrikishaをインストール

Jinrikisha インストール手順http://docs.asakusafw.com/jinrikisha/ja/html/install.html

主な操作内容

専用ユーザーを作成し、sudo権限付与

JAVA_HOME環境変数設定

setup.sh実行 (指示に従いインストール処理を進める)

– 以下の手順に従いJinrikishaに含まれるeclipseにShafuをインストール Shafu - Asakusa Gradle Plug-in Helper for Eclipse

http://docs.asakusafw.com/jinrikisha/ja/html/shafu.html

Gradleのバージョン設定は使用するAsakusa Frameworkのバージョンに合わせる(次ページ参照)

– 以下の手順に従いJinrikishaに含まれるeclipseにDMDLエディターをインストール DMDL Editorプラグイン

http://docs.asakusafw.com/jinrikisha/ja/html/introduction/dmdl-editor.html

46

Page 47: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

開発環境整備 Preferences - jinrikisha

– Gradleのバージョンと、使用するAsakusa Frameworkのバージョンとの整合性を合わせる

2.8を選択

47

Page 48: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

プロジェクトの作成

File > New > Gradleプロジェクトをテンプレートから生成

テンプレート選択画面では、Asakusa Project Template -

0.7.6を選択

48

Page 49: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

プロジェクトにAsakusa Frameworkの構成

プロジェクト右クリック > jinrikisha > Asakusa開発環境の構成 > Asakusa Frameworkのインストール

49

Page 50: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

DMDL作成

src/main/dmdl/models.dmdlを作成

Spark on z/OSで稼働させるための修正ポイント

Direct I/Oはサポートされないため、全てWindGate経由でアクセスするよう定義する必要があります。入力用のデータモデルはJDBC(MDSS経由)、出力用のデータモデルはローカルファイルシステム(USS)として定義します。テーブル名、カラム名はVirtual Tableとして定義した名前に合わせます。型もMDSSでサポートされる型に合わせて定義します(DATE型、DATETIMEは使用不可)。

50

Page 51: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

データモデルクラス作成

プロジェクト右クリック > jinrikisha > DMDLからデータモデルクラスを作成

build/generated-souces/modelgenに各種クラスが生成される。

51

Page 52: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

演算子(Operator)の作成

src/main/java/com.example.operator/CategorySummaryOperator.javaを作成

Spark on z/OSで稼働させるための修正ポイント

日付、時刻の型が使えないため、日付、時刻は文字列型として読み込む必要があります。そのため、日付、時刻の型として情報を扱いたい場合は、型変換を行う演算子を組み込む必要があります。ここでは、簡素化のために、日付/時刻を扱うロジック自体を省くこととします(売り上げ日時が、マスター上の有効範囲かどうかのチェックは行わないようにする)。

52

Page 53: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

フロー部品(FlowPart)の作成

src/main/java/com.example.flowpart/CategorySummaryFlowPart.javaを作成

Spark on z/OSで稼働させるための修正ポイント

特に無し

53

Page 54: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

ジョブフローの作成 src/main/java/com.example.jobflow/に以下のファイルを作成

– ジョブフロー本体 CategorySummaryjob.java

– インポーター記述 ItemInfoFromCsv.java

SalesDetailFromCsv.java

StoreInfoFromCsv.java

– エクスポーター記述 CategorySummaryToCsv.java

ErrorRecordToCsv.java

Spark on z/OSで稼働させるための修正ポイント

DMDLでは、全てWindGate経由でのアクセスを行うよう定義を変更しています。そのため、インポーター/エクスポーター記述もそれに合わせて変更する必要があります。

54

Page 55: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

バッチの作成

src/main/java/com.example.batch/SummarizeBatch.javaを作成

Spark on z/OSで稼働させるための修正ポイント

特に無し

55

Page 56: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

build.gradleの編集

build.gradleをAsakusa Frameworkのバージョンに合わせて適宜修正

Spark on z/OSで稼働させるための修正ポイント

Spark用の実行モジュールを生成させるよう指定する必要があります。Spark on z/OSのバージョンと整合性を合わせるため、Asakusa Frameworkは古いバージョン(0.7.6)を使用しています。それに伴い、各種関連コンポーネント(gradle, asakusa on spark等)のバージョンを合わせる必要があります。

56

Page 57: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイメント・アーカイブの生成

プロジェクト右クリック - jinrikisha - Asakusaデプロイメントアーカイブを生成

build以下にxxx.tar.gzファイルが生成される。このファイルをUSS上にデプロイする。

57

Page 58: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

開発環境(CentOS)上で生成されたxxx.tar.gzをunzipしてtarファイルに変換しておく (デプロイ先のUSS

ではデフォルトでgzipがインストールされていないため。gzipのある環境では不要)

– 対象のファイル(xxx.tar.gz)が生成されたディレクトリで、以下のコマンドでunzipする gunzip xxx.tar.gz

バイナリモードで、unzipしたデプロイメント・アーカイブ・ファイル(xxx.tar)をUSS上に転送する。

Spark on z/OS実行可能なユーザーでUSSにログイン

特定のディレクトリにxxx.tarを展開

ここでは/u/asakusa/asakusa-develop/asakusa_MDSS03に展開する(このディレクトリをASAKUSA_HOMEとする)

----- 以降、USS上での操作 -----

SPARKID:/u/asakusa/asakusa-develop:>mkdir asakusa_MDSS03SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS03SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS03:>tar -xvf ../asakusa-tutorial076-mdss03.tar

58

Page 59: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

環境変数を作業シェルに適用

SPARKID:/u/asakusa/asakusa-develop:>cat env.shexport JAVA_HOME=/usr/lpp/java/J8.0_64#export HADOOP_CMD=export SPARK_HOME=/usr/lpp/IBM/Sparkexport SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submitexport ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS03export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-develop

export _BPX_SPAWN_SCRIPT=YESexport _BPXK_AUTOCVT=ON

export PATH=$PATH:/bin:/usr/lpp/rocket/bash-4.2/bin:$JAVA_HOME/bin

export CLASSPATH=$CLASSPATH:/usr/lpp/IBM/Spark/lib/*:/usr/lpp/IBM/Spark/lib

SPARKID:/u/asakusa/asakusa-develop:>. ./env.sh

59

Page 60: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

.shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える

SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh#!/bin/sh

cd ~for n in `find $ASAKUSA_HOME -name *.sh`; domv $n $n.orgiconv -f IBM-943 -t IBM-939 $n.org > $ndone

for n in `find $ASAKUSA_HOME -name *.properties`; domv $n $n.orgiconv -f IBM-943 -t IBM-939 $n.org > $ndone

for n in `find $ASAKUSA_HOME -name *.sh`; dochmod +x $ndone

SPARKID:/u/asakusa/asakusa-develop:>./conv.sh

60

Page 61: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

$ASAKUSA_HOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンクを作成

SPARKID:/u/asakusa/asakusa-develop:>cat link.sh#!/bin/sh

cd $ASAKUSA_HOME/windgate/libln -s $SPARK_HOME/lib/spark-assembly-1.5.2-hadoop2.6.0.jar hadoop.jar

SPARKID:/u/asakusa/asakusa-develop:>./link.sh

SPARKID:/u/asakusa/asakusa-develop:>ls -la $ASAKUSA_HOME/windgate/libtotal 2336drwxr-xr-x 2 SPARKID SPKGRP 8192 Aug 9 18:55 .drwxr-xr-x 8 SPARKID SPKGRP 8192 Aug 9 17:24 ..-rw-r--r-- 1 SPARKID SPKGRP 20763 Aug 9 17:24 asakusa-windgate-bootstrap-0.7.6-hadoop2.jar-rw-r--r-- 1 SPARKID SPKGRP 97998 Aug 9 17:24 asakusa-windgate-core-0.7.6-hadoop2.jarlrwxrwxrwx 1 SPARKID SPKGRP 59 Aug 9 18:55 hadoop.jar -> /usr/lpp/IBM/Spark/lib/spark-assembly-1.5.2-hadoop2.6.0.jar-rw-r--r-- 1 SPARKID SPKGRP 263829 Aug 9 17:24 jsch-0.1.51.jar-rw-r--r-- 1 SPARKID SPKGRP 4960 Aug 9 17:24 jul-to-slf4j-1.7.5.jar-rw-r--r-- 1 SPARKID SPKGRP 270750 Aug 9 17:24 logback-classic-1.1.2.jar-rw-r--r-- 1 SPARKID SPKGRP 427729 Aug 9 17:24 logback-core-1.1.2.jar-rw-r--r-- 1 SPARKID SPKGRP 26084 Aug 9 17:24 slf4j-api-1.7.5.jar

61

Page 62: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の設定を行う

$ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋

...

# Local File Systemresource.local=com.asakusafw.windgate.stream.file.FileResourceProviderresource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS03/example-dataset

# JDBCresource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProviderresource.jdbc.driver=com.rs.jdbc.dv.DvDriverresource.jdbc.url=jdbc:rs:dv://mdsshostname:1200resource.jdbc.user=sparkidresource.jdbc.password=xxxxxxxxresource.jdbc.batchGetUnit=1000resource.jdbc.batchPutUnit=1000resource.jdbc.connect.retryCount=3resource.jdbc.connect.retryInterval=10resource.jdbc.statement.truncate=TRUNCATE TABLE {0}resource.jdbc.properties.loginTimeout=10resource.jdbc.properties.DatabaseType=DVSresource.jdbc.properties.NetworkTimeout=30

...

62

Page 63: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

デプロイ

MDSSアクセス用JDBCドライバーの設定を行う

Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、$ASAKUSA_HOME/windgate/plugin/にコピー

dv-jdbc-3.1.22756.jarlog4j-api-2.4.1.jarlog4j-core-2.4.1.jar datanucleus-api-jdo-3.2.6.jardatanucleus-core-3.2.10.jar datanucleus-rdbms-3.2.9.jar

63

Page 64: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

実行

bashに変更し、YAESSによりバッチアプリケーションを実行

結果の確認– $ASAKUSA_HOME/example-dataset/result/に以下のファイルが生成される

category-2011-04-01.csv 集計結果 error-2011-0401.csv エラーレコード情報

いずれもUTF-8で出力されているため、USS上でiconvでコード変換して参照するか、バイナリーモードでPC(Windows等)に転送して参照する必要がある。

– 出力結果例 category-2011-04-01.csv

error-2011-0401.csv

SPARKID:/u/asakusa/asakusa-develop:>bashbash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01

カテゴリコード,販売数量,売上合計1401,13333336,13066669281300,20000004,20000004001600,6666668,800000160

ファイル名,日時,店舗コード,商品コード,メッセージDUMMY,2011-04-01 10:33:00,9999,4922010001000,店舗不明DUMMY,2011-04-01 10:34:00,0001,9999999999999,商品不明

64

Page 65: Spark on z/OSとAsakusa Frameworkによる基幹バッチアプリケーション開発

65

EOF