如何使用flume将同步文件复制到HDFS?

时间:2015-09-02 12:41:15

标签: hadoop hdfs flume

我有一个目录树,其中包含两个目录和同步文件:

home/dirMaster/file1.txt
home/dirMaster/file2.txt
home/dirSlave/file1-slave.txt
home/dirSlave/file2-slave.txt

基于文件名file1-slave.txt具有对应于file1.txt的记录

我想使用flume移动到hdfs,但根据我的阅读,到目前为止我有以下问题:

  1. 水槽不会保留我的文件名 - 所以我输了 同步
  2. flume不保证来自源的文件与目的地匹配 - 例如源文件可能会拆分为多个dest文件
  3. 这是对的吗?水槽能支持这种情况吗?

1 个答案:

答案 0 :(得分:1)

Flume Agent 允许将数据从源移动到接收器。它使用通道在滚入Sink之前保留这些数据。

Flume的其中一个接收器是 HDFS接收器。 HDFS接收器允许根据以下标准将数据滚动到HDFS中。

  • hdfs.rollSize
  • hdfs.rollInterval
  • hdfs.rollCount

它根据上述参数组合滚动数据,文件名具有预定义模式。我们还可以使用Sink参数控制文件名。但是这种模式对于由此代理滚动的所有文件都是相同的。我们不能指望单个水槽代理的不同文件路径模式。

agent.sinks.sink.hdfs.path = HDFS://:9000 / <强>图案

模式可以是静态动态路径

Flume还根据滚动条件生成n个文件。

因此Flume不适合您的要求。 Flume最适合流式数据摄取。

DistCP:它是HDFS中的分布式并行数据加载实用程序。 它是一个Map MapReduce程序,它将在目标目录中生成n个零件文件(= no of maps)。

所以DistCP也不适合旅游要求。

因此最好使用hadoop fs -put将数据加载到HDFS中。

hadoop fs -put /home/dirMaster/ /home/dirMaster/ /home/