GZ 到 ORC 文件的性能改进

Performance improvement for GZ to ORC File

请告诉我有没有更快的方法直接将 (*.gz) 移动到 ORC table。

1)另一个想法,从*.gz 文件到非分区table,而不是创建外部Table 并将gz 文件数据转储到外部Table。是否有任何其他方法可以更快地从 Gz 加载到外部 Table。我们正在考虑其他 2 种方法,例如 Can we have ADF with Custom .exe 来解压缩 *.gz 文件并上传到 Azure Blob。

例如:如果 *.Gz 文件是 10 GB,未压缩的文件是 120 GB,解压缩所需的时间是 40 分钟,我们如何将这个未压缩的 120 GB 数据文件上传到 Azure Blob。我们是否需要有用于上传的 Azure Blob SDK 或 Will ADF Executes .exe 在数据存在的位置,即恰好在保存 Blob 数据的集群。 (如果 ADF 在 Azure Blob 存储数据中心的集群中执行 .exe,那么将没有网络成本,没有网络延迟,并且上传未压缩数据的上传时间将会非常少)。那么 ADF 有可能吗?这是正确的做法吗?

  1. 如果上述方法不起作用,如果我们创建 MR 解决方案,其中 Mapper 将解压缩 Gz 文件并上传到 Azure Blob 存储,是否会有任何性能改进,因为我只需要创建指向未压缩文件的外部 Table。 MR 将在 Azure Blob 存储位置执行。

  2. 我们看到 ORC 和带分区的 ORC 执行相同(有时我们看到最小差异 b/w ORC 分区和没有分区的 ORC)。 ORC With Partition 会比 ORC 表现更好吗? ORC With Partition Bucketing 会比 ORC Partition 表现更好吗?我看到每个 ORC 分区文件接近 50-100 MB,ORC With Out Partition(每个文件大小 30-50 MB)。

**注意:120 GB 的未压缩数据被压缩为 17 GB 的 ORC 文件格式

我知道从 gz 文件格式转移到 ORC 文件格式的唯一方法是编写一个 Hive 查询。使用压缩格式总是比较慢,因为它需要在转换前解压缩。您可能想尝试使用这些参数,如图所示 ,看看它是否加快了从 gz 到 orc 的移动速度。

对于上面的问题 #1,您可能需要跟进 Azure 数据工厂团队。

对于问题 #3,我没有尝试过,但对未压缩数据的计算应该比使用压缩数据更快。

对于 #4,取决于您要分区的字段。确保您的密钥未分区(即导致分区太少)。还要确保添加排序依据以添加辅助分区键。有关详细信息,请参阅 this link。

Hive 原生支持压缩格式,包括 GZIP、BZIP2 和 deflate。因此,您可以将 .gz 文件上传到 Azure Blob 并直接使用这些文件创建外部 table。然后你可以用 ORC 创建 table 并在那里加载数据。通常 Hive 使用压缩文件运行速度更快,请参阅 Compression in Hadoop by MSIT 了解详情。