【问题标题】:Transferring a Large Collection of Small-size Files传输大量小型文件
【发布时间】:2018-12-17 05:58:01
【问题描述】:

当您的数据在 MB 甚至 GB 范围内时,传输数据的常用方法(scp、http 和 ftp 实用程序,例如 curl 或 wget)可以正常工作,但是当您拥有非常大的小文件集合时(例如10KB) 那里,传输会很慢,而且带宽根本没用。

有两台服务器(S1,S2),当一个文件在 S1 中接收到时,它应该立即将它发送到 S2。

您对使用一些 DSP 工具(例如 Apache Flink 或 NIFI)有任何想法吗?

【问题讨论】:

  • 我怀疑您的问题的某些方面我遗漏了,但通常当您有很多小文件时,您要么tar/zip 将它们放在一起以避免 "per -file" 开销,或者您运行多个并行流以使用可用带宽。

标签: ftp apache-flink apache-nifi file-transfer data-stream


【解决方案1】:

我没用过Apache-Flink 但是 使用 NiFi 这个用例相当简单(只需拖放和配置 3 个处理器)

流程:

1.ListFile //list files in S1 server
    --> Success Connection (Load Balance Strategy (or) Remote Processor Group)
2.FetchFile //fetch the file from S1 Server
    --> Success Connection
3.PutFile //send the file to S2 server
  • 我们将一直运行 ListFile/ListSFTP..etc 处理器以递增地列出目录中的文件。

  • 一旦我们列出了文件,我们就可以load balance and distribute 跨集群中的所有节点进行工作

  • 文件的实际提取将由 FetchFile 处理器根据与流文件关联的属性动态完成。

  • 使用来自 FetchFile 处理器的 success 连接将文件传输到使用 PutFile/PutSFTP..etc 处理器的 S2 Sever .

请参考this链接了解更多详情/上述流程的用法。

【讨论】:

    【解决方案2】:

    您可以使用 Flink 连续复制文件,是的 - 虽然这不是我通常看到的用例,因为您所做的只是移动字节,而不是处理数据数据(这是 Flink 最擅长的地方)。

    要使用 Flink 执行此操作,您需要设置一个 (Rich)SourceFunction 来持续监控 S3 源目录,并发出任何新文件的路径。然后您可能会使用AsyncFunction 将文件从当前位置异步复制到新位置。

    -- 肯

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2012-06-20
      • 2021-09-07
      • 1970-01-01
      • 2012-07-23
      • 2013-05-27
      相关资源
      最近更新 更多