以镶木地板文件格式从本地复制到 Blob 时,ADF 中出现内存不足错误

问题描述 投票:0回答:2

我在本地 SQL 中有大约 10M 条记录,我正在尝试使用集成运行时以 parquet 文件格式将其传输到我的 Azure Blob 存储。

对于 2M 记录,传输没有问题,但是当我尝试传输超过 2M 记录时,出现以下错误。

我做了一些研究,我在一篇文章中读到它可能有助于更改 java 的环境变量值。

**_JAVA_OPTIONS with value -Xms256m -Xmx16g.**

**_JAVA_OPTIONS with value -Xms256m -Xmx32g.**

我都尝试了,但仍然遇到相同的错误

"errorCode": "2200",
"message": "Failure happened on 'Sink' side.
ErrorCode=UserErrorJavaInvocationException
,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException
,Message=An error occurred when invoking java, message:
java.lang.OutOfMemoryError:Java heap space
total entry:11
java.util.ArrayDeque.doubleCapacity(Unknown Source)
java.util.ArrayDeque.addFirst(Unknown Source)
java.util.ArrayDeque.push(Unknown Source)
org.apache.parquet.io.ValidatingRecordConsumer.endField(ValidatingRecordConsumer.java:108)
org.apache.parquet.example.data.GroupWriter.writeGroup(GroupWriter.java:58)
org.apache.parquet.example.data.GroupWriter.write(GroupWriter.java:37)
org.apache.parquet.hadoop.example.GroupWriteSupport.write(GroupWriteSupport.java:87)
org.apache.parquet.hadoop.example.GroupWriteSupport.write(GroupWriteSupport.java:37)
org.apache.parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:123)
org.apache.parquet.hadoop.ParquetWriter.write(ParquetWriter.java:292)
com.microsoft.datatransfer.bridge.parquet.ParquetBatchWriter.addRows(ParquetBatchWriter.java:60)
,Source=Microsoft.DataTransfer.Common
,''Type=Microsoft.DataTransfer.Richfile.JniExt.JavaBridgeException,Message=,Source=Microsoft.DataTransfer.Richfile.HiveOrcBridge,'",
"failureType": "UserError",
"target": "Copy Data1"
}
azure jvm azure-blob-storage parquet azure-data-factory
2个回答
1
投票

首先以压缩的 csv 形式进行“暂存”上传,然后将该压缩的 csv 移至命运,但以 blob 存储作为源。这样您就可以放弃自托管 IR 的问题。这个解决方法对我来说已经有效了 5M 行,所以你不妨尝试一下。

希望这有帮助!


1
投票

我收到了类似的错误,但错误消息略有不同“无法检索 Java 异常”(无堆大小),但通过将压缩类型更改为“无”解决了我的问题。默认情况下,镶木地板接收器文件上的快速压缩导致了问题

© www.soinside.com 2019 - 2024. All rights reserved.