钻-Azure Blob或Azure文件的镶木地板IO性能问题

时间:2019-06-29 11:10:59

标签: azure-storage azure-storage-blobs parquet apache-drill azure-storage-files

问题:

  • 从天蓝色存储中读取时,Drill的镶木地板读取性能似乎降低了5倍-10倍,这使其无法用于更大的数据工作量。
  • 看实木复合地板时似乎只是一个问题。另一方面,读取CSV可以正常运行。

让我们拥有:

  • 具有约1GB source.csv和具有相同数据的镶木地板的Azure Blob存储帐户。
  • Azure 高级具有相同文件的文件存储
  • 包含相同文件的本地磁盘文件夹
  • 在单一模式下在Azure VM上运行的钻探

钻取配置:

  • Azure blob存储插件用作命名空间blob
  • 随SMB挂载到/ data / dfs的Azure文件用作命名空间dfs
  • 用作命名空间local的本地磁盘文件夹

虚拟机

  • 标准E4s v3(4个vcpus,32 GiB内存)
  • 256GB SSD
  • NIC 2Gbps
  • 6400 IOPS / 96MBps

Azure高级文件共享

  • 1000GB
  • 1000 IOPS基础/ 3000 IOPS爆发
  • 120MB / s吞吐量

存储基准

  • dd,1GB数据,各种块大小,conv = fdatasync进行测量
  • 在每次读取测试(sudo sh -c "echo 3 > /proc/sys/vm/drop_caches")之前,FS缓存已丢弃

本地磁盘

+-------+------------+--------+
| Mode  | Block size | Speed  |
+-------+------------+--------+
| Write |       1024 | 37MB/s |
| Write |         64 | 16MBs  |
| Read  |       1024 | 70MB/s |
| Read  |         64 | 44MB/s |
+-------+------------+--------+

Azure Premium文件存储SMB安装

+-------+------------+---------+
| Mode  | Block size |  Speed  |
+-------+------------+---------+
| Write |       1024 | 100MB/s |
| Write |         64 | 23MBs   |
| Read  |       1024 | 88MB/s  |
| Read  |         64 | 40MB/s  |
+-------+------------+---------+

Azure Blob

天蓝色Blob的最大已知吞吐量为60MB / s。上传/下载速度固定为目标存储的读写速度。


钻探基准

  • 在每次读取测试之前清除文件系统缓存。
  • 使用iotop观察到的IO性能
  • 选择查询仅是为了演示。对于更复杂的查询,执行时间的增长是线性的。

示例查询:

-- Query A: Reading parquet
select sum(`Price`) as test from namespace.`Parquet/**/*.parquet`;

-- Query B: Reading CSV
select sum(CAST(`Price` as DOUBLE)) as test from namespace.`sales.csv`;

结果

+-------------+--------------------+----------+-----------------+
|    Query    | Source (namespace) | Duration | Disk read usage |
+-------------+--------------------+----------+-----------------+
| A (Parquet) | dfs(smb)           | 14.8s    | 2.8 - 3.5 MB/s  |
| A (Parquet) | blob               | 24.5s    | N/A             |
| A (Parquet) | local              | 1.7s     | 40 - 80 MB/s    |
| ---         | ---                | ---      | ---             |
| B (CSV)     | dfs(smb)           | 22s      | 30 - 60 MB/s    |
| B (CSV)     | blob               | 29s      | N/A             |
| B (CSV)     | local              | 18s      | 68 MB/s         |
+-------------+--------------------+----------+-----------------+

观察

  • 在读取实木复合地板时,将产生更多的线程,但是只有cisfd进程才具有IO性能。
  • 尝试按照here所述调整镶木地板阅读器的性能,但没有任何明显的结果。
  • 从天蓝色存储中查询镶木地板时,出口数据的峰值很大,超过了镶木地板数据大小的数倍。实木复合地板有约300MB,但一次读取查询的出口峰值约为2.5GB。

结论

  • 由于某些原因,从Azure文件读取实木复合地板的速度减慢到令人难以置信的速度。
  • 从Azure Blob读取实木复合地板甚至更慢。
  • 从本地文件系统读取实木复合地板非常快,但不适合实际使用。
  • 从任何来源读取CSV都通常会利用存储吞吐量,因此我认为镶木地板阅读器存在一些问题/配置错误。

问题

  • 如此大幅度降低Azure存储中的镶木地板读取性能的原因是什么?
  • 有没有优化的方法?

1 个答案:

答案 0 :(得分:0)

我假设您将使用Azure Monitor交叉检查IO性能问题,并且如果问题仍然存在,我希望在此问题上紧密合作。这可能需要更深入的调查,因此,如果您有支持计划,请请求您提供支持票,否则,请告知我们,我们将尽力帮助您获得一次性的免费技术支持。在这种情况下,您是否可以参考此线程向AzCommunity [at] Microsoft [dot] com发送电子邮件。请在主题字段中提及“ ATTN subm”。感谢您在此问题上的合作,并期待您的答复。