JP5939123B2 - 実行制御プログラム、実行制御方法および情報処理装置 - Google Patents

実行制御プログラム、実行制御方法および情報処理装置 Download PDF

Info

Publication number
JP5939123B2
JP5939123B2 JP2012224604A JP2012224604A JP5939123B2 JP 5939123 B2 JP5939123 B2 JP 5939123B2 JP 2012224604 A JP2012224604 A JP 2012224604A JP 2012224604 A JP2012224604 A JP 2012224604A JP 5939123 B2 JP5939123 B2 JP 5939123B2
Authority
JP
Japan
Prior art keywords
file
input
data
unit
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012224604A
Other languages
English (en)
Other versions
JP2014078085A5 (ja
JP2014078085A (ja
Inventor
晴康 上田
晴康 上田
高光 前田
高光 前田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012224604A priority Critical patent/JP5939123B2/ja
Priority to US14/048,354 priority patent/US10095699B2/en
Publication of JP2014078085A publication Critical patent/JP2014078085A/ja
Publication of JP2014078085A5 publication Critical patent/JP2014078085A5/ja
Application granted granted Critical
Publication of JP5939123B2 publication Critical patent/JP5939123B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/116Details of conversion of file system types or formats
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、実行制御プログラム、実行制御方法および情報処理装置に関する。
クラウドコンピューティングの普及に伴い、クラウド上に保存される大量のデータを複数のサーバで分散して処理を実行する分散処理システムが利用されている。分散処理システムとしては、HDFS(Hadoop Distributed File System)とMapReduceとを基盤技術とするHadoop(登録商標)が知られている。
HDFSは、複数のサーバにデータを分散格納するファイルシステムである。MapReduceは、HDFS上のデータをタスクと呼ばれる単位で分散処理する仕組みであり、Map処理、Shuffleソート処理、Reduces処理を実行する。なお、Map処理とReduces処理は、一般的にJava(登録商標)で開発され、Shuffleソート処理は、Hadoopに標準装備されている。このようなHadoopでは、1種類の入力をMapReduceで処理して1種類の出力を得るのが一般的である。
近年では、Hadoopを活用して、Hadoopには標準で装備されない、バッチ処理などの業務プログラム(以下、適宜「外部プログラム」と記載する)を効率的に実行することが行われている。外部プログラムは、形式の異なる複数の入力を処理対象とし、一般的にJava(登録商標)以外のプログラムで開発される。
例えば、外部プログラムをHadoopで実行する技術として、Hadoopの標準ツールであるHadoop Streamingが知られている。Hadoop Streamingは、Map処理またはReduce処理で外部プログラムを呼び出す技術である。具体的には、Map処理またはReduce処理において、タスク1つにつき外部プログラムを1回呼び出し、外部プログラムの標準出力に処理結果を出力する。
また、複数種類の入力を処理するHadoop関連の技術として、reduce side joinが知られている。例えば、突合せ処理の外部プログラムを実行する場合に、入力種類ごとに入力ファイル名、入力フォーマットを処理するクラス、Map処理を実行するクラスを定義してMap処理を実行し、突合せキーと突合せ対象のデータとを対応付けたデータを出力する。続いて、Shuffleソート処理において、突合せキーでソートされ、突合せキーごとにグループ化されたデータを出力する。その後、入力種類ごとにReduceクラスを定義してReduce処理を実行し、マッチング処理を実行する。
Deans and S. Ghemawat, MapReduce著 「Simplified Data Processing on Large Clusters, Proceedings of the 6th Symposium on Operating Systems Design and Implementation」、pp.137-150、December 6 2004 Apache Hadoop 1.0.3 documentation, 「Hadoop Streaming」,URL「http://hadoop.apache.org/docs/r1.0.3/streaming.html」 Tom White著、「Hadoop第二版、オライリージャパン、8.3.2 reduce側結合」、P269-272、2011年7月発行
しかしながら、複数入力を処理対象とする外部プログラムをHadoopなどの分散処理システムで実行させるには制約が多いことから、現実的には実行させるのが難しいという問題がある。
具体的には、Hadoop Streamingは、標準入出力経由で処理対象のデータを出力するので、引数や環境変数で処理対象のデータを受信する外部プログラムを呼び出して実行することができない。
また、reduce side joinでは、既存の外部プログラムと同様の処理を実行するプログラムを再開発してHadoopに移植することになり、再開発のリスクや移植によるリスクがあり、頻繁に外部プログラムを移植することができず、開発性が低い。
例えば、reduce side joinを用いる場合には、外部プログラムが処理対象とする入力ごとに、Map処理で処理対象となるMap処理クラスを実装し、さらに、入力ごとにReduce処理で処理対象となるReduce処理クラスを実装する。また、これらのクラスを実装する際に、外部プログラムが処理対象とするRDB(Relational Database)のファイルまたはRDBのファイルをアンロードしたCSV(Comma Separated Values)ファイルとは異なるKVS(Key Value Store)方式でデータを定義する。また、Java以外で開発されたプログラムであっても、reduce side joinのReduce処理で呼び出せるように、Javaに再開発して移植する。
つまり、reduce side joinを用いる場合には、複数種類の入力を1種類の入力のように見せかけて、Map処理およびReduce処理を実行し、Reduce処理において移植した外部プログラムを呼び出して実行することになる。
ところが、MapクラスやReduceクラスは、外部プログラムが処理する何百カラムの複雑なデータに対して、装置の支援無しに人手によって実装することになり、時間もかかり、人為的なミスのリスクも増える。また、外部プログラムの移植は、リスクが高く、好ましい手法とは言えない。なぜなら、外部プログラムは、複雑な業務ロジックが実装され、既に多くのテストを繰り返して実行実績も豊富なこともあり、簡単に移植できるものではないからである。
このように、Hadoop Streamingやreduce side joinを用いて外部プログラムを実行する場合には、作業時間の増加、人為的ミスの増加、外部プログラムの移植に伴うリスクなどがあり、外部プログラムをHadoopで実行するのが難しく、Hadoopの開発性の低下にもなる。
1つの側面では、複数入力を処理対象とする外部プログラムを分散処理システムで実行させる際の制約を緩和することができる実行制御プログラム、実行制御方法および情報処理装置を提供することを目的とする。
第1の案では、コンピュータは、形式の異なる複数の入力ファイルを読み込み、各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、入力ファイルごとに生成する。コンピュータは、突合キーに基づいて、各中間ファイル内のデータをソートする。コンピュータは、データがソートされた各中間ファイルから、入力ファイルの各形式のデータをそれぞれ抽出して、各入力ファイルに対してデータがソートされた複数の出力ファイルを生成する。コンピュータは、生成した複数の出力ファイルを、データを突合する突合プログラムに入力する。
本発明の1実施態様によれば、複数入力を処理対象とする外部プログラムを分散処理システムで実行させる際の制約を緩和することができる。
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。 図2は、実施例1に係るマスタ計算機の機能構成を示す機能ブロック図である。 図3は、設定ファイルDBに記憶される情報の例を示す図である。 図4は、タスクリストDBに記憶される情報の例を示す図である。 図5は、スレーブ計算機に送信されるReduceタスク情報の例を示す図である。 図6は、実施例1に係るスレーブ計算機の機能構成を示す機能ブロック図である。 図7は、実施例1に係るシステムが実行する外部プログラム実行処理の流れを示すシーケンス図である。 図8は、実施例1に係るMap処理の流れを示すフローチャートである。 図9は、実施例1に係るReduce処理の流れを示すフローチャートである。 図10は、実施例2に係るReduce処理の初期化の流れを示すフローチャートである。 図11は、実施例2に係るReduce処理の本処理および完了処理の流れを示すフローチャートである。 図12は、実施例2に係る出力読み込みスレッドの起動処理の流れを示すフローチャートである。 図13は、Map処理の具体例を説明する図である。 図14は、シャッフルソート処理の具体例を説明する図である。 図15は、Reduce処理の具体例を説明する図である。 図16は、突合プログラム実行後の出力先の具体例を説明する図である。 図17は、ハードウェア構成例を示す図である。
以下に、本願の開示する実行制御プログラム、実行制御方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[全体構成]
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。図1に示すように、この分散処理システムは、分析者端末2、入力DB(DataBase)サーバ3、マスタ計算機10、スレーブ計算機20、スレーブ計算機30がネットワーク1を介して相互に通信可能に接続される。
この分散処理システムでは、Hadoop(登録商標)などの分散処理フレームワークを使用した分散処理アプリケーションが各計算機で実行されており、データ基盤としてHDFSなどを使用する。分析者端末2は、分散処理システムを利用して、分散処理フレームワークとは異なるフレームワークで実装された外部プログラムを実行し、データの解析を行うユーザの端末である。
入力DBサーバ3は、外部プログラムが処理対象とする複数種類の入力ファイルを記憶するデータベースサーバである。例えば、入力DBサーバ3は、商品マスタDBと売上明細DBとを記憶する。また、入力DBサーバ3が記憶するDBは、RDBのファイルまたはRDBのファイルをアンロードしたCSVファイル等で構成されているものとする。
マスタ計算機10は、分散処理システムを統括的に管理するサーバである。例えば、マスタ計算機10は、どのデータがいずれのスレーブ計算機に格納されているのかを管理し、各スレーブ計算機に割当てるタスクやジョブなどを管理する。
スレーブ計算機20とスレーブ計算機30は、分散処理アプリケーションを実装し、Map処理やReduce処理を実行して、HDFSで管理されるデータを分散処理するサーバである。この各スレーブ計算機は、形式の異なる複数の入力ファイルを読み込み、各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成する。そして、各スレーブ計算機は、突合キーに基づいて、各中間ファイル内のデータをソートする。続いて、各スレーブ計算機は、データがソートされた各中間ファイルから、入力ファイルの各形式のデータをそれぞれ抽出して、各入力ファイルに対してデータがソートされた複数の出力ファイルを生成する。その後、各スレーブ計算機は、生成した複数の出力ファイルを、データを突合する突合プログラムに入力する。
このように、各スレーブ計算機は、Hadoopとはフレームワークが異なる突合プログラムなどの外部プログラムをHadoopで呼び出す際に、突合プログラムの設定に従って各入力ファイルから突合キーを抽出および突合キーでソートして新ファイルを生成する。そして、各スレーブ計算機は、新ファイルを入力ファイルに指定して突合プログラムを呼び出す。
つまり、各スレーブ計算機は、Hadoopにおいて複数種類の入力ファイルを読込む際に、外部プログラムに直接読込ませるという制約を設ける。このことにより、各スレーブ計算機は、外部プログラムの設定を与えることで、複数種類の入力ファイルを実行する外部プログラムを呼び出すことができる。したがって、複数入力を処理対象とする外部プログラムを分散処理システムで実行させる際の制約を緩和することができる。
[マスタ計算機の構成]
図2は、実施例1に係るマスタ計算機の機能構成を示す機能ブロック図である。図2に示すように、マスタ計算機10は、通信制御部11、記憶部12、制御部13を有する。なお、通信制御部11は、例えばネットワークインタフェースカードなどである。記憶部12は、メモリやハードディスクなどの記憶装置である。制御部13は、プロセッサなどの電子回路である。
通信制御部11は、各スレーブ計算機、分析者端末2、入力DBサーバ3との間で情報を送受信する処理部である。例えば、通信制御部11は、各スレーブ計算機からMap要求やReduce要求を受信し、各スレーブ計算機にMapタスク情報やReduceタスク情報を送信する。また、通信制御部11は、入力DBサーバ3から入力ファイル等を受信する。
記憶部12は、設定ファイルDB12aとタスクリストDB12bとを記憶する記憶部である。また、記憶部12は、各種処理の途中経過を記憶する一時領域や、分散処理アプリケーション等を記憶する。
設定ファイルDB12aは、Javaフレームワークなどの分散処理フレームワーク以外のフレームワークを用いて実装される外部プログラムの処理内容にしたがって設定された設定ファイルを記憶する。ここで記憶される条件は、管理者等によって設定される。また、外部プログラムは、例えばNetCOBOL(登録商標)などで実装された突合プログラムが該当する。
図3は、設定ファイルDBに記憶される情報の例を示す図である。なお、図3では、入力ファイルが2つであり、出力ファイルが2つである場合を例示している。入力ファイルとは、突合プログラムが処理対象とする種類の異なる複数のファイルであり、出力ファイルとは、各スレーブ計算機が外部プログラムを実行した結果を格納するHDFS上の共有ディレクトリ上の共有ファイルである。
図3に示すように、設定ファイルDB12aは、ジョブ設定を行うために設定された各種条件を記憶する。具体的には、設定ファイルには、入力ファイルごとに、入力データファイル名、入力フォーマット処理クラス名、入力フォーマット処理オプション、入力ファイル環境変数名が設定される。
例えば、入力データファイル名01として「/usr/transaction.txt」が設定されており、これは、入力ファイルの1つが「/usr/transaction.txt」であることを示す。また、入力フォーマット処理クラス名01として「固定長フォーマット」が設定されており、これは、入力ファイルを再構築する際に固定長フォーマットを用いることを示す。また、入力フォーマット処理オプション01として「レコード長:80BYTE」が設定されており、これは、入力ファイルを再構成する際に80バイトの大きさで再構築することを示す。また、入力ファイル環境変数名01として「TRAN」が設定されており、これは、入力ファイル01がトランザクションファイルであることを示す。
さらに、設定ファイルには、出力データディレクト名、出力ファイルス名、出力ファイル環境変数名が設定される。例えば、出力データディレクトリ名として「/output」が設定されており、これは、各スレーブ計算機が外部プログラムの処理結果を出力する先のHDFSディレクトとして「/output」が設定されていることを示す。また、出力ファイル名01として「processed.txt」が設定されており、これは、スレーブ計算機20が正常に終了した処理結果を「/output」のファイル「processed.txt」に出力することを示す。なお、図3には、エラーが発生した場合には、「/output」のファイル「errord.txt」に出力することも設定されている。また、出力ファイル環境変数名として「PROCOUT」が設定されており、これは、出力ファイルの環境変数として「PROCOUT」を指定することを示す。
さらに、設定ファイルには、Reduceアプリケーションやソートキーが設定される。例えば、Reduceアプリケーションには「a.out %in01 %in02 %out01 %out02」が設定されており、これは、外部プログラムに入力ファイルを渡す際に、1番目の入力ファイルは第1引数で渡し、2番目の入力ファイルは第2引数として渡すことを示す。また、ソートキー01には「4BYTE〜8BYTE」が設定されており、これは、入力ファイル01の「4BYTE〜8BYTE」をソートキーとして使用することを示す。
タスクリストDB12bは、Mapタスク管理部15等によって生成されたMap処理またはReduce処理のタスクリストを記憶する。図4は、タスクリストDBに記憶される情報の例を示す図である。図4に示すように、タスクリストDB12bは、「タスクID、入力情報、クラス名」を記憶する。ここで、「タスクID」は、タスクを識別する識別子であり、「入力情報」は、入力データとして処理する情報を示し、「クラス名」は、Map処理の際に処理対象とするクラス名を示す。
例えば、タスクID「task_m_1」には、入力情報としてファイル名「/usr/transaction.txt」、「開始位置=0」、「サイズ=1000」が設定されており、クラス名として「フォーマット処理=本フォーマット処理01」、「マップ処理=本Map処理01」が設定されている。これは、入力フォーマット01を用いたMap処理01では、「/usr/transaction.txt」の0バイト目から1000バイト目までを入力データとして使用することを示している。なお、入力フォーマット01を使用するとは、例えば、図3に示した入力ファイルに関する設定条件のうち「01」に該当する条件を使用することを示す。
図2に戻り、制御部13は、設定読込部14、Mapタスク管理部15、Reduceタスク管理部16を有し、これらによって、各スレーブ計算機が実行するMap処理およびReduce処理を管理する処理部である。
設定読込部14は、設定ファイルDB12aから設定ファイルを読込んで、Mapタスク管理部15やReduceタスク管理部16に、設定ファイルに設定される各種条件を通知する処理部である。また、設定読込部14は、各スレーブ計算機に対しても、設定ファイルに設定される各種条件を通知する。
Mapタスク管理部15は、各スレーブ計算機で実行されるMapタスクを管理する処理部である。例えば、Mapタスク管理部15は、Mapタスク準備として、入力ファイルを先頭から所定サイズごとに区切り、入力ファイルの番号でフォーマット処理およびマップ処理のクラス名を切替えて、タスクリストDB12bに登録する。
また、Mapタスク管理部15は、各スレーブ計算機からのタスク要求を受信すると、Mapタスク情報を応答して、各スレーブ計算機にMapタスクを割当てる。例えば、Mapタスク管理部15は、タスクIDが「task_m_1」のレコードをタスクリストDB12bから読み出して、スレーブ計算機20に送信する。
Reduceタスク管理部16は、各スレーブ計算機で実行されるReduceタスクを管理する処理部である。具体的には、Reduceタスク管理部16は、各スレーブ計算機からのタスク要求を受信すると、Reduceタスク情報を応答して、各スレーブ計算機にReduceタスクを割当てる。図5は、スレーブ計算機に送信されるReduceタスク情報の例を示す図である。図5に示すように、スレーブ計算機に送信されるReduceタスク情報は、「タスクID、Map結果情報、クラス名」を対応付けて記憶する。
「タスクID」は、Reduceタスクを識別する識別子である。「Map結果情報」は、Map処理の結果を特定する情報である。「クラス名」は、Reduce処理の際に処理対象とするクラス名を示す。図5の場合、タスクID「task_r_1」のReduceタスクは、スレーブ計算機20で処理されたMapタスクID「task_m_1」のMap処理の結果とスレーブ計算機30で処理されたMapタスクID「task_m_2」のMap処理の結果とを用いて、Reduce処理を実行することを示す。なお、タスクID「task_r_1」のReduceタスクは、クラス名として「本Reduceクラス」が設定されている。
[スレーブ計算機の構成]
次に、スレーブ計算機について説明するが、スレーブ計算機20とスレーブ計算機30とは同様の構成を有するので、ここでは、スレーブ計算機20について説明する。図6は、実施例1に係るスレーブ計算機の機能構成を示す機能ブロック図である。図6に示すように、スレーブ計算機20は、通信制御部21、記憶部22、制御部23を有する。なお、通信制御部21は、例えばネットワークインタフェースカードなどである。記憶部22は、メモリやハードディスクなどの記憶装置である。制御部23は、プロセッサなどの電子回路である。
通信制御部21は、マスタ計算機10、入力DBサーバ3、分析者端末2との間で情報を送受信する処理部である。例えば、通信制御部21は、マスタ計算機10のMapタスク要求やReduceタスク要求を送信し、マスタ計算機10からMapタスク情報やReduceタスク情報を受信する。また、通信制御部21は、入力DBサーバ3から入力ファイル等を受信する。
記憶部22は、中間ファイルDB22aと一時ファイルDB22bとを記憶する記憶部である。また、記憶部22は、分散処理アプリケーションや外部プログラム、入力DBサーバ3から取得された入力ファイルや入力データ等を記憶する。
中間ファイルDB22aは、制御部23等によって読み込まれた入力ファイルや入力データ、また、Map処理の結果やReduce処理の結果を記憶する。すなわち、中間ファイルDB22aは、スレーブ計算機20が外部プログラムを呼び出す前に実行した処理の結果等を記憶する。一時ファイルDB22bは、外部プログラムによって処理された処理結果を記憶する。
制御部23は、Map処理部24とReduce処理部25を有し、これらによって、Map処理およびReduce処理を実行し、さらに、外部プログラムを呼び出して実行する処理部である。Map処理部24は、Map初期化部24a、フォーマット初期化部24b、抽出部24cを有し、これらによってMap処理を実行する処理部である。
Map初期化部24aは、マスタ計算機10から受信したMapタスク情報にしたがって、Mapタスクの初期化を実行する処理部である。具体的には、Map初期化部24aは、どのようなフォーマットで入力ファイルを読み込み、また、ソートキーをどのように読込むかを、設定ファイルにしたがって設定する。
例えば、Map初期化部24aは、受信したMapタスク情報から「本Map処理01」を抽出する。続いて、Map初期化部24aは、抽出した「本Map処理01」から「01」を抽出し、「01」に対応する「ソートキー01=4BYTE〜8BYTE」を設定ファイルから取得する。そして、Map処理部24は、取得した情報をフォーマット初期化部24b、抽出部24c、Reduce処理部25等に出力する。
フォーマット初期化部24bは、Map処理実行結果を出力する中間ファイルのフォーマットの初期化を実行する処理部である。具体的には、フォーマット初期化部24bは、複数の入力を読込むためのアダプタを入力ファイルごとに割当てる。
例えば、フォーマット初期化部24bは、Map初期化部24aから受信した「本Map処理01」の「01」に対応する入力フォーマット処理クラス名や入力フォーマット処理オプション等を設定ファイルから取得して初期化を実行する。ここでは、フォーマット初期化部24bは、「入力フォーマット処理クラス名01=固定長フォーマット」と、「入力フォーマット処理オプション01=レコード長(80BYTE)」等を取得する。
抽出部24cは、Map処理を実行し、入力ファイル等から該当するデータを抽出して中間ファイルを生成する処理部である。具体的には、抽出部24cは、フォーマット初期化部24bによって設定されたフォーマットで入力ファイルの各レコードを読み込む。そして、抽出部24cは、入力からソートキーを抽出してMap出力のKeyとする。また、抽出部24cは、何番目の入力であったかを示すファイルインデックスをKeyまたはValueの一部とし、読み込まれたレコード全体をKeyまたはValueの一部として、Map処理結果として出力する。
例えば、抽出部24cは、Map初期化部24aから受信した「ソートキー01=4BYTE〜8BYTE」にしたがって、入力ファイルのレコード(入力行)からソートキーを抽出する。続いて、抽出部24cは、抽出したソートキーと、ソートキーの抽出元の入力行とを対応付けた中間ファイルを生成して、中間ファイルDB22aに格納する。つまり、抽出部24cは、ソートキーをKey、入力行をValueとするKVS形式の中間ファイルを生成する。なお、マスタ計算機10は、ここで格納された中間ファイルを読み出して、Map処理結果を管理する。
Reduce処理部25は、Shuffle処理部25a、Reduce初期化部25b、再構築部25cを有し、これらによって外部プログラムを呼び出してReduce処理を実行する処理部である。すなわち、Reduce処理部25は、外部プログラムに適した複数の出力ファイルを生成して、外部プログラムを呼び出す。
Shuffle処理部25aは、Hadoopのreduce side joinなどで実行されるシャッフルソート処理を実行する処理部である。例えば、Shuffle処理部25aは、マスタ計算機10に対してReduceタスク要求を送信して、Reduceタスク情報を受信する。そして、Shuffle処理部25aは、受信したReduceタスク情報のMap結果情報にしたがって、自装置がシャッフルソート処理の対象とするMap処理結果を各スレーブ計算機から収集して中間ファイルDB22aに格納する。一例を挙げると、Shuffle処理部25aは、MapタスクID「task_m_2」のMap処理の結果をスレーブ計算機30から取得し、MapタスクID「task_m_1」のMap処理の結果を自装置内の中間ファイルDB22aから取得する。なお、割当てられる手法は、Hadoopの分散手法を用いる。
その後、Shuffle処理部25aは、抽出部24cによって抽出されたソートキーを用いて、収集したMap処理の結果をソートする。そして、Shuffle処理部25aは、ソートした結果を同一キーでグループ化して、中間ファイルDB22aに格納する。なお、各スレーブ計算機で分散処理されたシャッフルソート処理結果は、マスタ計算機10によって各スレーブ計算機から収集されて管理される。
Reduce初期化部25bは、Shuffle処理部25aが取得したReduceタスク情報にしたがって、Reduce処理を実行する前段階として初期化を実行する処理部である。具体的には、Reduce初期化部25bは、どのように外部プログラムを呼び出し、入力ファイルをどのように渡すかを設定する。
例えば、Reduce初期化部25bは、「a.out %in01 %in02 %out01 %out02」と指定して、1番目の入力ファイルを外部プログラムの第1引数に渡す。あるいは、Reduce初期化部25bは、「ENVNAME.01=TRAN」と指定して、入力ファイル01のファイル名をTRAN環境変数に設定して、外部プログラムを呼び出すと設定する。
また、Reduce初期化部25bは、外部プログラムへの入力に該当するファイル名を決定し、外部プログラムを決定したファイル名を用いて呼び出すための準備を実行する。例えば、Reduce初期化部25bは、呼出コマンドの引数の「%in01」を「./in01」に置き換えたり、ユーザ設定の環境変数TRANにファイル名「./in01」を設定したりする。
再構築部25cは、Reduce初期化部25bよって初期化された情報を用いて、マスタ計算機10から指定されたReduceタスクを実行して出力ファイルを生成する。そして、再構築部25cは、出力ファイルを入力ファイルに指定して、外部プログラムを実行する処理部である。すなわち、Reduce初期化部25bは、マスタ計算機10から指定されたReduceタスクを実行し、Shuffle処理部25aの処理結果から、該当するレコードを読み出して該当するファイルに書き込む。
このとき、再構築部25cは、Shuffle処理部25aから出力されたKVS形式の処理結果を、元の入力ファイルと同じファイル形式に再変換する。そして、再構築部25cは、Reduce初期化部25bによって設定された当該ファイルの位置等を引数や環境変数を指定して、外部プログラムを呼び出して実行する。
また、再構築部25cは、外部プログラムの実行によって得られた結果を、一時ファイル22bに格納する。このとき、再構築部25cは、設定ファイル等にしたがって、正常結果とエラー結果とを区別して、出力することもできる。
[シーケンス]
次に、図7を用いて、図1に示した分散処理システムで外部プログラムを実行する際の全体的な処理の流れを説明する。図7は、実施例1に係るシステムが実行する外部プログラム実行処理の流れを示すシーケンス図である。なお、ここで説明を簡略化するために、1台のスレーブ計算機20を例にして説明する。
図7に示すように、マスタ計算機10の設定読込部14は、設定ファイルDB12aから設定情報を読込む(S101)。続いて、Mapタスク管理部15は、入力DBサーバ3から入力ファイルが予め読み込まれたHDFSなどの共有ファイルシステムから入力ファイルを1つ読込み(S102)、データを所定サイズごとに分割し(S103)、タスクリストに登録する(S104)。例えば、Mapタスク管理部15は、入力ファイルの番号で、フォーマット処理およびMap処理のクラス名を切替えて登録する。
そして、マスタ計算機10のMapタスク管理部15は、入力ファイルが他にも存在する場合には(S105:Yes)、S102に戻って以降の処理を繰り返す。一方、Mapタスク管理部15は、入力ファイルが他に存在しない場合には(S105:No)、事前準備が終了したことを示す通知を各スレーブ計算機に送信する(S106とS107)。なお、スレーブ計算機が定期的にタスク要求S108を実行するように構成したり、スレーブ計算機がタスク要求S108を実行した場合に、S110のMapタスク応答が返らないように構成することもでき、このような場合は、S106およびS107を省略することもできる。
この終了通知を受信したスレーブ計算機20のMap処理部24は、Mapタスク要求をマスタ計算機10に送信する(S108とS109)。この要求を受信したマスタ計算機10のMapタスク管理部15は、図4のタスクリストから該当するタスクを抽出して、Mapタスクとしてスレーブ計算機20に応答する(S110とS111)。
スレーブ計算機20のMap処理部24は、受信したMapタスクにしたがってMap処理を実行する(S112)。そして、Reduce処理部25は、Map処理が終了すると、Reduceタスク要求をマスタ計算機10に送信する(S113とS114)。この要求を受信したマスタ計算機10のReduceタスク管理部16は、図5に示すReduceタスクをスレーブ計算機20に応答する(S115とS116)。その後、スレーブ計算機20のReduce処理部25は、受信したReduceタスクにしたがってReduce処理を実行する(S117)。
(Map処理)
次に、図7に示したMap処理について説明する。図8は、実施例1に係るMap処理の流れを示すフローチャートである。図8に示すように、スレーブ計算機20のMap初期化部24aは、クラス名、または、クラス特有の定義より、入力番号(NN)を抽出する(S201)。例えば、Map初期化部24aは、マスタ計算機10から受信したMapタスク情報から「本Maps処理01」の「01」を上記NNとして抽出する。
続いて、Map初期化部24aは、入力番号(NN)とジョブ設定(Mapタスク情報)とからソートキーの読込み位置を抽出する(S202)。例えば、Map初期化部24aは、NN=01であることから、ソートキー(NN)=ソートキー(01)と特定し、「ソートキー=01」に対応付けられる「4BYTE〜8BYTE」を抽出する。
その後、Map処理部24のフォーマット初期化部24bは、クラス名、または、クラス特有の定義より、入力番号(NN)を抽出する(S203)。例えば、フォーマット初期化部24bは、S201と同様の手法で、「01」を上記NNとして抽出する。
続いて、フォーマット初期化部24bは、入力番号(NN)とジョブ設定(Mapタスク情報)とから入力フォーマットのオプションを抽出し初期化を実行する(S204)。例えば、フォーマット初期化部24bはNN=01であることから、「入力フォーマット処理オプション01」に対応付けられる「レコード長:80BYTE」を抽出し、入力ファイルのレコード長を初期化する。
その後、抽出部24cは、入力ファイルから行であるレコードを読込み、読込んだ入力行からソートキーの値を抽出する(S205)。そして、抽出部24cは、ソートキー(Key)を「ソートキーの値」、値(Value)を「NN、入力行」とするKVS形式の中間ファイルを生成して、中間ファイルDB22aに出力する(S206)。
(Reduce処理)
次に、図7に示したReduce処理について説明する。図9は、実施例1に係るReduce処理の流れを示すフローチャートである。図9に示すように、Reduce処理部25のShuffle処理部25aは、各スレーブ計算機からMapタスク結果を収集し(S301)、収集した結果をソートし(S302)、ソートした結果を同一キーでグループ化する(S303)。
続いて、Reduce初期化部25bは、全ての入力番号(NN)について、S304からS311を実行する。具体的には、Reduce初期化部25bは、入力NN用一時ファイルを一時領域である一時ファイルDB22bにオープン(生成)する(S305)。続いて、Reduce初期化部25bは、フォーマット処理NNに対応する書き込みフォーマット処理を入力NN用一時ファイルと関連付ける(S306)。
その後、Reduce初期化部25bは、書き込みフォーマット処理を入力フォーマット処理NNのオプションで初期化する(S307)。例えば、Reduce初期化部25bは、入力フォーマット処理オプション01に対応する「レコード長:80BYTE」に、出力先のファイルを初期化する。
続いて、Reduce初期化部25bは、入力ファイル番号NN、一時ファイル名、出力フォーマットクラスを対応付けた入力対応表を記憶部22等に登録する(S308)。例えば、Reduce初期化部25bは、「入力ファイル番号、ファイル名、出力フォーマットクラス」として「01、./tmp/in01.txt、固定長フォーマット出力クラス」や「02、./tmp/in02.txt、改行ありフォーマット出力クラス」を生成する。
その後、Reduce初期化部25bは、ジョブ設定(Reduceタスク情報)で指定されたReduceアプリケーションの引数の「%inNN」を入力NN用一時ファイルのファイル名で置き換える(S309)。例えば、Reduce初期化部25bは、Reduceアプリケーション「a.out %in01 %in02」を「a.out ./tmp/in01.txt ./tmp/in02.txt」に書き換える。
そして、Reduce初期化部25bは、ジョブ設定で指定された入力ファイル環境変数名NNを参照して、環境変数に入力NN用一時ファイルのファイル名を設定する(S310)。例えば、Reduce初期化部25bは、環境変数の「TRAN」に「./tmp/in01.txt」、「MASTER」に「./tmp/in02.txt」を設定する。
その後、再構築部25cは、全てのキーの値のリストでS312〜S316を実行する。具体的には、再構築部25cは、値={NN、入力行}としてNN(入力ファイル番号)と入力行を抽出する(S313)。
そして、再構築部25cは、入力対応表とNNとから出力フォーマットクラスオブジェクトを抽出し(S314)、出力フォーマットクラスオブジェクト経由で入力行を一時ファイルに出力する(S315)。このとき、実際にファイルの中身が出力されることとなる。
その後、再構築部25cは、Reduceアプリケーションの文字列と環境変数で、外部プログラムを呼び出して実行し、終了するまで待機する(S317)。そして、再構築部25cは、カレントディレクトリの全てあるいは一部のファイルをジョブ設定の出力ディレクトリのサブディレクトリにコピーする(S318)。
このようにすることで、外部プログラムをHadoopに移植することもなく、複雑で膨大なタスク定義を実装することもなく、Hadoopで外部プログラムを呼び出して実行することができる。この結果、作業時間の削減、人為的ミスの削減、外部プログラムの移植に伴うリスクが低減でき、Hadoopの開発性を向上させることもできる。
実施例1では、外部プログラムの入力ファイルをディスク上のファイルとする例で説明したが、これに限定されるものではなく、例えば、いわゆる名前付きパイプ(named pipe)を使用することもできる。また、外部プログラムの出力ファイルを取得し、MapReduceの入力として使用できる共有ファイルシステム上にコピーすることもできる。
そこで、実施例2では、名前付きパイプおよび共有ファイルシステムを使用する例を説明する。なお、マスタ計算機10が実行する処理、各スレーブ計算機が実行するMap処理とShuffle処理については、実施例1と同様なので、説明を省略する。ここでは、実施例1とは異なるReduce処理について説明する。なお、図10のS401の前に図9のS301からS303と同様の処理が実行される。
(Reduce処理の初期化処理)
図10は、実施例2に係るReduce処理の初期化の流れを示すフローチャートである。図10に示すように、スレーブ計算機20のReduce初期化部25bは、全ての入力番号(NN)について、S401からS409を実行する。
具体的には、Reduce初期化部25bは、入力用名前付きパイプNNを一時領域にオープンする(S402)。ここで一時領域とは、例えば、スレーブ計算機20の記憶部22の一時ファイルDB22bなどである。
続いて、Reduce初期化部25bは、フォーマット処理NNに対応する出力フォーマット処理を入力NN用一時ファイルと関連付ける(S403)。その後、Reduce初期化部25bは、出力フォーマット処理をフォーマット処理NNのオプションで初期化する(S404)。
続いて、Reduce初期化部25bは、入力用名前付きパイプの書き込み用スレッドを立ち上げる(S405)。その後、Reduce初期化部25bは、入力ファイル番号NN、入力用名前付きパイプNNのファイル名、出力フォーマットクラス、書き込みスレッドIDを対応付けた入力対応表を記憶部22等に登録する(S406)。
例えば、Reduce初期化部25bは、「入力ファイル番号、ファイル名、出力フォーマットクラス、書き込みスレッドID」として「01、./tmp/in01.txt、固定長フォーマット出力クラス、スレッド101」を生成する。また、Reduce初期化部25bは、「02、./tmp/in02.txt、改行ありフォーマット出力クラス、スレッド102」を生成する。
その後、Reduce初期化部25bは、ジョブ設定で指定されたReduceアプリケーションの引数の「%inNN」を入力用名前付きパイプNNのファイル名で置き換える(S407)。例えば、Reduce初期化部25bは、Reduceアプリケーション「a.out %in01 %in02 %out01 %out02」を「a.out ./tmp/in01.txt ./tmp/in02.txt %out01 %out02」に書き換える。
そして、Reduce初期化部25bは、ジョブ設定で指定された入力ファイル環境変数名NNを参照して、環境変数に入力用名前付きパイプNNのファイル名を設定する(S408)。例えば、Reduce初期化部25bは、環境変数の「TRAN」に「./tmp/in01.txt」、「MASTER」に「./tmp/in02.txt」を設定する。
その後、Reduce初期化部25bは、全ての出力番号(NN)について、S410からS419を実行する。具体的には、Reduce初期化部25bは、出力用名前付きパイプNNを一時領域にオープンする(S411)。ここで一時領域とは、例えば、スレーブ計算機20の記憶部22の一時ファイルDB22bなどである。
続いて、Reduce初期化部25bは、ジョブ設定の出力フォーマット処理NNに対応する出力フォーマット処理クラスを出力ファイルNNと関連付ける(S412)。その後、Reduce初期化部25bは、出力フォーマット処理を出力フォーマット処理NNのオプションで初期化する(S413)。
続いて、Reduce初期化部25bは、読み込んだ出力を書き出す共有ファイルのファイル名を、ジョブ設定の出力データディレクトリ名と出力ファイル名NNとから生成する(S414)。その後、Reduce初期化部25bは、出力読み込みスレッドの起動処理を実行する(S415)。
そして、Reduce初期化部25bは、S415の起動処理が終了すると、S416を実行する。すなわち、Reduce初期化部25bは、出力ファイル番号NN、出力用名前付きパイプNNのファイル名、出力フォーマットクラス、出力読み込みスレッドID、共有ファイルのファイル名を対応付けた出力対応表を記憶部22等に登録する。例えば、Reduce初期化部25bは、「01、./tmp/out01.txt、改行ありフォーマット出力クラス、スレッド103、/output/processed.txt」や「02、./tmp/out02.txt、固定長フォーマット出力クラス、スレッド104、/output/error.txt」を生成する。
その後、Reduce初期化部25bは、ジョブ設定で指定されたReduceアプリケーションの引数の「%outNN」を出力用名前付きパイプNNのファイル名で置き換える(S417)。例えば、Reduce初期化部25bは、Reduceアプリケーション「a.out ./tmp/in01.txt ./tmp/in02.txt %out01 %out02」を「a.out ./tmp/in01.txt ./tmp/in02.txt ./tmp/out01.txt ./tmp/out02.txt」に書き換える。
そして、Reduce初期化部25bは、ジョブ設定で指定された出力ファイル環境変数名NNを参照して、環境変数に出力用名前付きパイプNNのファイル名を設定する(S418)。その後、再構築部25cは、Reduceアプリケーションの文字列と環境変数で、外部プログラムを呼び出す(S420)。
(Reduce処理の本処理および完了処理)
続いて、Reduce処理の本処理および完了処理を説明する。図11は、実施例2に係るReduce処理の本処理および完了処理の流れを示すフローチャートである。図11に示すように、スレーブ計算機20の再構築部25cは、全てのキーの値のリストでS501〜S505を実行する。具体的には、再構築部25cは、値={NN、入力行}としてNN(入力ファイル番号)と入力行を抽出する(S502)。
そして、再構築部25cは、入力対応表とNNとから出力フォーマットクラスオブジェクトを抽出し(S503)、出力フォーマットクラスオブジェクト経由で入力行を名前付きパイプに書き込む(S504)。
その後、再構築部25cは、入力用名前付きパイプをクローズし(S506)、Reduceアプリケーションが終了するまで待機する(S507)。そして、再構築部25cは、入力用名前付きパイプの書き込みスレッド全てを終了する(S508)。
続いて、再構築部25cは、出力用名前付きパイプの読み込みスレッド全てが終了するまで待機する(S509)。その後、再構築部25cは、カレントディレクトリの全てあるいは一部のファイルをジョブ設定の出力ディレクトリのサブディレクトリにコピーする(S510)。
(スレッド起動処理)
続いて、図10のS415に示したスレッド起動処理を説明する。図12は、実施例2に係る出力読み込みスレッドの起動処理の流れを示すフローチャートである。図12に示すように、Reduce初期化部25bは、共有ファイルのファイル名を書き込みモードでオープンし(S601)、共有ファイルを出力フォーマット処理クラスと関連付けて、初期化する(S602)。
その後、Reduce初期化部25bは、名前付きパイプを読み込みモードでオープンし(S603)、名前付きパイプを出力フォーマットに対応する入力フォーマット読み込みクラスと関連付けて、初期化する(S604)。
そして、再構築部25cは、名前付きパイプからデータが読み込める間、S605〜S608を繰り返す。具体的には、再構築部25cは、名前付きパイプから入力フォーマット読み込みクラスオブジェクト経由で1行読み込む(S606)。その後、再構築部25cは、出力フォーマットクラスオブジェクト経由で入力行を共有ファイルに出力する(S607)。
次に、入力ファイル01として商品マスタファイル、入力ファイル02として売上明細ファイルを用いて、Hadoopで使用されるJavaフレームワークとは異なるNetCOBOLで実装された突合プログラムをHadoop内で読み出して実行する例を説明する。なお、実施例3では、1台のスレーブ計算機に1つのMap処理が割当てられている例で説明するが、これに限定されるものではなく、入力データの量やスレーブ計算機の台数等に応じて、Map処理の割当を適宜変更してもよい。
図13は、Map処理の具体例を説明する図であり、図14は、シャッフルソート処理の具体例を説明する図であり、図15は、Reduce処理の具体例を説明する図であり、図16は、突合プログラム実行後の出力先の具体例を説明する図である。
図13に示すように、各スレーブ計算機がアクセス可能なHDFSディレクトリには、突合プログラムが処理対象とする入力ファイル01と入力ファイル02とが格納されている。
入力ファイル01は、商品マスタであり、「商品ID、商品名、単価、限定割引」として「0001、お茶、140、−」、「0011、梅おにぎり、110、10%」、「0012、鮭おにぎり、120、−」を記憶する。また、入力ファイル02は、売上明細ファイルであり、「伝票ID、商品ID、個数」として「0001、0012、2」、「0001、0001、1」、「0002、0011、1」を記憶する。
また、各スレーブ計算機は、「入力01:行順ファイルカラム1抽出、入力02:行順ファイル2抽出」が記述された設定ファイルを読み込む。このような状態において、スレーブ計算機20は、入力ファイル01を処理するMapタスクがマスタ計算機10より指定されている。このスレーブ計算機20は、設定ファイル「入力01:行順ファイルカラム1抽出」にしたがって、入力ファイル01のカラム1である「商品ID」をキーに設定する。
そして、スレーブ計算機20は、各レコードから商品IDをキーとして抽出し、抽出したキーと抽出元の入力ファイルを示す情報と抽出元のレコードとを対応付けたKVS形式の中間ファイルを生成する。例えば、スレーブ計算機20は、商品IDが0001のレコードについて「Key、Value」として「K(0001)、V(1、0001、お茶、140、−)」を生成して、中間ファイルに格納する。
同様に、スレーブ計算機30は、入力ファイル02を処理するMapタスクがマスタ計算機10より指定されている。このスレーブ計算機30は、設定ファイル「入力02:行順ファイルカラム2抽出」にしたがって、入力ファイル02のカラム2である「商品ID」をキーに設定する。
そして、スレーブ計算機30は、各レコードから商品IDをキーとして抽出し、抽出したキーと抽出元の入力ファイルを示す情報と抽出元のレコードとを対応付けたKVS形式の中間ファイルを生成する。例えば、スレーブ計算機30は、伝票IDが0001のレコードについては、商品ID「0012」をキーとして抽出し、「Key、Value」として「K(0012)、V(2、0001、0012、2)」を生成して、中間ファイルに格納する。
その後、図14に示すように、スレーブ計算機20は、キーが「0001−0010」の範囲のデータを担当することがマスタ計算機10によって指定されており、該当するデータを取得してシャッフルソートを実行する。具体的には、このスレーブ計算機20は、自装置のMap処理結果とスレーブ計算機30のMap処理結果から、「Key」が「0001−0010」の範囲内であるレコードを読み出して、当該Keyでソートする。
例えば、スレーブ計算機20は、自装置のMap処理結果から「K(0001)、V(1、0001、お茶、140、−)」を取得し、スレーブ計算機30のMap処理結果から「K(0001)、V(2、0001、0001、1)」を取得する。そして、スレーブ計算機20は、これらをソートして、K(0001)にV{入力(1)、商品ID(0001)、商品名(お茶)、単価(140)、限定割引(−)}を対応付けたレコードを中間ファイルに出力する。同様に、スレーブ計算機20は、K(0001)にV{入力(2)、伝票ID(0001)、商品ID(0001)、個数(1)}を対応付けたレコードを中間ファイルに出力する。
同様に、スレーブ計算機30は、キーが「0011−0020」の範囲のデータを担当することがマスタ計算機10によって指定されており、該当するデータを取得してシャッフルソートを実行する。具体的には、このスレーブ計算機30は、自装置のMap処理結果とスレーブ計算機30のMap処理結果から、「Key」が「0011−0020」の範囲内であるレコードを読み出して、当該Keyでソートする。
例えば、スレーブ計算機30は、スレーブ計算機20のMap処理結果から「K(0011)、V(1、0011、梅おにぎり、110、10%)」と「K(0012)、V(1、0012、鮭おにぎり、120、−)」とを取得する。また、スレーブ計算機30は、自装置のMap処理結果から「K(0012)、V(2、0001、0012、2)」と「K(0011)、V(2、0002、0011、1)」とを取得する。
そして、スレーブ計算機30は、これらをソートして、K(0011)にV{入力(1)、商品ID(0011)、商品名(梅おにぎり)、単価(110)、限定割引(10%)}を対応付けたレコードを中間ファイルに出力する。同様に、スレーブ計算機30は、K(0011)に、V{入力(2)、伝票ID(0002)、商品ID(0011)、個数(1)}を対応付けたレコードを中間ファイルに出力する。
また、スレーブ計算機30は、これらをソートして、K(0012)にV{入力(1)、商品ID(0012)、商品名(鮭おにぎり)、単価(120)、限定割引(−)}を対応付けたレコードを中間ファイルに出力する。同様に、スレーブ計算機30は、K(0012)にV{入力(2)、伝票ID(0001)、商品ID(0012)、個数(2)}を対応付けたレコードを中間ファイルに出力する。
その後、図15に示すように、スレーブ計算機20は、シャッフルソートした結果に対してReduce処理を実行する。具体的には、スレーブ計算機20は、「K(0001)、V{入力(1)、商品ID(0001)、商品名(お茶)、単価(140)、限定割引(−)}」からV{入力(1)、商品ID(0001)、商品名(お茶)、単価(140)、限定割引(−)}を抽出する。そして、スレーブ計算機20は、抽出したV{入力(1)、商品ID(0001)、商品名(お茶)、単価(140)、限定割引(−)}から入力(1)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機20は、入力ファイル01用の名前付きパイプに、変換後の「商品ID(0001)、商品名(お茶)、単価(140)、限定割引(−)」を入力する。
同様に、スレーブ計算機20は、「K(0001)、V{入力(2)、伝票ID(0001)、商品ID(0001)、個数(1)}」からV{入力(2)、伝票ID(0001)、商品ID(0001)、個数(1)}」を抽出する。そして、スレーブ計算機20は、抽出したV{入力(2)、伝票ID(0001)、商品ID(0001)、個数(1)}から入力(2)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機20は、入力ファイル02用の名前付きパイプに、変換後の「伝票ID(0001)、商品ID(0001)、個数(1)」を入力する。
また、スレーブ計算機30は、「K(0011)、V{入力(1)、商品ID(0011)、商品名(梅おにぎり)、単価(110)、限定割引(10%)}」からV{入力(1)、商品ID(0011)、商品名(梅おにぎり)、単価(110)、限定割引(10%)}を抽出する。そして、スレーブ計算機30は、抽出したV{入力(1)、商品ID(0011)、商品名(梅おにぎり)、単価(110)、限定割引(10%)}から入力(1)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機30は、入力ファイル01用の名前付きパイプに、変換後の「商品ID(0011)、商品名(梅おにぎり)、単価(110)、限定割引(10%)」を入力する。
また、スレーブ計算機30は、「K(0011)、V{入力(2)、伝票ID(0002)、商品ID(0011)、個数(1)}」からV{入力(2)、伝票ID(0002)、商品ID(0011)、個数(1)}を抽出する。そして、スレーブ計算機30は、抽出したV{入力(2)、伝票ID(0002)、商品ID(0011)、個数(1)}から入力(2)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機30は、入力ファイル02用の名前付きパイプに、変換後の「伝票ID(0002)、商品ID(0011)、個数(1)」を入力する。
また、スレーブ計算機30は、「K(0012)、V{入力(1)、商品ID(0012)、商品名(鮭おにぎり)、単価(120)、限定割引(−)}」からV{入力(1)、商品ID(0012)、商品名(鮭おにぎり)、単価(120)、限定割引(−)}を抽出する。そして、スレーブ計算機30は、抽出したV{入力(1)、商品ID(0012)、商品名(鮭おにぎり)、単価(120)、限定割引(−)}から入力(1)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機30は、入力ファイル01用の名前付きパイプに、変換後の「商品ID(0012)、商品名(鮭おにぎり)、単価(120)、限定割引(−)」を入力する。
同様に、スレーブ計算機30は、「K(0012)、V{入力(2)、伝票ID(0001)、商品ID(0012)、個数(2)}」からV{入力(2)、伝票ID(0001)、商品ID(0012)、個数(2)}を抽出する。そして、スレーブ計算機30は、抽出したV{入力(2)、伝票ID(0001)、商品ID(0012)、個数(2)}から入力(2)を削除し、入力ファイルと同じ形式のレコードに変換する。その後、スレーブ計算機30は、入力ファイル02用の名前付きパイプに、変換後の「伝票ID(0001)、商品ID(0012)、個数(2)」を入力する。
その後、図16に示すように、スレーブ計算機20は、突合プログラムの処理結果を共有のHDFSディレクトリに出力する。具体的には、スレーブ計算機20は、設定ファイルで指定される「std_output」に正常処理結果を出力し、設定ファイルで指定される「error_output」に異常処理結果を出力する。なお、スレーブ計算機30も同様に処理結果を共有のHDFSディレクトリに出力する。
上述したシステムは、複数の入力から突合せを行う外部プログラムに対して、MapReduceの枠組みにおいて、外部プログラムを修正なしに呼び出すことができるので、Hadoopや外部プログラムの開発生産性を向上させることができる。
また、上述したシステムは、外部プログラムの入力ファイルをディスク上のファイルとする代わりに、名前付きパイプを用いることができるので、入力レコードの書き出しと既存プログラムの実行を並行動作させることができ、処理の高速化が図れる。また、ディスク書き込みよりも高速なプロセス間通信、すなわちメモリ間コピーを用いることができるので、スループットが向上する。また、全ての入力ファイルへの出力を同期して出力することでメモリ使用量を削減することもできる。
また、上述したシステムは、既存プログラムの出力ファイルを回収し、MapReduceの入力として使える共有ファイルシステム上にコピーすることができる。また、上述したシステムは、外部プログラムの出力ファイルとして名前付きパイプを用い、外部プログラムがレコードを書き出すと同時に共有ファイルシステムに書き出すことができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(ハードウェア構成)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。
図17は、ハードウェア構成例を示す図である。図17に示すように、コンピュータ100は、CPU101、メモリ102、ディスクドライブ103、HDD(Hard Disk Drive)104、通信制御部105、キーボード106、ディスプレイ107を有する。また、図17に示した各部は、バス100aで相互に接続される。
通信制御部105は、NIC(Network Interface Card)などのインタフェースである。HDD104は、図2や図6等に示した機能を実行するプログラムとともに、実施例1や実施例2で説明した各テーブル等を記憶する。記録媒体の例としてHDD104を例に挙げたが、ROM(Read Only Memory)、RAM、CD−ROM等の他のコンピュータが読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記録媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのGW装置自身の記録媒体に格納して用いてもよい。
CPU101は、図2に示した各処理部と同様の処理を実行するプログラムを読み出してRAMに展開することで、図2等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、設定読込部14、Mapタスク管理部15、Reduceタスク管理部16を実行する。このようにコンピュータ100は、プログラムを読み出して実行することでマスタ計算機10として動作する。
また、CPU101は、図6に示した各処理部と同様の処理を実行するプログラムを読み出してRAMに展開することで、図6等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、Map初期化部24a、フォーマット初期化部24b、抽出部24c、Shuffle処理部25a、Reduce初期化部25b、再構築部25cを実行する。このようにコンピュータ100は、プログラムを読み出して実行することでスレーブ計算機20として動作する。
また、コンピュータ100は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
形式の異なる複数の入力ファイルを読み込み、
各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
前記突合キーに基づいて、各中間ファイル内のデータをソートし、
データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
生成した複数の出力ファイルを、突合データを処理する突合プログラムに入力する
処理を実行させることを特徴とする実行制御プログラム。
(付記2)前記出力ファイルを生成する処理は、前記各中間ファイルのレコードごと、前記入力ファイルの各形式のデータを抽出し、
前記入力する処理は、前記各中間ファイルのレコードから前記各形式のデータが抽出されるたびに、抽出されたデータをプロセス間通信で前記突合プログラムに出力することを特徴とする付記1に記載の実行制御プログラム。
(付記3)前記コンピュータは、複数のコンピュータに分散して保持されるデータを分散処理する分散処理システムを形成し、
前記突合プログラムの処理結果を、他のコンピュータが共有でアクセスできる前記分散処理システム上の共有ファイルシステムに格納する処理をさらにコンピュータに実行させることを特徴とする付記1または2に記載の実行制御プログラム。
(付記4)前記格納する処理は、前記突合プログラムが処理結果を出力するたびに、プロセス間通信で、前記共有ファイルシステムに処理結果を格納することを特徴とする付記3に記載の実行制御プログラム。
(付記5)コンピュータが、
形式の異なる複数の入力ファイルを読み込み、
各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
前記突合キーに基づいて、各中間ファイル内のデータをソートし、
データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
生成した複数の出力ファイルを、データを突合する突合プログラムに入力する
を実行することを特徴とする実行制御方法。
(付記6)形式の異なる複数の入力ファイルを読み込む読込部と、
前記読込部によって読み込まれた各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成する第1生成部と、
前記突合キーに基づいて、各中間ファイル内のデータをソートするソート部と、
前記ソート部によってデータがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成する第2生成部と、
前記第2生成部によって生成された複数の出力ファイルを、データを突合する突合プログラムに入力する入力部と
を有することを特徴とする情報処理装置。
(付記7)メモリと、
前記メモリに接続されるプロセッサと、を有し、
前記プロセッサは、
形式の異なる複数の入力ファイルを読み込み、
各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
前記突合キーに基づいて、各中間ファイル内のデータをソートし、
データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
生成した複数の出力ファイルを、データを突合する突合プログラムに入力する
処理を実行させることを特徴とする情報処理装置。
(付記8)形式の異なる複数の入力ファイルを読み込み、
各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
前記突合キーに基づいて、各中間ファイル内のデータをソートし、
データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
生成した複数の出力ファイルを、データを突合する突合プログラムに入力する処理をコンピュータに実行させる実行制御プログラムを記憶する、コンピュータ読み取り可能な記憶媒体。
1 ネットワーク
2 分析者端末
3 入力DBサーバ
10 マスタ計算機
11 通信制御部
12 記憶部
12a 設定ファイルDB
12b タスクリストDB
13 制御部
14 設定読込部
15 Mapタスク管理部
16 Reduceタスク管理部
20、30 スレーブ計算機
21 通信制御部
22 記憶部
22a 中間ファイルDB
22b 一時ファイルDB
23 制御部
24 Map処理部
24a Map初期化部
24b フォーマット初期化部
24c 抽出部
25 Reduce処理部
25a Shuffle処理部
25b Reduce初期化部
25c 再構築部

Claims (6)

  1. コンピュータに、
    形式の異なる複数の入力ファイルを読み込み、
    各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
    前記突合キーに基づいて、各中間ファイル内のデータをソートし、
    データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
    生成した複数の出力ファイルを、データを突合する突合プログラムに入力する
    処理を実行させることを特徴とする実行制御プログラム。
  2. 前記出力ファイルを生成する処理は、前記各中間ファイルのレコードごと、前記入力ファイルの各形式のデータを抽出し、
    前記入力する処理は、前記各中間ファイルのレコードから前記各形式のデータが抽出されるたびに、抽出されたデータをプロセス間通信で前記突合プログラムに出力することを特徴とする請求項1に記載の実行制御プログラム。
  3. 前記コンピュータは、複数のコンピュータに分散して保持されるデータを分散処理する分散処理システムを形成し、
    前記突合プログラムの処理結果を、他のコンピュータが共有でアクセスできる前記分散処理システム上の共有ファイルシステムに格納する処理をさらにコンピュータに実行させることを特徴とする請求項1または2に記載の実行制御プログラム。
  4. 前記格納する処理は、前記突合プログラムが処理結果を出力するたびに、プロセス間通信で、前記共有ファイルシステムに処理結果を格納することを特徴とする請求項3に記載の実行制御プログラム。
  5. コンピュータが、
    形式の異なる複数の入力ファイルを読み込み、
    各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成し、
    前記突合キーに基づいて、各中間ファイル内のデータをソートし、
    データがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成し、
    生成した複数の出力ファイルを、データを突合する突合プログラムに入力する
    を実行することを特徴とする実行制御方法。
  6. 形式の異なる複数の入力ファイルを読み込む読込部と、
    前記読込部によって読み込まれた各入力ファイルの間で種別が共通するカラムのデータを突合キーとして追加した中間ファイルを、前記入力ファイルごとに生成する第1生成部と、
    前記突合キーに基づいて、各中間ファイル内のデータをソートするソート部と、
    前記ソート部によってデータがソートされた各中間ファイルから、前記入力ファイルの各形式のデータをそれぞれ抽出して、前記各入力ファイルに対してデータがソートされた複数の出力ファイルを生成する第2生成部と、
    前記第2生成部によって生成された複数の出力ファイルを、データを突合する突合プログラムに入力する入力部と
    を有することを特徴とする情報処理装置。
JP2012224604A 2012-10-09 2012-10-09 実行制御プログラム、実行制御方法および情報処理装置 Active JP5939123B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012224604A JP5939123B2 (ja) 2012-10-09 2012-10-09 実行制御プログラム、実行制御方法および情報処理装置
US14/048,354 US10095699B2 (en) 2012-10-09 2013-10-08 Computer-readable recording medium, execution control method, and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012224604A JP5939123B2 (ja) 2012-10-09 2012-10-09 実行制御プログラム、実行制御方法および情報処理装置

Publications (3)

Publication Number Publication Date
JP2014078085A JP2014078085A (ja) 2014-05-01
JP2014078085A5 JP2014078085A5 (ja) 2014-06-19
JP5939123B2 true JP5939123B2 (ja) 2016-06-22

Family

ID=50433596

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012224604A Active JP5939123B2 (ja) 2012-10-09 2012-10-09 実行制御プログラム、実行制御方法および情報処理装置

Country Status (2)

Country Link
US (1) US10095699B2 (ja)
JP (1) JP5939123B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105164673A (zh) * 2013-04-02 2015-12-16 惠普发展公司,有限责任合伙企业 跨数据库和文件系统的查询一体化
US10452632B1 (en) * 2013-06-29 2019-10-22 Teradata Us, Inc. Multi-input SQL-MR
US9928263B2 (en) 2013-10-03 2018-03-27 Google Llc Persistent shuffle system
IN2013CH05424A (ja) 2013-11-26 2015-05-29 Inmobi Pte Ltd
JP6519111B2 (ja) * 2014-07-18 2019-05-29 富士通株式会社 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置
JP2016206757A (ja) * 2015-04-16 2016-12-08 富士通株式会社 分散処理プログラム、分散処理方法および情報処理装置
US10331620B2 (en) 2015-11-24 2019-06-25 International Business Machines Corporation File generator
EP3475852A4 (en) * 2016-06-28 2019-07-31 Anditi Pty Ltd METHOD AND SYSTEM FOR FLEXIBLE, HIGH-PERFORMANCE, STRUCTURED DATA PROCESSING
JP6700554B2 (ja) 2016-07-28 2020-05-27 富士通株式会社 分散処理管理方法、分散処理管理プログラム、および分散処理管理装置
US10552415B2 (en) * 2017-03-30 2020-02-04 Microsoft Technology Licensing, Llc Efficient distributed joining of two large data sets
JP6967870B2 (ja) * 2017-04-13 2021-11-17 ヤフー株式会社 データベース連携システム、データベース連携方法、およびプログラム

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080052261A1 (en) * 2006-06-22 2008-02-28 Moshe Valenci Method for block level file joining and splitting for efficient multimedia data processing
US7523123B2 (en) * 2006-11-16 2009-04-21 Yahoo! Inc. Map-reduce with merge to process multiple relational datasets
US8713038B2 (en) * 2009-04-02 2014-04-29 Pivotal Software, Inc. Integrating map-reduce into a distributed relational database
US8572575B2 (en) * 2009-09-14 2013-10-29 Myspace Llc Debugging a map reduce application on a cluster
US8935232B2 (en) * 2010-06-04 2015-01-13 Yale University Query execution systems and methods
US9170848B1 (en) * 2010-07-27 2015-10-27 Google Inc. Parallel processing of data
US9798831B2 (en) * 2011-04-01 2017-10-24 Google Inc. Processing data in a MapReduce framework
US9002871B2 (en) * 2011-04-26 2015-04-07 Brian J. Bulkowski Method and system of mapreduce implementations on indexed datasets in a distributed database environment
US8954967B2 (en) * 2011-05-31 2015-02-10 International Business Machines Corporation Adaptive parallel data processing
US8938416B1 (en) * 2012-01-13 2015-01-20 Amazon Technologies, Inc. Distributed storage of aggregated data
US9286472B2 (en) * 2012-05-22 2016-03-15 Xockets, Inc. Efficient packet handling, redirection, and inspection using offload processors
US9841989B2 (en) * 2012-05-31 2017-12-12 Hitachi, Ltd. Parallel data processing system, computer, and parallel data processing method
US20130339972A1 (en) * 2012-06-18 2013-12-19 Zhuoyao Zhang Determining an allocation of resources to a program having concurrent jobs
CA2874900A1 (en) * 2012-06-26 2014-01-03 Battelle Memorial Institute Methods and apparatus of analyzing electrical power grid data

Also Published As

Publication number Publication date
US10095699B2 (en) 2018-10-09
US20140101213A1 (en) 2014-04-10
JP2014078085A (ja) 2014-05-01

Similar Documents

Publication Publication Date Title
JP5939123B2 (ja) 実行制御プログラム、実行制御方法および情報処理装置
US20230126005A1 (en) Consistent filtering of machine learning data
AU2023200421B2 (en) Dataflow graph configuration
US10713589B1 (en) Consistent sort-based record-level shuffling of machine learning data
US10366053B1 (en) Consistent randomized record-level splitting of machine learning data
US11100420B2 (en) Input processing for machine learning
CN106778351B (zh) 数据脱敏方法及装置
US20170277556A1 (en) Distribution system, computer, and arrangement method for virtual machine
CN105339924A (zh) 作为服务的有效数据压缩和分析
CN108536745B (zh) 基于Shell的数据表提取方法、终端、设备及存储介质
JP5730386B2 (ja) 計算機システム及び並列分散処理方法
CN110781183A (zh) Hive数据库中增量数据的处理方法、装置以及计算机设备
Silva et al. Integrating big data into the computing curricula
KR20140048396A (ko) 클라우드 스토리지 서비스의 파일 검색 시스템 및 방법, 및 파일 제어 방법
US8271493B2 (en) Extensible mechanism for grouping search results
Theußl et al. A tm plug-in for distributed text mining in R
Lee et al. Implementation and performance of distributed text processing system using hadoop for e-discovery cloud service
CN115809304A (zh) 字段级血缘解析方法、装置、计算机设备、存储介质
JP6422346B2 (ja) プログラム生成装置、及び、プログラム生成方法
Grossman What is analytic infrastructure and why should you care?
Chen et al. pmTM-align: scalable pairwise and multiple structure alignment with Apache Spark and OpenMP
JP2016157411A (ja) 情報管理装置並びにファイル管理方法
CN112702421B (zh) 文件同步方法、装置、电子设备及存储介质
Syed Using apache spark for scalable gene sequence analysis
Chen et al. A Spark-Based Open Source Framework for Large-Scale Parallel Processing of Rich Text Documents

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140424

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150604

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160408

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160419

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160502

R150 Certificate of patent or registration of utility model

Ref document number: 5939123

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150