並列分散処理に関して
並列分散処理とは、データを複数台のサーバに分散・蓄積及び並列処理するための手法。大量データを現実的な時間で処理するために用いる。大規模分散処理フレームとしてHadoopがある。このHadoopはGoogleが発表した論文のGFSやMapReduceを基にしたオープンソースによる実装。Hadoopはリアルタイム処理というよりはバッチ処理(バッチ処理:まとまった大規模なデータを一気に処理すること)に適している。ちなみにバッチ処理と対になる処理としてストリーム処理というものがある。ストリーム処理とは大量のデータをリアルタイムで処理するものです。一つ一つのデータ自体は大きくないものの、発生頻度が多い。リアルタイムにデータを活用するケースでストリーム処理が必要とされる。
HadoopとSpark
Hadoopは大規模データのための並列分散処理フレームワーク。複数台のサーバを使用し、全体で大規模なデータの保存・処理を並列分散処理に適した方法で行う。複数のサーバーのディスクを効率よく利用するというのがコンセプトとしてある。hadoopはストリーム処理よりはバッチ処理に適している。
Sparkは大規模データのための並列分散処理フレームワーク。メモリ・CPU・ディスクなどのリソースを効率的に利用している。SQLによる記述、機械学習、ストリーム処理などの分散処理で頻出の処理のライブラリが付属している。Hadoopに比べて複雑な処理も高速に処理することができる。処理の順番の最適化を行ったりすることもある。
データの生成元からHadoopにデータを転送する必要がある。そのデータを転送するミドルウェアとして「Fluentd」と「embulk」がある。「Fluentd」はストリーム処理向きであり、「embulk」はバッチ処理向きです。そのため、バッチ処理ではembulkでデータの収集を行い、Hadoop大規模なデータの保存・処理をし、SparkでHadoopでは難しい複雑な処理を行う。ストリーム処理ではFluentdでデータの収集を行い、kafka(スケーラブルで高速な分散メッセージングシステム)でデータを受け取り、Sparkで処理を行う。
(kafkaはサーバ複数台で並列に処理できる。逐次送られてくるデータを高速に受け取ることができ、ディスクへの記録などデータを失いにくい仕組みを備えている。ストリームデータはデータを受け取り一時的に保存するものが必要である。なぜなら、ストリームの処理を行っているうちに新たなデータが生成され処理が追いつかずデータが失われる可能性があるからです。そのため、受け皿としてkafkaが存在している。)
HadoopやSparkで行う処理というのは、BIツールで利用するためにデータを加工したり集計したり分析したりすることをいう。HadoopとSparkはスケールアウト(台数を増やす)という仕組みを備えている。そのため性能が悪くなってきたら台数を増やして対応することが可能である。
<参考にしたサイト>
並列分散処理基盤のいま~45分で学ぶHadoop/Spark/Kafka入門~ 2020-6-27 B-2
Hadoop MapReduce入門 | Hadoop Advent Calendar 2016 #01