51zero / 51zero/eel-sdk

limit parallelism of ParquetSource to reduce memory footprint

オープン
#382 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Scala
スター
147
フォーク
32
PR マージ指標
30日以内にマージされた PR はありません

説明

Hi!

I set up a ParquetSource with a JDBCSink and ran into memory issues.
The parquet files are stored in an s3 bucket and have been written by spark (snappy-compressed ~500 MByte).

Spark writes one file per partition (default=200). This causes eel to use lots of memory since many subscriptions are submitted to the executor, although I set up the stream like this `source.toDataStream().to(sink, parallelism = 1)`

In the code I found that you initialize the executor like this `val executor = Executors.newCachedThreadPool()` which creates an unbounded ThreadPool.

I did some experiments and repartitioned the spark dataframe to 1 and stored it again. Here's the comparison (see screenshots below):
memory usage of the 200 files parquet source: >1.2 Gbyte*
memory usage of the 1 file parquet source: 83 MByte constantly.

(*) I let it run on my local machine with normal DSL internet connection. On the server it ran oom pretty quickly - meaning it used more than 2GByte (my XmX setting for the app).

![image](https://user-images.githubusercontent.com/39078/40673447-1f702fae-6372-11e8-99a2-828d96b66a1f.png)

![image](https://user-images.githubusercontent.com/39078/40673462-2a1367dc-6372-11e8-8269-6ff53f90fa3e.png)

Can you think of a way to limit the amount of parallelism? Happy to provide a merge request if you point me in the right direction.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

Look at the ParquetSource implementation to find where the Executors.newCachedThreadPool() is used. Understand how the source handles multiple files and subscriptions. The goal is to modify the thread pool initialization to allow limiting parallelism, perhaps by adding a configurable parameter. Check existing tests for ParquetSource to see how to validate changes.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
hadoop, scala, spark
領域
data-engineering, stream-processing
issue の種類
機能追加
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。