[ 
https://issues.apache.org/jira/browse/FLINK-9061?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16423072#comment-16423072
 ] 

Jamie Grier edited comment on FLINK-9061 at 4/2/18 8:17 PM:
------------------------------------------------------------

So, what I'm suggesting is that we, optionally, split on '/' and reverse the 
components like so:

s3://my_bucket/flink/checkpoints/JOB_ID/chk_000/123456789

becomes

s3://my_bucket/123456789/CHK_000/JOB_ID/checkpoints

It's not very ops friendly but that's because S3 isn't a filesystem.  The 
hierarchy isn't real.  It's a flat keyspace (I know we all know that of 
course).  The equivalent of a directory listing that would group all the 
checkpoints for a single job would be:

aws s3 list s3://my_bucket | grep "JOB_ID/checkpoints"

I think that would work just fine for our use case.  What about others?

 


was (Author: jgrier):
So, what I'm suggesting is that we, optionally, split on '/' and reverse the 
components like so:

s3://my_bucket/flink/checkpoints/JOB_ID/chk_000/123456789

becomes

s3://my_bucket/123456789/CHK_000/JOB_ID/checkpoints

It's not very ops friendly but that's because S3 isn't a filesystem.  The 
hierarchy isn't real.  The equivalent of a directory listing that would group 
all the checkpoints for a single job would be:

aws s3 list s3://my_bucket | grep "JOB_ID/checkpoints"

I think that would work just fine for our use case.  What about others?

 

> S3 checkpoint data not partitioned well -- causes errors and poor performance
> -----------------------------------------------------------------------------
>
>                 Key: FLINK-9061
>                 URL: https://issues.apache.org/jira/browse/FLINK-9061
>             Project: Flink
>          Issue Type: Bug
>          Components: FileSystem, State Backends, Checkpointing
>    Affects Versions: 1.4.2
>            Reporter: Jamie Grier
>            Priority: Critical
>
> I think we need to modify the way we write checkpoints to S3 for high-scale 
> jobs (those with many total tasks).  The issue is that we are writing all the 
> checkpoint data under a common key prefix.  This is the worst case scenario 
> for S3 performance since the key is used as a partition key.
>  
> In the worst case checkpoints fail with a 500 status code coming back from S3 
> and an internal error type of TooBusyException.
>  
> One possible solution would be to add a hook in the Flink filesystem code 
> that allows me to "rewrite" paths.  For example say I have the checkpoint 
> directory set to:
>  
> s3://bucket/flink/checkpoints
>  
> I would hook that and rewrite that path to:
>  
> s3://bucket/[HASH]/flink/checkpoints, where HASH is the hash of the original 
> path
>  
> This would distribute the checkpoint write load around the S3 cluster evenly.
>  
> For reference: 
> https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-performance-improve/
>  
> Any other people hit this issue?  Any other ideas for solutions?  This is a 
> pretty serious problem for people trying to checkpoint to S3.
>  
> -Jamie
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to