You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hudi.apache.org by wei li <lw...@gmail.com> on 2020/05/25 15:00:24 UTC

[Discussion]Hudi support more complete concurrency control when write data

Now hudi  just support write、compaction  concurrency control. But some
 scenario need  write  concurrency control.Such as two spark job with
different data source ,need to write to the same hudi table.

I have two Proposal:

1. first  step :support write concurrency control on different partition
but now  when two client write data to different partition, will meet these
error

a、Rolling back commits failed

b、instants version already exist
[2020-05-25 21:20:34,732] INFO Checking for file exists
?/tmp/HudiDLATestPartition/.hoodie/20200525212031.clean.inflight
(org.apache.hudi.common.table.timeline.HoodieActiveTimeline)
Exception in thread "main" org.apache.hudi.exception.HoodieIOException:
Failed to create file /tmp/HudiDLATestPartition/.hoodie/20200525212031.clean
  at
org.apache.hudi.common.table.timeline.HoodieActiveTimeline.createImmutableFileInPath(HoodieActiveTimeline.java:437)
  at
org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionState(HoodieActiveTimeline.java:327)
  at
org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionCleanInflightToComplete(HoodieActiveTimeline.java:290)
  at
org.apache.hudi.client.HoodieCleanClient.runClean(HoodieCleanClient.java:183)
  at
org.apache.hudi.client.HoodieCleanClient.runClean(HoodieCleanClient.java:142)
  at
org.apache.hudi.client.HoodieCleanClient.lambda$clean$0(HoodieCleanClient.java:88)
  at
java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)

c、two client's archiving conflict

d、the read client meets "Unable to infer schema for Parquet. It must be
specified manually.;"

2. second step: support insert、upsert、compaction concurrency control  on
different  isolation level such as Serializable、WriteSerializable.

hudi can design a mechanism to check the confict in
AbstractHoodieWriteClient.commit()

I created a issue https://issues.apache.org/jira/browse/HUDI-944

Best Regards,
Wei Li.

Re: [Discussion]Hudi support more complete concurrency control when write data

Posted by Vinoth Chandar <vi...@apache.org>.
Hi Wei Li,

Left some detailed comments on the JIRA
https://issues.apache.org/jira/browse/HUDI-944?focusedCommentId=17119668&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17119668

This is a great discussion.. thanks for getting this kicked off

Thanks
Vinoth

On Mon, May 25, 2020 at 8:10 AM wei li <lw...@gmail.com> wrote:

> Now hudi  just support write、compaction  concurrency control. But some
>  scenario need  write  concurrency control.Such as two spark job with
> different data source ,need to write to the same hudi table.
>
> I have two Proposal:
>
> 1. first  step :support write concurrency control on different partition
> but now  when two client write data to different partition, will meet these
> error
>
> a、Rolling back commits failed
>
> b、instants version already exist
> [2020-05-25 21:20:34,732] INFO Checking for file exists
> ?/tmp/HudiDLATestPartition/.hoodie/20200525212031.clean.inflight
> (org.apache.hudi.common.table.timeline.HoodieActiveTimeline)
> Exception in thread "main" org.apache.hudi.exception.HoodieIOException:
> Failed to create file
> /tmp/HudiDLATestPartition/.hoodie/20200525212031.clean
>   at
>
> org.apache.hudi.common.table.timeline.HoodieActiveTimeline.createImmutableFileInPath(HoodieActiveTimeline.java:437)
>   at
>
> org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionState(HoodieActiveTimeline.java:327)
>   at
>
> org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionCleanInflightToComplete(HoodieActiveTimeline.java:290)
>   at
>
> org.apache.hudi.client.HoodieCleanClient.runClean(HoodieCleanClient.java:183)
>   at
>
> org.apache.hudi.client.HoodieCleanClient.runClean(HoodieCleanClient.java:142)
>   at
>
> org.apache.hudi.client.HoodieCleanClient.lambda$clean$0(HoodieCleanClient.java:88)
>   at
>
> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
>
> c、two client's archiving conflict
>
> d、the read client meets "Unable to infer schema for Parquet. It must be
> specified manually.;"
>
> 2. second step: support insert、upsert、compaction concurrency control  on
> different  isolation level such as Serializable、WriteSerializable.
>
> hudi can design a mechanism to check the confict in
> AbstractHoodieWriteClient.commit()
>
> I created a issue https://issues.apache.org/jira/browse/HUDI-944
>
> Best Regards,
> Wei Li.
>