【问题标题】:Combine 65000 small xml files in blobs storage and copy them into data lake as big CSV files将 65000 个小 xml 文件合并到 blob 存储中,并将它们作为大 CSV 文件复制到数据湖中
【发布时间】:2017-09-09 15:40:24
【问题描述】:

我在 Azure blob 存储中每小时有大约 65000 个小 xml 文件(每个文件大约 1 到 3 kb)。它的遥测数据每小时都会以blob形式出现。我想将它们全部组合并创建大 xml 文件(每小时一个文件左右)并将其转换为大 csv 文件。然后我想将其复制到 azure 数据湖存储中,以便我可以使用 U 进一步分析-SQL 脚本。请告诉我这样做的正确方法是什么。

目前我们正在使用 azure 批处理服务,该服务通过将所有文件名保存在 Azure 表存储中来实现此目的,并且批处理服务中的每个任务将从表存储中读取数据并在完成后对其进行更新。

我认为使用 Web 作业 sdk 和 Azure 服务总线 - 主题和订阅,我们可以做得更好。每小时我们可以考虑一个主题和一个订阅者。

让我知道我的想法是正确的,或者我们可以用一些更好的技术来做到这一点。

【问题讨论】:

    标签: azureservicebus azure-data-lake azure-queues azure-blob-storage azure-batch


    【解决方案1】:

    在我看来,你可以在web job中直接将xml文件合并并转换为csv(你的数据不是很大)。操作完成后,您可以将转换后的文件上传到数据湖存储。

    但是如果你使用这种方式,你无法将数据实时上传到数据湖存储。

    您可以使用 azure web job timer trigger(每小时运行转换代码)来帮助您合并和转换数据。

    如果你想实时保存数据,我建议你可以考虑使用webjob(使用blob trigger)先将数据读取到服务总线,然后你可以使用流分析将数据转换为数据中的csv储存湖。

    【讨论】:

    • blob 触发器会处理那么多新工作吗?每秒大约 20 个新 blob?
    • 现在,无法立即触发 blob 触发器。如果你想立即解雇,你需要使用Azure Service Bus Trigger
    • 如果它在一段时间后触发,我没问题。但我更关心 Azure 函数将如何处理这种负载。据我所知,每个 azure 函数都将启动新的 VM,并将在该 VM 上运行我们的代码。所以在我的情况下 - 它每小时启动 65000 个虚拟机吗?每个虚拟机也没有太多工作,因为我只想将小 xml 转换为 csv 并将其上传到数据湖存储。是否有意义?我想我对 Azure Function 的工作原理了解不多?请帮助我理解这一点。
    • 据我所知,这将取决于您使用的 azure 功能托管计划。首先,天蓝色函数可以异步运行您的方法。所以它不会启动 65000VMs。如果您使用消费计划,它会自动缩放虚拟机以使您的方法运行良好。更多详情,可以参考这个article
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-02-20
    • 2020-02-02
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多