こちらを読むと
- 超ざっくりと分散システムについて理解できます(素人対象)
分散処理とは
まずは、参考サイトから。
分散処理とは、処理速度の向上とサーバー負荷軽減のために、1つの処理を分散して行う方式のことです。
分散処理には、1台のコンピュータに多数のプロセッサを搭載して処理する方法と、大規模データ処理を複数のサーバーに分散させ、処理結果をネットワーク上で共有する方法の2種類があります。
後者の分散処理では、1台のサーバーで処理するよりも処理速度を向上させることができます。また、特定のサーバーが稼働しなくなった場合でも、他の複数のサーバーが処理を継続するため、1台のサーバーで処理するよりも信頼性を保つことができます。
(IDCFrontier 用語集 | 分散処理 より)
簡単に言えば、複数のプロセッサ or サーバーで、処理を負荷分散すること。それにより、処理速度の向上や信頼性の保持を行うことができる。
という感じでしょうか。
分散処理が必要な背景
近年、データの量が爆発的に増加しています。しかし、単独のサーバーで大量のデータを処理すると負荷がかかり過ぎ、いずれサーバーのパフォーマンスに問題を抱えることになります。分散処理は、このような問題を解決する技術として注目を集めています。
超大量のデータをリアルタイムで分析したり、Webサイトにアクセスした訪問者のすべての行動分析を行ったり、分散処理の需要は高まっています。このような注目の中、分散処理システム基盤である「Hadoop」が多くのWebサービス企業から採用されています。
(IDCFrontier 用語集 | 分散処理 より)
ブロードバンドの普及により、ネットワーク上を流れるデータ量が増えたこと、IoTにより収集できるデータの種類が増えたことにより、大量のデータを収集・分析することができるようになりました。
その反面扱うデータ量が増えたため、1つのサーバーでさばくのが厳しくなってきた、というところでしょうか。
分散処理OSS
分散処理ができるOSSで有名なものとしては、以下があります。
- Hadoop
- Apache Spark
表にまとめるとこんな感じでしょうか。
OSS | Hadoop | Apach Spark |
---|---|---|
処理方式 | MapReduce | Spark式 MapReduce |
書かれている言語 | Java | Scala |
使い方 | Javaで直接 or 専用ソフト(Hive QL/Pig等)利用 | 各言語(Scala/Java/Python等)のAPI |
長所 | 情報が充実 | 高速(インメモリで処理可能) |
短所 | 低速(HDDのオーバーヘッド大) | 各言語のAPIラッパーによるオーバーヘッドで多少遅くなる |
HadoopもApach Sparkも、MapReduceという概念で分散処理を行いますが、HadoopはデータをHDDに書き込むためオーバーヘッドが大きいですが、Apach Sparkはインメモリで処理可能なため、高速なようです。
HadoopはApach Sparkよりも歴史があり、情報が充実しています。
例えばAmazonにてHadoopを検索すると1000件以上ヒットしますが、Apach Sparkは200件未満でした。
※私は分散処理について全くの素人なので、誤りがあるかもしれません。
まとめ
- 超ざっくりと分散システムについて理解できたかと思います。
ここでは処理のキモとなるMapReduceについては詳細には触れませんが、興味があるのでまた後日紹介できたらと思います。
データ分析に対して、分散処理は避けられないことのようです。私も機械学習を生業にすることを目指していますので、分散処理についてもキャッチアップし続けていこうと思います!
Reference
IDCFrontier 用語集|分散処理
Casley Consulting, Inc. 分散処理に入門してみた
graffe.jp Apach Sparkとは?