hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steve Loughran (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-13695) S3A to use a thread pool for async path operations
Date Tue, 25 Oct 2016 20:27:58 GMT

    [ 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

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-issues-help@hadoop.apache.org

View raw message