增加输入文件的U-SQL 1gb限制?

时间:2018-04-09 15:28:22

标签: u-sql

我的U-SQL输入文件大小似乎达到了1GB的上限。是否有这样的限制,如果有,这怎么可以增加?

简而言之,这就是我的情况:

我正在开发一个自定义xml提取器,我正在处理大约2.5gb的XML文件。这些XML文件符合维护良好的XSD架构。使用xsd.exe我已经为Xml序列化生成了.NET类。自定义提取程序使用这些已弃用的.NET对象来填充输出行。

这一切都在Visual Studio的本地ADLA帐户上运行非常简洁的U-SQL。对于2.5 gb输入xml,内存使用量上升到大约3 gb,因此这应该完全适合每个文件的单个顶点。 使用Data Lake上的< 1gb输入文件仍然可以很好地工作。 但是,当试图在Data Lake Store扩展时,似乎通过达到1gb输入文件大小边界来终止作业。

我知道流式传输外部XML,然后序列化内部XML片段是另一种选择,但我们不希望创建 - 特别是维护 - 过多的自定义代码,具体取决于那些外部管理的模式。 因此,提高上限将是很大的。

Total Data Read Upper Boundary?

1 个答案:

答案 0 :(得分:1)

我现在看到两个问题。我们可以解决的问题,以及我们今年晚些时候正在开发的功能。

  1. 默认情况下,U-SQL假定您要扩展对文件的处理,并将其拆分为1GB"块"用于提取。如果您的提取器需要查看所有数据(例如,为了解析XML或JSON或图像),您需要标记提取器以下列方式原子地处理文件(而不是拆分它):

    [SqlUserDefinedExtractor(AtomicFileProcessing = true)]
    public class MyExtractor : IExtractor
    { ...
    
  2. 现在,当一个顶点有3GB的数据时,我们目前将UDO(如提取器)的内存大小限制为500MB。因此,如果您以需要大量内存的方式处理XML,则当前仍会出现System.OutOfMemory错误。我们正在努力为UDO添加注释,让您指定内存要求以覆盖默认值,但此时仍在开发中。解决这个问题的唯一方法是使数据足够小,或者 - 例如在XML的情况下 - 使用不分配太多内存的流解析策略(例如,使用XML Reader接口)。