与用于ADLA U-SQL作业的通用存储Blob相比,ADLS第1代性能较差

时间:2019-01-09 02:40:00

标签: azure azure-storage-blobs azure-data-lake u-sql

首字母缩写

  • ADLA:Azure Data Lake Analytics
  • ADLS:Azure Data Lake存储

我一直在努力寻找最好的选择,以便将ADLA U-SQL作业的输入数据存储在ADLS(第1代)或通用存储Blob容器中,并且一直在发现ADLA作业的提取物从ADLS读取时,性能糟糕

对于一个测试,我将相同的数据集上传到ADLS Gen 1和一个通用的blob容器,并运行相同的ADLS U-SQL作业,但该作业只是在其输入数据的来源上有所不同。消除输入文件集(按日期)将输入集修剪为67个输入文件,总计1.59MB(是的,MB-该合成数据集中的许多小文件)

ADLA作业从ADLS(adl: or swebhdfs: protocols-几乎没有区别)或通用Blob存储(wasb: protocol)中获取数据。

从ADLS中,提取阶段花费了将近13分钟,而通用blob帐户仅花费了18秒。对于所有输入源,其余的工作时间几乎相同(如您所愿)。

当我的输入数据集位于ADLS而非通用存储帐户中时,我会看到这种程度的性能差异吗?

我的ADLA脚本看起来像这样-里面没有任何异国情调:

//General purpose blob wasb: protocol
DECLARE @InputPath = @"wasb://{container}@{account}.blob.core.windows.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";

//ADLS adl: protocol
//DECLARE @InputPath = @"adl://{adls-account}.azuredatalakestore.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";

//ADLS swebhdfs: protocol
//DECLARE @InputPath = @"swebhdfs://{adls-account}.azuredatalakestore.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";

DECLARE @StartDate = DateTime.Parse("2018-02-25T00:00:00+00:00");
DECLARE @EndDate   = DateTime.Parse("2018-02-27T23:59:59+00:00");

@tsvArchiveRecords =
    EXTRACT 
            TenantId int?,
            UserId long?,
           // Snip more fields for brevity
            date DateTime //virtual column
    FROM @InputPath
    USING Extractors.Tsv(skipFirstNRows: 1);

@logs =
    SELECT TenantId,
            UserId,
            // Snip more fields for brevity
    FROM @tsvArchiveRecords
    WHERE date BETWEEN @StartDate AND @EndDate;

//snip more processing and outputs for brevity

0 个答案:

没有答案