ADLS Gen2/ABFS driver is optimized to read only the bytes that are requested for when the read pattern is random.
It was observed in some spark jobs that though the reads are random, the next read doesn't skip by a lot and can be served by the earlier read if read was done in buffer size. As a result the job triggered a higher count of read calls/higher IOPS, resulting in higher IOPS throttling and hence resulted in higher job runtime.
When these jobs were run against Gen1 which always reads in buffer size , the jobs fared well.
This Jira attempts to get a Gen1 customer migrating to Gen2 get the same overall i/o pattern as gen1 and the same perf characteristics.
|Customer Job||Gen 1 timing||Gen 2 Without patch||Gen2 with patch and RAH=0|
|Job1||2 h 47 m||3 h 45 m||2 h 27 mins|
|Job2||2 h 17 m||3 h 24 m||2 h 39 mins|
|Job3||3 h 16 m||4 h 29 m||3 h 21 mins|
|Job4||1 h 59 m||3 h 12 m||2 h 28 mins|
[Total number of TPCDs queries per suite run = 80
Full suite repeat run count per config = 3]
|Gen1||Gen2 Without patch||Gen2 With patch and RAH=0
(Gen2 in Gen1 config)
|Gen2 With patch and RAH=2|
*Without patch = default Jar with random read logic
*With patch=Modified Jar with change to always read buffer size