皆さん,ビッグデータ分析は難しいという言葉をよく耳にすると思います.
しかし,ビッグデータ分析は,何が難しいのでしょうか?
ほとんどの議論でこのことについては,ぼかされています.
おそらくほとんどの人がぼんやりとしかビッグデータを認識していないためではないでしょうか?
ここでビッグデータの定義をしておきますと,この記事では「データ量がとてつもなく大きなデータ」としたいと思います.
結論から言うと,ビッグデータ分析が難しい理由は下記の3個です.
✔ データを一気に扱う必要がある
✔ データベース系の技術が欠かせない
✔ 実行時間が膨大である(ストレスフル)
まずは,「データを一気に扱う必要がある」ことについて説明します.
もちろんこれに当てはまらないデータもあり,その場合はこの項目は当てはまらないです.それは後ほどお話しします.
さて,私たちがプログラミングなどで例えばある複数データの平均値を求めたい場合,平均を求める関数をつかいますよね?
平均を求める関数は,内部ではメインメモリに格納されているデータをCPUが処理します.
CPUがメインメモリにアクセスする時間は,最近ではナノ秒の単位です.
問題は,平均値を求める関数が扱うデータは「必ず」メインメモリに置かれている必要があります.
さて,ここでメインメモリに収まりきらないような超巨大データ(ファイル)の場合はどうなるでしょうか?
この場合,ストーレージ(ハードディスクなど)にページングが発生します.
メインメモリに一気には収まり切れないデータを少しずつストレージから取り出しながら処理することになります.
ストレージに対するアクセスは,ハードディスクの場合はかなり遅いです.
メインメモリと違って,マイクロ秒単位になります.
さらに,ストレージに格納されているファイルは基本的にばらばらですので,どこに何が入っているかはシーケンシャルに検索されることになります.
なので,アクセス時間も遅いことに加えて,その遅いアクセスが大量に発生するため余計に時間がかかります.
例えば,普通のプログラミング言語(python, Cなど)で超巨大ファイルを扱う場合には,膨大な時間がかかります.
かつ,複数の超巨大ファイルが存在し,計算負荷のかかる演算の場合,すぐに詰みです.
ここで,「一気に扱う」というのが大きなポイントです.
平均値を求める作業などは,「すべてのデータ」が必要になります.
しかし,例えば画像処理などはどうでしょう? 超巨大な映像データを扱う必要があるとします.
このとき1秒間に必要なデータはそれほど大きくないのではないでしょうか.
ようするに,ストレージに格納されている超巨大な映像データから,メインメモリに1秒間に必要なデータを移動させれば,
私たちは1秒間は満足して映像を眺めることができます.
この繰り返しでなんとかなります.
ようするに,画像処理の場合はデータを細切れに扱う(メインメモリに移動させる)ことができます.
これは機械学習などでモデルを作る場合などにも当てはまります.
必ずしも一気にデータを扱う必要はありません.
ですが,平均値を求める場合はどうでしょうか.
さすがにそんなに待てません・・・ようするにデータを一気に扱いたいです.
物理的にストレージから読み出す速度は速くなりませんから,アクセス回数を減らすことがカギになります.
そこで必要になってくるのがデータベース技術です.
データベースは,ストレージに格納されているデータを整理整頓しておいてくれるため,アクセス回数を減らすことができます.
「メモリとストレージの間のやりとりをうまくやってくれる達人」という感じです.
この達人をうまく使いこなさないといけないので,それなりにスキルがいります.
リレーショナルデータベースのOracleやPostgreSQL, Hadoop, Sparkなどがあります.
それぞれ必要なスキルは異なりますが,基本的にはSQLという言語を覚えなければなりません.
データベースを構築する意味というのは結構勘違いされがちで,「複数人で競合しないようにアクセスできる」,
「データ登録時や検索時に不整合が生じないようにする」ためだと思っているかたもいると思います.
ですが一番大事な役割は,「ストレージへのアクセス回数を最小限にとどめる」です.
そして,最後はみなさんご存知のとおり,ビッグエータを扱うとかなり実行時間がかかります.
データベースを使った場合でも1個のテーブルの容量が100GBを超えるとそれなりに待たされることが多いです.
ビッグデータで最も困難な解析はなにか?
以上述べてきたように,画像処理や,場合によって機械学習なども,逐次的にデータをストーレジから取り出せば事足りることが多いためデータベース技術を用いない場合もそれほど困りません.
機械学習のモデルを構築し,その後にデータを判別していく段階においても,それほどすぐに結果を得る必要がないため,あまり問題ではありません.
現状,もっともビッグデータ分析の被害をうけるのが統計解析を専門とするデータサイエンティストです.
例えば,平均,分散,回帰分析,多変量解析などを行いたい場合でも,メモリに乗りきらないデータの場合は,結果が返ってくるまでにとてつもなく時間がかかります.
この種のデータ解析で結果がすぐに帰ってこないというのは,かなりのストレスです.
また,解析単位ごとのデータセットを作成する際にも膨大な時間がかかります.
例えばどういうことかといいますと,こちらの先生のように統計解析ソフトのRを用いて解析しようとすると下記の先生のように
https://www.mhlw.go.jp/stf/shingi/2r9852000002ss9z-att/2r9852000002sse8.pdf
とてつもないスペックのマシンが必要になるといった感じです.
それと同時に,データハンドリングで必要になる工夫やスキルも多く必要になります.
このように,実はデータ量が増加するにつれて一番被害をうけるのは,
実は統計解析の専門家であるという事実です.
コメント