10GBのメモリで10億規模のグラフを処理する:DataFusionが最高すぎる件
Algorithms on billion-scale graph using 10GB RAM: I love DataFusion
Algorithms on billion-scale graph using 10GB RAM: I love DataFusion
10GBの限られたRAM環境で、10億規模の巨大なグラフデータを扱うという難題に挑みました。そんな厳しい条件下でも、Apache DataFusionを活用することで驚くほど効率的に処理できたので、その経験をシェアします。クエリエンジンとしての実力と、メモリ制約がある環境での最適化テクニックについてまとめました。
「10億エッジの有向グラフ(Graphalyticsデータセットのgraph500-26)に対するPageRankを、わずか5GBのメモリで計算できる。あるいは、20億エッジのグラフ(同コレクションのtwitter_mpi)において、すべての弱連結成分を10GBのメモリで特定することも可能だ。NetworkXもIgraphもこれには対応できない。既存のグラフアルゴリズムのほとんどは、グラフ全体がメモリに収まることを前提としているからだ。以前は10億規模のグラフ解析にはApache SparkやGraphFramesが必要だと思っていたが、今はノートPCさえあれば十分だと考えている。Apache DataFusionをグラフ解析に使うことに対する私の考えは完全に覆った。」
これはすごいな!
DataFusionは本当にクールだ。OLAP界のLLVMみたいな存在だな。
投稿者がどうやって考えを変えるに至ったのか、その理由が書かれていると良かったな。
以前の記事で不足していた機能がDataFusionに追加されたのか、それとも理解が深まって過去の課題を克服できるようになったのか、どっちだろう?
10GBのRAMで3.4GBのデータセットか。
初めまして。Hacker Newsに参加したばかりですが、すごく有益な場所ですね。修士課程で知識グラフ(KG)やMapReduce(Spark)を学んだので、この記事は興味深く読めました。投稿してくれてありがとう。
コミュニティのみんなに相談したいことがあります。知識グラフとビッグデータマイニング/処理アルゴリズムの知識を復習したいんです。
KGはエージェント攻撃(LLMエージェンシー)の問題をリアルタイムで解決できると考えているので、この分野について深掘りしたいと思っています。
もし参加できる興味・議論グループなどがあれば教えてもらえると嬉しいです!
いいね!GraphChi (2012) に興味があるかもしれないよ。あれも単一マシンで大規模なグラフ操作を行えるように設計されているからね。
Apache Arrow上でのグラフアルゴリズムの大規模処理というアイデアは、ここが元祖だよ。カラムナメモリ上で動作する100以上のグラフアルゴリズムがある。
https://github.com/Ladybug-Memory/icebug
graphframes-rsにおけるDataFusionを使ったアウトオブコア処理は、まさにここでの革新的な点だね。ただ、今のところアルゴリズムは2つしかないけど。
IcebugとLadybugDBを密に統合すれば、圧縮スパース行(CSR)としてエンコードされたテーブルを、効率的にArrowメモリへと移行できるはずだ。Jupyterノートブックも公開されているよ。
こういう引用があると、この記事を真面目に受け取るのは難しいな。
「一番大変なところ。20億エッジのTwitterグラフは巨大(CSVだとエッジだけで30GBもある!!!)」
CSVでグラフがどれだけ大きいかなんて誰が気にするんだ?ビッグデータの処理で使う表現形式じゃないだろう。
この程度のデータなら、今時の一般的なシステムであればメモリに余裕で収まるはずだよ。
Sem、素晴らしいね。Splinkに搭載しているSQLベースの連結成分アルゴリズムの強力な代替手段になりそうだ。どれだけ高速になるか試すのが楽しみだよ。開発してくれてありがとう!
DataFusionは間違いなく史上最高のオープンソースプロジェクトの一つだ。信じられないほど強力で、設計も素晴らしい。
拡張性もイカれてるレベル。自分で独自のクエリ言語を作って、論理プランにコンパイルさせることさえできるんだから。