[
https://issues.apache.org/jira/browse/HADOOP-13695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15606380#comment-15606380
]
Steve Loughran commented on HADOOP-13695:
-----------------------------------------
I was thinking having a small pool for the low latency ops, such as async
deletion of parent dirs, probes for parent paths being a directory for a create
call (you only need that check to resolve before the final commit, see).
Parallel rename would be a big win for commits, which is a bottleneck right now.
I've not thought about using versions. I have been thinking about
* Using the netflix committer trick of writing to local HDD, and only doing a
PUT on a final commit, when confident that this is the speculative job allowed
to complete. Weakness: doesn't scale well to many-MB outputs.
* making explicit the ability to cancel a write, rather than have close()
always commit the output. For multipart, cancel()/abort() would remove all in
progress operations, stop the final one. For single part, the final PUT would
be disabled. This would let a job write everything up incrementally, but still
be able to back off from that final operation
> S3A to use a thread pool for async path operations
> --------------------------------------------------
>
> Key: HADOOP-13695
> URL: https://issues.apache.org/jira/browse/HADOOP-13695
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: fs/s3
> Affects Versions: 2.8.0
> Reporter: Steve Loughran
>
> S3A path operations are often slow due to directory scanning, mock directory
> create/delete, etc. Many of these can be done asynchronously
> * because deletion is eventually consistent, deleting parent dirs after an
> operation has returned doesn't alter the behaviour, except in the special
> case of : operation failure.
> * scanning for paths/parents of a file in the create operation only needs to
> complete before the close() operation instantiates the object, no need to
> block create().
> * parallelized COPY calls would permit asynchronous rename.
> We could either use the thread pool used for block writes, or somehow isolate
> low cost path ops (GET, DELETE) from the more expensive calls (COPY, PUT) so
> that a thread doing basic IO doesn't block for the duration of the long op.
> Maybe also use {{Semaphore.tryAcquire()}} and only start async work if there
> actually is an idle thread, doing it synchronously if not. Maybe it depends
> on the operation. path query/cleanup before/after a write is something which
> could be scheduled as just more futures to schedule in the block write.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]