新刊ピックアップ

今を知りたい! ビッグデータの基礎知識

この記事を読むのに必要な時間:およそ 2 分

データ処理の自動化―ワークフローとデータフロー

ビッグデータを活用する一つの方法として,⁠システムの自動化」について考えましょう。前述の例であれば,⁠DMPのセグメントを使ってメールを配信する」⁠センサー機器のデータを機械学習してモデルを作る」などといったデータ処理の自動化です。

データウェアハウスを使ったデータの集計だけでは,このような複雑なデータ処理を実現することはできません。ビッグデータを活用する自動化の技術として,ここでは「ワークフロー」「データフロー」の考え方を説明します。

ワークフロー―タスクの実行を管理する

複雑なデータ処理は,多数の小さなタスクを組み合わせることで実現されます。メールを送りたいのであれば,まず最初に各所から集めてきたデータをストレージに格納し,それをバッチ処理で集計してメールアドレスのリストを作ります。そしてメール配送サービスのAPIを呼び出すことでメールが送られます図2)⁠

図2 ワークフロー

<strong>図2</strong> ワークフロー

このような一連のタスクを実行する仕組みを「ワークフロー」と呼びます。ここ数年で,ビッグデータのワークフローに最適化されたオープンソースの「ワークフロー管理ツール」がいくつも開発され,そのノウハウが広く知らるようになってきました。

ワークフローのタスクは多くのシステムに接続するため,しばしば予期せぬエラーが発生します。したがって,どのようなエラーが起きてもタスクを再実行できるような「エラーに強いワークフロー」の実装が求められます。ワークフロー管理ツールは,タスクの実行結果をデータベース等に記録することで,ワークフローの管理を容易にしてくれます。

オープンソースのデータフロー管理ツールには,表1のようなものがあります。

表1 オープンソースのワークフロー管理ツール

名称開発元
AirflowAirbnb
AzkabanLinkedIn
DigdagTreasure Data
LuigiSpotify
OozieThe Apache Software Foundation

データフロー―データ処理をプログラミングする

機械学習のような複雑なデータ処理では,プログラミング言語を用いることが多くなります。機械学習では,利用するアルゴリズムに合わせて最初にデータを整形しなければならず,データの「前処理」が非常に多くなります。あちこちから集めたデータを加工し,それを一つの「学習用データ」として結合し,そして「機械学習」のライブラリを呼び出すことになります図3)⁠

図3 データフロー

<strong>図3</strong> データフロー

「Apache Spark」のような分散処理のフレームワークを用いると,複雑なデータ処理を一つのプログラムとして記述できます。本記事ではこのような分散データ処理のプログラムを「データフロー」と呼びます。

データフローのフレームワークでは,データ処理を「DAG」(Directed Acyclic Graph / 有向非巡回グラフ)と呼ばれる構造で表現します。図3の例であれば,データフローは「前処理」⁠学習用データ」⁠機械学習」の三つのノードからなるDAGとして表現され,その中をデータが流れるようにして実行されます。

前述のワークフローとは違って,データフローではメモリ上で次々とデータが受け渡されます。中間データを途中でファイルやテーブルに保存する必要がなくなるため,より効率のいいデータ処理を実現しています。

このようなデータ処理のフレームワークは,そのまま「ストリーム処理」にも応用されています。つまり,センサー機器などから送られてくるデータをただちに集計することで,異常検知のようなアルゴリズムをリアルタイムに実行することが可能となります。

データフローのフレームワークには,表2のようなものがあります。

表2 データフローのためのフレームワーク

名称開発元
Google Cloud DataflowGoogle
Apache SparkThe Apache Software Foundation
Apache FlinkThe Apache Software Foundation

おわりに

従来から用いられてきた「データウェアハウス」の技術に加えて,⁠ワークフロー」「データフロー」のような仕組みを組み合わせることで,ビッグデータを活用したシステムの自動化はますます発展を続けています。

著者プロフィール

西田圭介(にしだけいすけ)

1976年兵庫生まれ。トレジャーデータ㈱に所属。著書に「Googleを支える技術 ……巨大システムの内側の世界」(技術評論社、2008)がある。

コメント

コメントの記入