Sparkは、Hadoopと比較されることも多く、Hadoopよりも高速かつ高機能な分散処理基盤だと言われています。今年6月にSparkのコミッタに就任したNTTデータの猿田浩輔氏に聞きました。以下は猿田氏から伺ったSparkの紹介をまとめたものです。後編では猿田氏がコミッタになった経緯などもインタビューしました。猿田浩輔氏Sparkとはなにかの前に、まずはHadoopの話から始めさせてください。Hadoopとは、ざっくり言うと分散処理フレームワーク「MapReduce」と分散ファイルシステム「HDFS」の組み合わせです。最近ではYARNと呼ばれるクラスタ管理システムが加わるなど変わってきていますが、従来はこの組み合わせでした。これまで、Hadoopの多くのユースケースではこの仕組みで事足りていましたが、複雑な業務処理の場合には1回のMapReduce処理では終わらずに多段処理が必要です。その多段処理は、一段ごとに中間データをHDFSに書き出して、次の段で読み込んで、という作りになることが多くありました。Hiveのようなソフトウェアも、数十段もの多段処理を自動生成します。多段処理では毎回中間データを書き出し、読み込んでいるので、その分レイテンシが発生します。これが数十段、数百段と積み重なると処理全体のレイテンシは非常に大きなものになります。段ごとにMapReduceのジョブを起動するので、そのたびにメモリなど計算リソースの確保やJavaVMの起動などが行われます。ここでもレイテンシが発生します。Hadoopはもともとスループットを向上させることに最適化されていましたのでレイテンシは重視されてこなかったとはいえ、処理が複雑化するにつれて、レイテンシも重視されるケースで従来のMapReduceの課題が明るみになってきました。スループットとレイテンシの両立を目指したSparkその中で、スループットとレイテンシを両立させるものとして開発されたのがSparkです。Sparkのいまとこれから」からSparkの仕組みをイメージするとしたら、巨大な配列の各部分がクラスタにまたがっていて、それを一斉に分散処理する仕組みを持つといえます。Sparkでの処理にはMapReduceでのMapやReduceといった区分けはなく、処理の途中で中間データの生成のような無駄なI/Oがなるべく発生しないようにスケジューラが処理を組み立ててくれます。機械学習のように何度もデータを繰り返して処理するものでは、キャッシュしたデータを使い回すことでもレイテンシを小さくしてくれます。Sparkのいまとこれから」からSparkはインメモリの分散処理基盤と説明されることが多いのですが、内部でのレイテンシをできるだけ小さくするための手段としてインメモリ処理が使われている、ということで、それ以外にも中間データをできるだけ排除したり、何度もジョブの起動をしなくて済むといったこともレイテンシの改善に大きく効いています。Sparkの登場で、もうHadoopは使わずにSparkだけあればいいとも思われがちです。クラスタのメモリ量の10倍、100倍といった大規模データの処理には、やはりHadoopの方が安定していて堅実な処理ができます。大規模なデータを処理して絞り込むのはHadoopで行い、絞られたデータを基に機械学習などを行うのにSparkを用いるのが現在は適しているのではないかと思います。Scala、Java、R、Pythonなどに対応パッケージに最初からいろんなエコシステムが含まれているのもSparkの魅力です。機械学習のMLlib、グラフ処理にはGraphXなどがあります。HDFSもデータソースに使えるのでHadoopとの親和性も高く、従来HadoopのMapReduceで行っていた処理をSparkに移行しやすくなっています。インタラクティブシェルで処理の試行錯誤することもできます。Scala、Java、データ分析処理が得意なRやPythonなどで処理が記述でき、データ分析が非常にしやすい環境が整っています。SQLはオプティマイザが走るSparkにはエコシステムのそれぞれの進化とコアの進化の2つの面があります。Streamingにおいて分散メッセージシステムのKafkaとの連係が強化されました。APIも提供されています。SQLはそのRDDを包含するDataFrameを中心に処理をするものです。Sparkのいまとこれから」からDataFrameはRDBのテーブルのような、列があって型があるという、スキーマがあるようなデータを想像していただければいいと思います。SQLはJDBCで接続できるのでレポーティングツールなど外部ツールからアクセスすることもできます。APIを使う利点の1つがオプティマイザによる処理の最適化です。ScalaでSparkのコアAPIを使って複雑な処理を記述しようとすると、記述量が増えたり可読性が下がる場合があるほか、実効効率のよくない処理を記述してしまう場合もあります。コアAPIを用いて同様のRDDの変換処理を記述しても、APIを操作するプログラミング言語によって実効効率に差異がでてしまう問題もあります。APIを使うと、JavaVMで走るジョブを最適化した上で生成してくれるので、効率の高い処理が実現できます。1.4の最新動向とコミッタとなったNTTデータ猿田氏へのインタビューです。ビッグデータPublickey広告.NET帳票ツール。デザイナはExcel。クラウド/サーバー環境対応。.NET5/6/8に対応。デザイナはExcelのため、エンドユーザーも編集可能。ノーコードでCSVファイルから帳票を出力する、CSVReportも新収録。Niino(jniino)IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。Copilotが複数ファイルにわたるコード変更や生成に対応。CopilotがAppleのXcodeに対応。Xcode」パブリックプレビューOrbがデジタル通貨決済システムの基盤にNewSQLのTiDBを採用。ETLをなくし、トランザクション処理とデータ分析を統合可能に[PR]日本人プログラマ向け、プログラミングに適した「フォント」まとめ。2024年版GitHubで最も使われている言語、PythonがJavaScriptを抜いて1位に。生成AI関連プロジェクト急増で。Sonnetが選択可能に。100」の仮想マシンを正式提供開始JetBrains、JavaScript/TypeScriptのためのIDE「WebStorm」と.NETのためのIDE「Rider」、非商用利用ならば無償で利用可能に。