ビッグデータ処理技術に関わる基本の勉強結果を整理
この記事は、 Aidemy Advent Calendar 2022 の12/13分の投稿です。
本記事執筆の背景
- 時間軸上の経緯
- 筆者は株式会社アイデミーにて、機械学習モデル構築/データ処理基盤構築 等の実案件支援に関わるチームに最近異動(それまでは弊社SaaSプロダクトのカスタマーサクセス+弊社の各種サービスの営業を担う部署に所属)
- 現チームでの筆者の位置づけ上の経緯
- 異動先チームにはプロジェクトマネージャ(データ活用領域に強み)、データサイエンティスト、データエンジニアが多数所属し、筆者の関連リテラシー・スキルは現時点で大きくビハインド
- 上記を踏まえた本記事作成の目的
- とはいえ、大企業のビッグデータ処理基盤への関連領域の支援については、弊社の現在の規模的にこれからという状況のため、まずは初心者ながら当該領域について概要を分かりやすくまとめ、社内+社外のこれから学ぶ人に参考になることを目指した記事の作成に試む
本記事の想定対象
- 関係が深い職種
- データエンジニア
- データサイエンティスト/アナリスト
- 想定する読者の興味範囲・レベル感
- 企業におけるデータ活用の前提となる大量のデータの収集・加工基盤に関わる以下のような技術の概要を把握したい方
- データ収集
- ストリーム処理・バッジ処理
- 分散ストレージ
- 分散データ処理
- ワークフロー管理
- 企業におけるデータ活用の前提となる大量のデータの収集・加工基盤に関わる以下のような技術の概要を把握したい方
本記事執筆にあたるインプット内容
本編目次
- そもそもビッグデータ技術とは?(What)
- ビッグデータ技術により何を実現することを目指すか?(Why-目的)
- なぜビッグデータ技術の重要性が増しているか?(Why-背景)
- どのような役割を持つ人材がビッグデータ技術の活用を担うか?(Who)
- ビッグデータ処理基盤技術の具体例は?(How)
- まとめ・今後の個人的課題
1. そもそもビッグデータ技術とは?
ビッグデータ技術とは何か?については、色々な定義の仕方があるかと思いますが、ここでは以下のように定義します。
- ビッグデータとは
- スモールデータ(1台のラップトップでストレスなく処理できるような量のデータ。レコード数にして数百万~数千万、データ量にして数GBまでのもの。)に対して、それを上回るようなサイズのデータはこれまで処理しきれず捨てるしかなかった。しかし近年のコンピューティング技術の発展により多数のコンピューターによる分散処理等が可能になり、そのような技術を活用して扱うべきサイズのデータ(例えば数十億といった単位のレコード数のデータ)をビッグデータと呼ぶ - ビッグデータ技術とは
- ビッグデータの活用に必要な、データ収集・加工・それらの自動化といった様々な処理を支える技術群
2. ビッグデータ技術により何を実現することを目指すか?
ビッグデータ技術の具体的な中身は後程記載しますが、ここではそもそもビッグデータ技術の活用により何を実現するか=上位目的は何かについて一つの整理の仕方を記載します。
ビッグデータ技術活用の目的
1. データの検索
- 概要
- 大量のデータから条件に合うものを見つける
- 具体例
- システム障害の原因特定
- 顧客問い合わせ対応のためのログ確認
- 重要視される機能
- 必要な時に素早く必要なデータを取り出すための、リアルタイムのデータ処理や検索エンジンによるキーワード探索機能
2. データの加工結果の利用
- 概要
- 業務システムの一部としてデータ処理の結果を利用
- 具体例
- おすすめ商品の提案
- センサデータの異常検知
- 重要視される機能
- 業務システムの仕様に合わせて自動でデータを加工・連携する機能
3. データの可視化
- 概要
- データを視覚的に見ることにより、アクションの意思決定に役立つ情報を得る
- 具体例
- BIツールや統計解析ツールにより、異常値や全体傾向を可視化する
- 重要視される機能
- 試行錯誤のための高速なデータ処理や、継続的なモニタリング機能
3. なぜビッグデータ技術の重要性が増しているか?
ビッグデータ技術の重要性が増している背景として、
- データの活用によるビジネスプロセスの合理化
- データの活用による新たな付加価値の創造
が期待される中で、
- 発生しているデータ量の増加
- 上記の大量のデータの処理を実現するコンピューティング技術の発展
という前提により、企業の存続にビッグデータ技術の活用が避けて通れない状況になっている、と言えるかと思います。
4. どのような役割を持つ人材がビッグデータ技術の活用を担うか?
ビジネスにおけるデータの活用は、企業における既存のあらゆる役割を担う方に広く関わると思います。
とはいえ、ことビッグデータ"技術"の活用、つまり昨今普及しつつあるビッグデータ関連のソフトウェアの活用を担う役割としては、本記事では以下のような整理をします。
- データエンジニア
- データ収集・加工・分析を実現するシステムの構築・運用・自動化を担う
- データアナリスト
- データエンジニアが提供するようなデータ基盤を活用して、データから価値ある情報を引き出し、関係者に提供する
また、本記事の以降の内容は、主にデータエンジニアが担う技術領域に関わるかと思います。
5. ビッグデータ処理基盤技術の具体例は?
ここまで非常に抽象的な内容になってしまい、大変恐縮です。ここからはより具体的な機能の話に移りたいと思います。
とはいえ、ビッグデータ処理に関わる技術の全てを具体的に説明することは、本領域の広さ・深さから不可能なため、あくまで一つの例としてビッグデータ処理基盤の例を挙げます。
ビッグデータ処理基盤の例
上記はあくまで一例ですが、上記の図の要素について主要なものを以下にご説明します。
- データ収集
- 様々な場所で生成された様々な形式のデーデータを収集する
- データ収集の手法は大きく以下二つ
- バルク型
- 既にどこかにあるデータを定期的にまとめて取り出す
(ファイルサーバ、DB等のデータ) - 長期的なデータ分析を可能にするために活用
- 既にどこかにあるデータを定期的にまとめて取り出す
- ストリーミング型
- 次々と生成されるデータを絶え間なく送り続ける
(モバイルアプリ、組み込み機器等のデータ) - 過去30分等、短期的なデータの分析等に活用
- 次々と生成されるデータを絶え間なく送り続ける
- バルク型
- データ蓄積
- 分散ストレージ
- 多数のコンピュータとディスクからなるストレージシステムの総称
- 例
- オブジェクトストレージ(Amazon S3等)
- ひとまとまりのデータに名前を付けてファイルとして保存
- NoSQL DB(Not Only SQLの略)
- アプリから多様な形式のデータを読み書きすることに適したDB
- オブジェクトストレージ(Amazon S3等)
- 例
- 多数のコンピュータとディスクからなるストレージシステムの総称
- 分散ストレージ
- データ処理
- 後から分析しやすいようにデータを加工し、その結果を外部DB等に書き足すこと
- クエリエンジン
- 分散ストレージ上のデータをSQL上で集計するためのシステム(Hive,対話型クエリエンジン等)
- 外部DWH製品
- 分散ストレージから取り出したデータをDWHに適した形式に変換し、上記のような分散処理を実施する機能を持つ製品(Google BigQuery, Amazon Redshift, snowflake等)
- クエリエンジン
- 後から分析しやすいようにデータを加工し、その結果を外部DB等に書き足すこと
- データマート
- 分析に自由に使うためにデータを扱いしやすい形に整理(ETL)し格納したもの
- ETL
- Extract(取得),transport(加工),load(読み込み)の略。必要なデータをデータソースから取得し、適宜必要な加工を施し格納すること。
- ETL
- 分析に自由に使うためにデータを扱いしやすい形に整理(ETL)し格納したもの
- データレイク(上図には記載なし)
- 他社から受け取ったデータ等、DWHを想定していない様々な形式のデータ(テキストファイル、バイナリデータ等)をそのまま保存する分散ストレージ
- ワークフロー管理
- 上記のようなデータ処理のプロセス(=データパイプライン)全体の動作管理
- 例
- 毎日決まった時間に自動でバッチ処理
- 処理のエラーの管理者への通知
- 例
- 上記のようなデータ処理のプロセス(=データパイプライン)全体の動作管理
6.まとめ・今後の個人的課題
以上、ビッグデータ処理技術に関して、入門の概要説明となりました。
具体的に手を動かすような形で個別ツールの紹介等ができない形となり、実務に関わる方にとっては物足りない内容となってしまったかと思います。
ネクストアクションとして、実際にデータを収集し、分散ストレージに格納・分散データ処理・データ整形・対話的コンソールによる分析までの流れを参考文献に基づいて実行してみたいと思っています。
ソフトウェア名としては、MongoDB、Apache Spark、pandas、Jupyter Consoleを扱うことを想定しています。
より具体的な実務イメージがご理解いただけるようにできればと思いますので、引き続きよろしくお願いします。
Discussion