SlideShare a Scribd company logo
1 of 65
Download to read offline
2016年11月
日本アイ・ビー・エム株式会社
藤岡英典
Spark on z/OSと
Asakusa Frameworkによる
基幹バッチアプリケーション開発
2
免責事項
この資料の掲載内容は作成者自身の見解であり、必ずしもIBMの立場、戦略、意
見を代表するものではありません。
3
IBM z Systems
本資料では、Spark on z/OSを活用して基幹バッチを
開発・実行するソリューションの実際についてご紹介しています
(オープンソースAsakusa Framework*と組み合わせたソリューション)
Asakusa Framework
* ノーチラス・テクノロジーズ社の登録商標
http://www.asakusafw.com/
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を意識せず
に開発可能です。
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
基幹バッチをSpark on z/OS上で実行する目的
6
スキルセキュリティ
処理の外出しを検討した
が、基幹データなので外
部システムにエクスポート
したくない。
これからはJavaのような、
主流なスキルセットを持つ
人財にも適した仕組みが
必要。
コスト
CPU消費を抑えることで、
月額のコストを削減でき
ないか。
これらのビジネス課題を解決することを目指す
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と略記
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とデータソースの
マッピングを行う
Spark on z/OSと基幹オンラインの連携
9
z/OS
Spark
アプリケーション
Java z/OS (USS上で稼働)
Spark SQL
Spark
Streaming
MLlib
(機械学習)
GraphX
Apache Spark Core
RDD RDD RDD RDD RDD
外部
分散システムMDSS
OLTP
アプリケーション
(CICS、IMS…)
Sparkを基幹業務の
延長線上と考え
オンラインから利用
DB2 IMS VSAM SAM
Asakusa FrameworkによってSparkは基幹バッチにも適用できる
10
z/OS
Java z/OS (USS上で稼働)
Spark SQL
Spark
Streaming
MLlib
(機械学習)
GraphX
外部
分散システム
バッチアプリケーション
OLTP
アプリケーション
(CICS、IMS…)
Sparkを基幹業務の
延長線上と考え
バッチから利用
Spark
アプリケーション
Apache Spark Core
RDD RDD RDD RDD RDD
MDSS
DB2 IMS VSAM SAM
コストについて
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)と比較
して割安に価格設定されている。
Asakusaとのバージョン整合性は厳密に合わせること
Q: Spark on z/OSのバージョンは?
A: 1.5.2です(2016/11現在)。これに対応するAsakusaのバージョンは0.7.6ですので、今回は
これを使用しました。
12
開発環境 実行環境
Asakusa
Framework
Asakusa
on Spark
Gradle 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を使用
その他、気になること
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
バッチアプリ開発・実行
 結論: Asakusa on z/OSのアプリケーションが正常実行できた。
– hadoopコマンドがないというメッセージは出るものの、実行自体には問題ない
 開発: 売上データの振り分け・マスターデータとの結合・集計を行うサンプルアプリケーション
(チュートリアル)をベースに、入力データをz/OSデータセットに変換・配置して実行
– http://docs.asakusafw.com/basic-tutorial/
 詳細: いくつかのノウハウがある。本資料の「補足」にて後述。
 性能: 想定通り、zIIPでほとんどのCPU処理を行うことができ、実用的なスループットが得ら
れた。(次ページに検証)
14
Asakusa on z/OS検証環境
z/OS
Java z/OS (USS上で稼働)
Apache Spark Core
USS
SAM
データセット
MDSS
アプリケーション
店舗マスター
商品マスター
売上明細
集計結果
Telnet接続し、
YAESSによりバッチアプ
リケーション実行
操作端末
15
データソースをホストデータとして準備
 チュートリアルのシナリオにて、売り上げ情報のレコード数を増幅してアプリケーションを実行
 入力データを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-Shinagawa
0002SuperMakuhari-Shibuya
0055SuperMakuhari-Heiwajima
0004SuperMakuhari-Nishiarai
2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY
2011-04-01 10:31:0000014922020002000.......イ...DDUMMY
2011-04-01 10:32:0000014922030003000.......エ....DUMMY
2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY
2011-04-01 10:31:0000014922020002000.......イ...DDUMMY
2011-04-01 10:32:0000014922030003000.......エ....DUMMY
...
16
結果:処理スループットは現実的
 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
Elapse(msec)
bytes
0
10000
20000
30000
40000
50000
60000
70000
80000
90000
100000
0 5000000 10000000 15000000 20000000 25000000
Elapse(msec)
# of records
17
結果: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
まとめ
 Asakusa FrameworkによるバッチアプリケーションをSpark on z/OS上で
実行することができた。
 セキュリティ、スキル、コストの観点で、バッチアプリケーションを進化できるソ
リューションになり得る。
19
20
補足
アプリケーション開発の概要手順
開発シナリオ
 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
前提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
前提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
開発の流れ
(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
(1) 対象データの準備
 対象データはMDSS経由でアクセスされるz/OS上データ(VSAM, SAM, IMS DB等)、もしくは、
USS上のファイルとする。
 MDSS経由でアクセスするデータの場合、Virtual TableなどJDBCでアクセスできるようにするための
MDSS上の設定は別途必要(ここでは詳細は触れない)。
 USS上のファイルの場合、データはUTF-8で用意する。
※ z/OSではHadoopはサポートされていない
25
(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
参考: 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_name
file_name : TEXT;
};
WindGateローカルファイルシステムアクセス
(USS上のcsvファイルの場合)
WindGate JDBCアクセス
(MDSS経由のメインフレームデータの場合)
27
(3) 演算子の作成、(4) フロー部品の作成
 この部分の開発は、実際のデータの持ち方には直接依存しないため、一般的なAsakusa Framework
の作法に従えばよく、特にSpark on z/OS特有の考慮点は無い。
 ただし、前述の通り、使用できる型の制約等があり、ロジックで型変換などの対応が必要であれば、その
部分を考慮した実装は必要。
28
(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
(6) バッチの作成
 (5) ジョブフロー作成と同様、テスト時のMDSSアクセス(Read-only)に注意
30
(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
(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.asakusafwVersion
archiveName "${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
(8) デプロイ / 実行
 前提
– Spark on z/OS実行可能なユーザーで操作する想定
 生成された.tar.gzファイルをUSS上にバイナリーモードで転送し、gunzipを行う
– gzipが入っていない環境の場合、tarに変換してから転送
– 例: /u/asakusa/asakusa-develop/asakusa_MDSS01に展開
 環境変数を作業シェルに適用
SPARKID:/u/asakusa/asakusa-develop:>mkdir asakusa_MDSS01
SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS01
SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS01:>tar -xvf ../asakusa-tutorial076-mdss01.tar
SPARKID:/u/asakusa/asakusa-develop:>cat env.sh
export JAVA_HOME=/usr/lpp/java/J8.0_64
#export HADOOP_CMD=
export SPARK_HOME=/usr/lpp/IBM/Spark
export SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submit
export ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS01
export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-develop
export _BPX_SPAWN_SCRIPT=YES
export _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
33
(8) デプロイ / 実行…
 .shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える
SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh
#!/bin/sh
cd ~
for n in `find $ASAKUSA_HOME -name *.sh`; do
mv $n $n.org
iconv -f IBM-943 -t IBM-939 $n.org > $n
done
for n in `find $ASAKUSA_HOME -name *.properties`; do
mv $n $n.org
iconv -f IBM-943 -t IBM-939 $n.org > $n
done
for n in `find $ASAKUSA_HOME -name *.sh`; do
chmod +x $n
done
SPARKID:/u/asakusa/asakusa-develop:>./conv.sh
34
(8) デプロイ / 実行…
 ASAKUSAHOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンク作成
SPARKID:/u/asakusa/asakusa-develop:>cat link.sh
#!/bin/sh
cd $ASAKUSA_HOME/windgate/lib
ln -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/lib
total 2336
drwxr-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.jar
lrwxrwxrwx 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
(8) デプロイ / 実行…
 WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の
設定を行う
– $ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋
...
# Local File System
resource.local=com.asakusafw.windgate.stream.file.FileResourceProvider
resource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS01/example-dataset
# JDBC
resource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProvider
resource.jdbc.driver=com.rs.jdbc.dv.DvDriver
resource.jdbc.url=jdbc:rs:dv://mdsshostname:1200
resource.jdbc.user=sparkid
resource.jdbc.password=xxxxxxxx
resource.jdbc.batchGetUnit=1000
resource.jdbc.batchPutUnit=1000
resource.jdbc.connect.retryCount=3
resource.jdbc.connect.retryInterval=10
resource.jdbc.statement.truncate=TRUNCATE TABLE {0}
resource.jdbc.properties.loginTimeout=10
resource.jdbc.properties.DatabaseType=DVS
resource.jdbc.properties.NetworkTimeout=30
...
36
(8) デプロイ / 実行…
 MDSSアクセス用JDBCドライバーの設定を行う
– Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、
$ASAKUSA_HOME/windgate/plugin/にコピー
 bashに変更し、yaessによりバッチアプリケーションを実行
dv-jdbc-3.1.22756.jar
log4j-api-2.4.1.jar
log4j-core-2.4.1.jar
datanucleus-api-jdo-3.2.6.jar
datanucleus-core-3.2.10.jar
datanucleus-rdbms-3.2.9.jar
SPARKID:/u/asakusa/asakusa-develop:>bash
bash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01
37
メモ
 各種バージョンの整合性(開発環境、実行環境)は厳密に合わせる必要がある。
– 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
データ型
Asakusa
Framework
DMDL
Javaクラス JDBC
Spark on z/OS
DB2
MDSS
(IMS,VSAM,etc)
32bit符号付き整数 INT
int
(IntOption)
int ○ ○
64bit符号付き整数 LONG
long
(LongOption)
long
○
(SQL_Bigint)
※
(将来対応予定)
単精度浮動小数点 FLOAT
float
(FloatOption)
float ○
倍精度浮動小数点 DOUBLE
Double
(DoubleOption)
double ○
文字列 TEXT
Text
(StringOption)
String ○ ○
10進数 DECIMAL
BigDecimal
(DecimalOption)
BigDecimal ○ ○
日付 DATE
Date
(DateOption)
java.sql.Date ○
日時 DATETIME
DateTime
(DateTimeOption)
Java.sql.Timesta
mp
※
(SQL_Time)
論理値 BOOLEAN
Boolean
(BooleanOption)
boolean
8bit符号付き整数 BYTE
byte
(ByteOption)
byte
○
(SQL_Binary)
○
16bit符号付き整数 SHORT
Short
(ShortOption)
short
○
(SQL_Smallint)
○
Spark on z/OSとAsakusa Framework DMDLデータ型の対応
39
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 BINARY
PIC S9(n) USAGE COMP
PIC S9(n) USAGE COMP-4
PIC S9(n) USAGE COMP-5
PIC 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-3
PIC 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
参考
Asakusa Frameworkチュートリアルのシナリオ*を
Spark on z/OS上で稼働させるための詳細手順
* http://docs.asakusafw.com/basic-tutorial/0.8/release/ja/html/index.html
41
データ準備
 概要
– 入力データは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
データ準備
 入力データ
– 商品マスター: 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-Shinagawa
0002SuperMakuhari-Shibuya
0055SuperMakuhari-Heiwajima
0004SuperMakuhari-Nishiarai
2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY
2011-04-01 10:31:0000014922020002000.......イ...DDUMMY
2011-04-01 10:32:0000014922030003000.......エ....DUMMY
2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY
2011-04-01 10:31:0000014922020002000.......イ...DDUMMY
2011-04-01 10:32:0000014922030003000.......エ....DUMMY
...
数値フィールドはバイナリ
で指定する必要あり
元はcsvファイル名を指定
するフィールドなのでここ
ではDUMMYとする
43
データ準備
 MDSS経由でアクセスするためのVirtual Tableを作成
このVirutual Tableの名前が
JDBC経由でアクセスされる
テーブル名となる
44
開発環境整備
 環境
– CentOS V7.2
– Jinrikisha V0.7.6 (& Shafu, DMDLエディター)
 インストーラーの入手
– 旧バージョンのJinrikishaは以下のサイトからダウンロード可能
 Jinrikisha ダウンロードアーカイブ
http://docs.asakusafw.com/jinrikisha/ja/html/download-archive.html
45
開発環境整備
 インストール
– 以下の手順に従って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
開発環境整備
 Preferences - jinrikisha
– Gradleのバージョンと、使用するAsakusa Frameworkのバージョンとの整合性を合わせる
2.8を選択
47
プロジェクトの作成
 File > New > Gradleプロジェクトをテンプレートから生成
テンプレート選択画面では、
Asakusa Project Template -
0.7.6を選択
48
プロジェクトにAsakusa Frameworkの構成
 プロジェクト右クリック > jinrikisha > Asakusa開発環境の構成 > Asakusa Frameworkのインストール
49
DMDL作成
 src/main/dmdl/models.dmdlを作成
Spark on z/OSで稼働させるための修正ポイント
Direct I/Oはサポートされないため、全てWindGate経由でアクセスするよう定義する必要があります。
入力用のデータモデルはJDBC(MDSS経由)、出力用のデータモデルはローカルファイルシステム(USS)として定義します。
テーブル名、カラム名はVirtual Tableとして定義した名前に合わせます。型もMDSSでサポートされる型に合わせて定義します
(DATE型、DATETIMEは使用不可)。
50
データモデルクラス作成
 プロジェクト右クリック > jinrikisha > DMDLからデータモデルクラスを作成
build/generated-
souces/modelgenに各種クラス
が生成される。
51
演算子(Operator)の作成
 src/main/java/com.example.operator/CategorySummaryOperator.javaを作成
Spark on z/OSで稼働させるための修正ポイント
日付、時刻の型が使えないため、日付、時刻は文字列型として読み込む必要があります。
そのため、日付、時刻の型として情報を扱いたい場合は、型変換を行う演算子を組み込む必要があります。
ここでは、簡素化のために、日付/時刻を扱うロジック自体を省くこととします(売り上げ日時が、マスター上の有効範囲かどうか
のチェックは行わないようにする)。
52
フロー部品(FlowPart)の作成
 src/main/java/com.example.flowpart/CategorySummaryFlowPart.javaを作成
Spark on z/OSで稼働させるための修正ポイント
特に無し
53
ジョブフローの作成
 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
バッチの作成
 src/main/java/com.example.batch/SummarizeBatch.javaを作成
Spark on z/OSで稼働させるための修正ポイント
特に無し
55
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
デプロイメント・アーカイブの生成
 プロジェクト右クリック - jinrikisha - Asakusaデプロイメントアーカイブを生成
build以下にxxx.tar.gzファイル
が生成される。
このファイルをUSS上にデプロ
イする。
57
デプロイ
 開発環境(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_MDSS03
SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS03
SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS03:>tar -xvf ../asakusa-tutorial076-mdss03.tar
58
デプロイ
 環境変数を作業シェルに適用
SPARKID:/u/asakusa/asakusa-develop:>cat env.sh
export JAVA_HOME=/usr/lpp/java/J8.0_64
#export HADOOP_CMD=
export SPARK_HOME=/usr/lpp/IBM/Spark
export SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submit
export ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS03
export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-develop
export _BPX_SPAWN_SCRIPT=YES
export _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
デプロイ
 .shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える
SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh
#!/bin/sh
cd ~
for n in `find $ASAKUSA_HOME -name *.sh`; do
mv $n $n.org
iconv -f IBM-943 -t IBM-939 $n.org > $n
done
for n in `find $ASAKUSA_HOME -name *.properties`; do
mv $n $n.org
iconv -f IBM-943 -t IBM-939 $n.org > $n
done
for n in `find $ASAKUSA_HOME -name *.sh`; do
chmod +x $n
done
SPARKID:/u/asakusa/asakusa-develop:>./conv.sh
60
デプロイ
 $ASAKUSA_HOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンクを
作成
SPARKID:/u/asakusa/asakusa-develop:>cat link.sh
#!/bin/sh
cd $ASAKUSA_HOME/windgate/lib
ln -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/lib
total 2336
drwxr-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.jar
lrwxrwxrwx 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
デプロイ
 WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の
設定を行う
$ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋
...
# Local File System
resource.local=com.asakusafw.windgate.stream.file.FileResourceProvider
resource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS03/example-dataset
# JDBC
resource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProvider
resource.jdbc.driver=com.rs.jdbc.dv.DvDriver
resource.jdbc.url=jdbc:rs:dv://mdsshostname:1200
resource.jdbc.user=sparkid
resource.jdbc.password=xxxxxxxx
resource.jdbc.batchGetUnit=1000
resource.jdbc.batchPutUnit=1000
resource.jdbc.connect.retryCount=3
resource.jdbc.connect.retryInterval=10
resource.jdbc.statement.truncate=TRUNCATE TABLE {0}
resource.jdbc.properties.loginTimeout=10
resource.jdbc.properties.DatabaseType=DVS
resource.jdbc.properties.NetworkTimeout=30
...
62
デプロイ
 MDSSアクセス用JDBCドライバーの設定を行う
Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、
$ASAKUSA_HOME/windgate/plugin/にコピー
dv-jdbc-3.1.22756.jar
log4j-api-2.4.1.jar
log4j-core-2.4.1.jar
datanucleus-api-jdo-3.2.6.jar
datanucleus-core-3.2.10.jar
datanucleus-rdbms-3.2.9.jar
63
実行
 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:>bash
bash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01
カテゴリコード,販売数量,売上合計
1401,13333336,1306666928
1300,20000004,2000000400
1600,6666668,800000160
ファイル名,日時,店舗コード,商品コード,メッセージ
DUMMY,2011-04-01 10:33:00,9999,4922010001000,店舗不明
DUMMY,2011-04-01 10:34:00,0001,9999999999999,商品不明
64
65
EOF

More Related Content

Viewers also liked

Preaty workshop activities
Preaty workshop activitiesPreaty workshop activities
Preaty workshop activitiesCardet1
 
Magazine advert analysis jay z
Magazine advert analysis jay zMagazine advert analysis jay z
Magazine advert analysis jay zjadeashworthx
 
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक से
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक सेगाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक से
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक सेGovats Radhe Ravoria
 
Power point presentation
Power point presentationPower point presentation
Power point presentationjengpanca
 
Preaty workshop activities
Preaty workshop activitiesPreaty workshop activities
Preaty workshop activitiesCardet1
 
Module 7: Delivering and Managing Training Programs
Module 7: Delivering and Managing Training ProgramsModule 7: Delivering and Managing Training Programs
Module 7: Delivering and Managing Training ProgramsCardet1
 
Magazine advert Analysis Jessie J
Magazine advert Analysis Jessie JMagazine advert Analysis Jessie J
Magazine advert Analysis Jessie Jjadeashworthx
 
Kickstarter format
Kickstarter formatKickstarter format
Kickstarter formatMoon Gi Choi
 
Motwalls 140508
Motwalls 140508Motwalls 140508
Motwalls 140508Motwalls
 
Market research using survery monkey
Market research using survery monkeyMarket research using survery monkey
Market research using survery monkeyjadeashworthx
 
Aao gay-se-prem-kare-by-radhe-shyam-ravoria
Aao gay-se-prem-kare-by-radhe-shyam-ravoriaAao gay-se-prem-kare-by-radhe-shyam-ravoria
Aao gay-se-prem-kare-by-radhe-shyam-ravoriaGovats Radhe Ravoria
 
Работа с CSS-стилями в GeoServer
Работа с CSS-стилями в GeoServerРабота с CSS-стилями в GeoServer
Работа с CSS-стилями в GeoServerAndrey Zhukov
 
Working capital management handout emerg
Working capital management handout emergWorking capital management handout emerg
Working capital management handout emergeMERG
 

Viewers also liked (17)

CV_Karan
CV_KaranCV_Karan
CV_Karan
 
Our pitch
Our pitchOur pitch
Our pitch
 
Preaty workshop activities
Preaty workshop activitiesPreaty workshop activities
Preaty workshop activities
 
Magazine advert analysis jay z
Magazine advert analysis jay zMagazine advert analysis jay z
Magazine advert analysis jay z
 
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक से
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक सेगाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक से
गाय की महिमा।। गीता प्रेस के कल्याण गो अंक विशेषांक से
 
Power point presentation
Power point presentationPower point presentation
Power point presentation
 
Preaty workshop activities
Preaty workshop activitiesPreaty workshop activities
Preaty workshop activities
 
Module 7: Delivering and Managing Training Programs
Module 7: Delivering and Managing Training ProgramsModule 7: Delivering and Managing Training Programs
Module 7: Delivering and Managing Training Programs
 
Magazine advert Analysis Jessie J
Magazine advert Analysis Jessie JMagazine advert Analysis Jessie J
Magazine advert Analysis Jessie J
 
Kickstarter format
Kickstarter formatKickstarter format
Kickstarter format
 
Magazine analysis
Magazine analysisMagazine analysis
Magazine analysis
 
Motwalls 140508
Motwalls 140508Motwalls 140508
Motwalls 140508
 
Market research using survery monkey
Market research using survery monkeyMarket research using survery monkey
Market research using survery monkey
 
Aao gay-se-prem-kare-by-radhe-shyam-ravoria
Aao gay-se-prem-kare-by-radhe-shyam-ravoriaAao gay-se-prem-kare-by-radhe-shyam-ravoria
Aao gay-se-prem-kare-by-radhe-shyam-ravoria
 
Regional operations vice president
Regional operations vice presidentRegional operations vice president
Regional operations vice president
 
Работа с CSS-стилями в GeoServer
Работа с CSS-стилями в GeoServerРабота с CSS-стилями в GeoServer
Работа с CSS-стилями в GeoServer
 
Working capital management handout emerg
Working capital management handout emergWorking capital management handout emerg
Working capital management handout emerg
 

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

  • 1. 2016年11月 日本アイ・ビー・エム株式会社 藤岡英典 Spark on z/OSと Asakusa Frameworkによる 基幹バッチアプリケーション開発
  • 3. 3 IBM z Systems 本資料では、Spark on z/OSを活用して基幹バッチを 開発・実行するソリューションの実際についてご紹介しています (オープンソースAsakusa Framework*と組み合わせたソリューション) Asakusa Framework * ノーチラス・テクノロジーズ社の登録商標 http://www.asakusafw.com/
  • 4. 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を意識せず に開発可能です。
  • 5. 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
  • 7. 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と略記
  • 8. 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とデータソースの マッピングを行う
  • 9. Spark on z/OSと基幹オンラインの連携 9 z/OS Spark アプリケーション Java z/OS (USS上で稼働) Spark SQL Spark Streaming MLlib (機械学習) GraphX Apache Spark Core RDD RDD RDD RDD RDD 外部 分散システムMDSS OLTP アプリケーション (CICS、IMS…) Sparkを基幹業務の 延長線上と考え オンラインから利用 DB2 IMS VSAM SAM
  • 10. Asakusa FrameworkによってSparkは基幹バッチにも適用できる 10 z/OS Java z/OS (USS上で稼働) Spark SQL Spark Streaming MLlib (機械学習) GraphX 外部 分散システム バッチアプリケーション OLTP アプリケーション (CICS、IMS…) Sparkを基幹業務の 延長線上と考え バッチから利用 Spark アプリケーション Apache Spark Core RDD RDD RDD RDD RDD MDSS DB2 IMS VSAM SAM
  • 11. コストについて 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)と比較 して割安に価格設定されている。
  • 12. Asakusaとのバージョン整合性は厳密に合わせること Q: Spark on z/OSのバージョンは? A: 1.5.2です(2016/11現在)。これに対応するAsakusaのバージョンは0.7.6ですので、今回は これを使用しました。 12 開発環境 実行環境 Asakusa Framework Asakusa on Spark Gradle 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を使用
  • 13. その他、気になること 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
  • 14. バッチアプリ開発・実行  結論: Asakusa on z/OSのアプリケーションが正常実行できた。 – hadoopコマンドがないというメッセージは出るものの、実行自体には問題ない  開発: 売上データの振り分け・マスターデータとの結合・集計を行うサンプルアプリケーション (チュートリアル)をベースに、入力データをz/OSデータセットに変換・配置して実行 – http://docs.asakusafw.com/basic-tutorial/  詳細: いくつかのノウハウがある。本資料の「補足」にて後述。  性能: 想定通り、zIIPでほとんどのCPU処理を行うことができ、実用的なスループットが得ら れた。(次ページに検証) 14
  • 15. Asakusa on z/OS検証環境 z/OS Java z/OS (USS上で稼働) Apache Spark Core USS SAM データセット MDSS アプリケーション 店舗マスター 商品マスター 売上明細 集計結果 Telnet接続し、 YAESSによりバッチアプ リケーション実行 操作端末 15
  • 16. データソースをホストデータとして準備  チュートリアルのシナリオにて、売り上げ情報のレコード数を増幅してアプリケーションを実行  入力データを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-Shinagawa 0002SuperMakuhari-Shibuya 0055SuperMakuhari-Heiwajima 0004SuperMakuhari-Nishiarai 2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY 2011-04-01 10:31:0000014922020002000.......イ...DDUMMY 2011-04-01 10:32:0000014922030003000.......エ....DUMMY 2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY 2011-04-01 10:31:0000014922020002000.......イ...DDUMMY 2011-04-01 10:32:0000014922030003000.......エ....DUMMY ... 16
  • 17. 結果:処理スループットは現実的  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 Elapse(msec) bytes 0 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 0 5000000 10000000 15000000 20000000 25000000 Elapse(msec) # of records 17
  • 18. 結果: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
  • 19. まとめ  Asakusa FrameworkによるバッチアプリケーションをSpark on z/OS上で 実行することができた。  セキュリティ、スキル、コストの観点で、バッチアプリケーションを進化できるソ リューションになり得る。 19
  • 21. 開発シナリオ  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
  • 22. 前提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
  • 23. 前提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
  • 24. 開発の流れ (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
  • 25. (1) 対象データの準備  対象データはMDSS経由でアクセスされるz/OS上データ(VSAM, SAM, IMS DB等)、もしくは、 USS上のファイルとする。  MDSS経由でアクセスするデータの場合、Virtual TableなどJDBCでアクセスできるようにするための MDSS上の設定は別途必要(ここでは詳細は触れない)。  USS上のファイルの場合、データはUTF-8で用意する。 ※ z/OSではHadoopはサポートされていない 25
  • 26. (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
  • 27. 参考: 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_name file_name : TEXT; }; WindGateローカルファイルシステムアクセス (USS上のcsvファイルの場合) WindGate JDBCアクセス (MDSS経由のメインフレームデータの場合) 27
  • 28. (3) 演算子の作成、(4) フロー部品の作成  この部分の開発は、実際のデータの持ち方には直接依存しないため、一般的なAsakusa Framework の作法に従えばよく、特にSpark on z/OS特有の考慮点は無い。  ただし、前述の通り、使用できる型の制約等があり、ロジックで型変換などの対応が必要であれば、その 部分を考慮した実装は必要。 28
  • 29. (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
  • 30. (6) バッチの作成  (5) ジョブフロー作成と同様、テスト時のMDSSアクセス(Read-only)に注意 30
  • 31. (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
  • 32. (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.asakusafwVersion archiveName "${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
  • 33. (8) デプロイ / 実行  前提 – Spark on z/OS実行可能なユーザーで操作する想定  生成された.tar.gzファイルをUSS上にバイナリーモードで転送し、gunzipを行う – gzipが入っていない環境の場合、tarに変換してから転送 – 例: /u/asakusa/asakusa-develop/asakusa_MDSS01に展開  環境変数を作業シェルに適用 SPARKID:/u/asakusa/asakusa-develop:>mkdir asakusa_MDSS01 SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS01 SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS01:>tar -xvf ../asakusa-tutorial076-mdss01.tar SPARKID:/u/asakusa/asakusa-develop:>cat env.sh export JAVA_HOME=/usr/lpp/java/J8.0_64 #export HADOOP_CMD= export SPARK_HOME=/usr/lpp/IBM/Spark export SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submit export ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS01 export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-develop export _BPX_SPAWN_SCRIPT=YES export _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 33
  • 34. (8) デプロイ / 実行…  .shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh #!/bin/sh cd ~ for n in `find $ASAKUSA_HOME -name *.sh`; do mv $n $n.org iconv -f IBM-943 -t IBM-939 $n.org > $n done for n in `find $ASAKUSA_HOME -name *.properties`; do mv $n $n.org iconv -f IBM-943 -t IBM-939 $n.org > $n done for n in `find $ASAKUSA_HOME -name *.sh`; do chmod +x $n done SPARKID:/u/asakusa/asakusa-develop:>./conv.sh 34
  • 35. (8) デプロイ / 実行…  ASAKUSAHOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンク作成 SPARKID:/u/asakusa/asakusa-develop:>cat link.sh #!/bin/sh cd $ASAKUSA_HOME/windgate/lib ln -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/lib total 2336 drwxr-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.jar lrwxrwxrwx 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
  • 36. (8) デプロイ / 実行…  WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の 設定を行う – $ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋 ... # Local File System resource.local=com.asakusafw.windgate.stream.file.FileResourceProvider resource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS01/example-dataset # JDBC resource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProvider resource.jdbc.driver=com.rs.jdbc.dv.DvDriver resource.jdbc.url=jdbc:rs:dv://mdsshostname:1200 resource.jdbc.user=sparkid resource.jdbc.password=xxxxxxxx resource.jdbc.batchGetUnit=1000 resource.jdbc.batchPutUnit=1000 resource.jdbc.connect.retryCount=3 resource.jdbc.connect.retryInterval=10 resource.jdbc.statement.truncate=TRUNCATE TABLE {0} resource.jdbc.properties.loginTimeout=10 resource.jdbc.properties.DatabaseType=DVS resource.jdbc.properties.NetworkTimeout=30 ... 36
  • 37. (8) デプロイ / 実行…  MDSSアクセス用JDBCドライバーの設定を行う – Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、 $ASAKUSA_HOME/windgate/plugin/にコピー  bashに変更し、yaessによりバッチアプリケーションを実行 dv-jdbc-3.1.22756.jar log4j-api-2.4.1.jar log4j-core-2.4.1.jar datanucleus-api-jdo-3.2.6.jar datanucleus-core-3.2.10.jar datanucleus-rdbms-3.2.9.jar SPARKID:/u/asakusa/asakusa-develop:>bash bash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01 37
  • 38. メモ  各種バージョンの整合性(開発環境、実行環境)は厳密に合わせる必要がある。 – 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
  • 39. データ型 Asakusa Framework DMDL Javaクラス JDBC Spark on z/OS DB2 MDSS (IMS,VSAM,etc) 32bit符号付き整数 INT int (IntOption) int ○ ○ 64bit符号付き整数 LONG long (LongOption) long ○ (SQL_Bigint) ※ (将来対応予定) 単精度浮動小数点 FLOAT float (FloatOption) float ○ 倍精度浮動小数点 DOUBLE Double (DoubleOption) double ○ 文字列 TEXT Text (StringOption) String ○ ○ 10進数 DECIMAL BigDecimal (DecimalOption) BigDecimal ○ ○ 日付 DATE Date (DateOption) java.sql.Date ○ 日時 DATETIME DateTime (DateTimeOption) Java.sql.Timesta mp ※ (SQL_Time) 論理値 BOOLEAN Boolean (BooleanOption) boolean 8bit符号付き整数 BYTE byte (ByteOption) byte ○ (SQL_Binary) ○ 16bit符号付き整数 SHORT Short (ShortOption) short ○ (SQL_Smallint) ○ Spark on z/OSとAsakusa Framework DMDLデータ型の対応 39
  • 40. 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 BINARY PIC S9(n) USAGE COMP PIC S9(n) USAGE COMP-4 PIC S9(n) USAGE COMP-5 PIC 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-3 PIC 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
  • 41. 参考 Asakusa Frameworkチュートリアルのシナリオ*を Spark on z/OS上で稼働させるための詳細手順 * http://docs.asakusafw.com/basic-tutorial/0.8/release/ja/html/index.html 41
  • 42. データ準備  概要 – 入力データは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
  • 43. データ準備  入力データ – 商品マスター: 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-Shinagawa 0002SuperMakuhari-Shibuya 0055SuperMakuhari-Heiwajima 0004SuperMakuhari-Nishiarai 2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY 2011-04-01 10:31:0000014922020002000.......イ...DDUMMY 2011-04-01 10:32:0000014922030003000.......エ....DUMMY 2011-04-01 10:30:0000014922010001000.......ツ...ツDUMMY 2011-04-01 10:31:0000014922020002000.......イ...DDUMMY 2011-04-01 10:32:0000014922030003000.......エ....DUMMY ... 数値フィールドはバイナリ で指定する必要あり 元はcsvファイル名を指定 するフィールドなのでここ ではDUMMYとする 43
  • 44. データ準備  MDSS経由でアクセスするためのVirtual Tableを作成 このVirutual Tableの名前が JDBC経由でアクセスされる テーブル名となる 44
  • 45. 開発環境整備  環境 – CentOS V7.2 – Jinrikisha V0.7.6 (& Shafu, DMDLエディター)  インストーラーの入手 – 旧バージョンのJinrikishaは以下のサイトからダウンロード可能  Jinrikisha ダウンロードアーカイブ http://docs.asakusafw.com/jinrikisha/ja/html/download-archive.html 45
  • 46. 開発環境整備  インストール – 以下の手順に従って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
  • 47. 開発環境整備  Preferences - jinrikisha – Gradleのバージョンと、使用するAsakusa Frameworkのバージョンとの整合性を合わせる 2.8を選択 47
  • 48. プロジェクトの作成  File > New > Gradleプロジェクトをテンプレートから生成 テンプレート選択画面では、 Asakusa Project Template - 0.7.6を選択 48
  • 49. プロジェクトにAsakusa Frameworkの構成  プロジェクト右クリック > jinrikisha > Asakusa開発環境の構成 > Asakusa Frameworkのインストール 49
  • 50. DMDL作成  src/main/dmdl/models.dmdlを作成 Spark on z/OSで稼働させるための修正ポイント Direct I/Oはサポートされないため、全てWindGate経由でアクセスするよう定義する必要があります。 入力用のデータモデルはJDBC(MDSS経由)、出力用のデータモデルはローカルファイルシステム(USS)として定義します。 テーブル名、カラム名はVirtual Tableとして定義した名前に合わせます。型もMDSSでサポートされる型に合わせて定義します (DATE型、DATETIMEは使用不可)。 50
  • 51. データモデルクラス作成  プロジェクト右クリック > jinrikisha > DMDLからデータモデルクラスを作成 build/generated- souces/modelgenに各種クラス が生成される。 51
  • 52. 演算子(Operator)の作成  src/main/java/com.example.operator/CategorySummaryOperator.javaを作成 Spark on z/OSで稼働させるための修正ポイント 日付、時刻の型が使えないため、日付、時刻は文字列型として読み込む必要があります。 そのため、日付、時刻の型として情報を扱いたい場合は、型変換を行う演算子を組み込む必要があります。 ここでは、簡素化のために、日付/時刻を扱うロジック自体を省くこととします(売り上げ日時が、マスター上の有効範囲かどうか のチェックは行わないようにする)。 52
  • 54. ジョブフローの作成  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
  • 55. バッチの作成  src/main/java/com.example.batch/SummarizeBatch.javaを作成 Spark on z/OSで稼働させるための修正ポイント 特に無し 55
  • 56. 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
  • 57. デプロイメント・アーカイブの生成  プロジェクト右クリック - jinrikisha - Asakusaデプロイメントアーカイブを生成 build以下にxxx.tar.gzファイル が生成される。 このファイルをUSS上にデプロ イする。 57
  • 58. デプロイ  開発環境(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_MDSS03 SPARKID:/u/asakusa/asakusa-develop:>cd asakusa_MDSS03 SPARKID:/u/asakusa/asakusa-develop/asakusa_MDSS03:>tar -xvf ../asakusa-tutorial076-mdss03.tar 58
  • 59. デプロイ  環境変数を作業シェルに適用 SPARKID:/u/asakusa/asakusa-develop:>cat env.sh export JAVA_HOME=/usr/lpp/java/J8.0_64 #export HADOOP_CMD= export SPARK_HOME=/usr/lpp/IBM/Spark export SPARK_CMD=/usr/lpp/IBM/Spark/bin/spark-submit export ASAKUSA_HOME=/u/asakusa/asakusa-develop/asakusa_MDSS03 export ASAKUSA_DEVELOP_HOME=/u/asakusa/asakusa-develop export _BPX_SPAWN_SCRIPT=YES export _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
  • 60. デプロイ  .shファイル、.propertiesファイルをEBCDICに変換し、.shファイルに実行権限を与える SPARKID:/u/asakusa/asakusa-develop:>cat conv.sh #!/bin/sh cd ~ for n in `find $ASAKUSA_HOME -name *.sh`; do mv $n $n.org iconv -f IBM-943 -t IBM-939 $n.org > $n done for n in `find $ASAKUSA_HOME -name *.properties`; do mv $n $n.org iconv -f IBM-943 -t IBM-939 $n.org > $n done for n in `find $ASAKUSA_HOME -name *.sh`; do chmod +x $n done SPARKID:/u/asakusa/asakusa-develop:>./conv.sh 60
  • 61. デプロイ  $ASAKUSA_HOMEのwindgate/libに、Spark on z/OS提供のHadoop関連のjarのシンボリックリンクを 作成 SPARKID:/u/asakusa/asakusa-develop:>cat link.sh #!/bin/sh cd $ASAKUSA_HOME/windgate/lib ln -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/lib total 2336 drwxr-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.jar lrwxrwxrwx 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
  • 62. デプロイ  WindGateのプロファイルにMDSSアクセス用のJDBCの設定、および、ローカルファイルシステムアクセス用の 設定を行う $ASAKUSA_HOME/windgate/profile/asakusa.properties 抜粋 ... # Local File System resource.local=com.asakusafw.windgate.stream.file.FileResourceProvider resource.local.basePath=/u/asakusa/asakusa-develop/asakusa_MDSS03/example-dataset # JDBC resource.jdbc=com.asakusafw.windgate.jdbc.JdbcResourceProvider resource.jdbc.driver=com.rs.jdbc.dv.DvDriver resource.jdbc.url=jdbc:rs:dv://mdsshostname:1200 resource.jdbc.user=sparkid resource.jdbc.password=xxxxxxxx resource.jdbc.batchGetUnit=1000 resource.jdbc.batchPutUnit=1000 resource.jdbc.connect.retryCount=3 resource.jdbc.connect.retryInterval=10 resource.jdbc.statement.truncate=TRUNCATE TABLE {0} resource.jdbc.properties.loginTimeout=10 resource.jdbc.properties.DatabaseType=DVS resource.jdbc.properties.NetworkTimeout=30 ... 62
  • 63. デプロイ  MDSSアクセス用JDBCドライバーの設定を行う Spark on z/OSインストールディレクトリのlibに提供されている以下のjarを、 $ASAKUSA_HOME/windgate/plugin/にコピー dv-jdbc-3.1.22756.jar log4j-api-2.4.1.jar log4j-core-2.4.1.jar datanucleus-api-jdo-3.2.6.jar datanucleus-core-3.2.10.jar datanucleus-rdbms-3.2.9.jar 63
  • 64. 実行  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:>bash bash-4.2$ $ASAKUSA_HOME/yaess/bin/yaess-batch.sh spark.example.summarizeSales -A date=2011-04-01 カテゴリコード,販売数量,売上合計 1401,13333336,1306666928 1300,20000004,2000000400 1600,6666668,800000160 ファイル名,日時,店舗コード,商品コード,メッセージ DUMMY,2011-04-01 10:33:00,9999,4922010001000,店舗不明 DUMMY,2011-04-01 10:34:00,0001,9999999999999,商品不明 64