このトピックでは、データ膨張の原因と、データ膨張の問題に対処するために実行できる対策について説明します。
問題の説明
Logview では、Fuxi タスクの出力データ量が入力データ量よりも著しく大きくなることがあります。Fuxi タスクの [I/O Record] 属性と [I/O Bytes] 属性を使用して、入出力データ量を確認できます。
例えば、1 GB の入力データが、処理後に 1 TB まで膨張することがあります。単一のインスタンスで 1 TB のデータを処理すると、パフォーマンスが大幅に低下します。
原因と対策
次の表に、この問題の考えられる原因と関連する対策を示します。
| 原因 | 説明 | 対策 |
| コードのバグ | コードに欠陥があります。例:
| コードのバグを修正してください。 |
| 不適切な集約操作 |
通常、これらの操作は少量の中間データしか生成せず、計算量も少ないため、大規模なデータセットでも迅速に完了します。そのため、標準的な集約操作が問題を引き起こすことはほとんどありません。しかし、
collect_list や median のような特定の集約操作では、すべての中間データを保持する必要があります。これが他の集約手法と組み合わさると、データ膨張を引き起こす可能性があります。例:
|
データ膨張を引き起こす集約操作は実行しないでください。 |
不適切な JOIN 操作 |
例えば、JOIN 操作の左テーブルに大量の人口データが含まれ、右テーブルが各性別について数百行のデータを記録するディメンションテーブルであるとします。JOIN 操作を性別に基づいてデータに対して実行すると、左テーブルのデータサイズが元のサイズの数百倍に膨張する可能性があります。 |
データ膨張を防ぐには、右テーブルを集約してから左テーブルと結合してください。 |