传输大量小文件

时间:2018-12-16 04:44:27

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

当数据在MB或什至GB范围内,但是当您收集大量小文件(例如,大数据)时,通常的数据传输方法(scp,http和ftp实用程序,例如curl或wget)可以正常工作10KB),传输速度非常慢,并且带宽根本没有使用。

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

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

2 个答案:

答案 0 :(得分:2)

我没有使用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 处理器将根据与流文件关联的属性动态地进行文件的实际提取。

    < / li>
  • 使用来自 success 处理器的FetchFile连接将文件通过 PutFile/PutSFTP..etc传输到 S2 Sever } 处理器。

有关以上流程的更多详细信息/用法,请参考this链接。

答案 1 :(得分:0)

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

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

-肯