-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Increase streaming part size to 32MB #25781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Agreed that 16MB seems too small, but 256MB might be too large for a default value- especially given that |
256MB max is arbitrary. According to https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html actual max part is 5GB.
We already have writer scaling within worker and across cluster. We don't need extra parallelism, but rather reliability. It's pretty easy to exhaust S3 limits even with moderate cluster (5-10 nodes). |
I agree that the maximum configurable value was probably an arbitrary choice, but
This will still hurt pipelined parallelism for each writer instance when file size is smaller than 2 * partSize which means worse overall performance on each of those file writers observed as a long delay when attempting to close the upload stream. It also means that the memory cost for writer scaling will be higher because of the amount of memory buffered for each writer is increasing by 16x which is another way to hurt reliability here due to OOM.
You should be able to push 3,500 operations per second through the API and each stream has an upload speed of ~100MB/s maximum- so you would need a very large number of open writers on a cluster with that many nodes to bump up against the limit (and based on a value of 256MB, you would now expect Again, I'm just saying that 256MB seems high as a default and that 64MB or 128MB seems like more conservative increase knowing that users can always configure larger values if it makes sense for their workload. If you still think 256MB is the right arbitrary default value to pick though, then you probably also want to increase the maximum allowed value that the config permits. |
raunaqmorarka
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The default max row group size in parquet writer is 128mb, so raising s3.streaming.part-size beyond that by default does not make sense.
We had lots of customers complaining about increased memory requirements for writes when task level writer scaling was rolled out, so I would rather not aggressively push memory requirements for write again.
I think the default config bump should be the minimal amount needed to get past throttling, like 32MB.
If we have to push beyond that then I recommend adding a note about tuning this higher in the documentation and making it easier for users to observe if they are being throttled.
Default of 16MB causes S3 throttling issues with large clusters during inserts
|
Changed to 32MB. Empirically 16MB is too small even for 10 nodes. With 256MB throttling issues go away even with large clusters and node cap is not required. I'm not sure if 32MB will solve the issue though. |
Default of 16MB causes S3 throttling issues with large clusters during inserts
Description
Additional context and related issues
Release notes
( ) This is not user-visible or is docs only, and no release notes are required.
( ) Release notes are required. Please propose a release note for me.
(x) Release notes are required, with the following suggested text: