An Azure service that provides an enterprise-wide hyper-scale repository for big data analytic workloads and is integrated with Azure Blob Storage.
Hello @Johnny Xiao
Thank you for the detailed investigation. Based on the behavior you've described, this does not appear to be an issue with your pipeline code or permissions. Your testing strongly suggests the failure occurs during the Azure ML runtime's upload finalization when it issues the WebHDFS MSCONCAT operation.
The key observations are:
- The same identity and datastore can upload smaller files successfully.
- The failure occurs consistently once the file exceeds the apparent multi-part upload threshold (~8 MiB).
- The same large file succeeds when written to a non-migrated ADLS Gen1 path.
- Both mode=upload and mode=rw_mount fail during the same MSCONCAT finalize step.
This points to the interaction between the Azure ML runtime (azureml-dataprep-rslex) and ADLS Gen1 paths exposed as Gen1-to-Gen2 symlinks, rather than an authentication or authorization issue.
From the Azure ML documentation, there is no documented setting to disable MSCONCAT, force a single-stream upload above the internal threshold, or configure the block size used by the managed upload pipeline. Those implementation details are handled internally by the Azure ML runtime.
At this point, I'd recommend a Microsoft moderator engage the Azure Machine Learning engineering team to confirm whether:
- MSCONCAT against Gen1-to-Gen2 symlinked folders is a known limitation.
- The ~8 MiB threshold is fixed or configurable.
- A newer version of azureml-dataprep-rslex changes this upload behavior.
To help with the investigation, could you also provide:
- The Azure ML SDK version (azure-ai-ml).
- The exact version of azureml-dataprep-rslex used by the compute environment.
- Whether the same behavior occurs on another compute target or environment image.
- Whether writing directly to an Azure Data Lake Storage Gen2 datastore (instead of the migrated Gen1 endpoint) succeeds for files larger than 8 MiB.
Since the upload is performed by the managed Azure ML runtime rather than your application code, this information will help determine whether the issue is a known runtime limitation or a regression.
Based on the evidence you've collected, this looks like a service/runtime behavior rather than something that can be worked around through SDK configuration. An engineering review would be the appropriate next step to determine whether this is a known limitation of MSCONCAT on migrated Gen1-to-Gen2 symlink paths or a defect in the Azure ML upload runtime.
Please "Accept the Answer" if this information helped you. This will help us and others in the community as well.