5

我对 hadoop 很陌生,所以请原谅愚蠢的问题。

我有以下知识 Hadoop 的最佳用例是大文件,因此在运行 mapreduce 任务时有助于提高效率。

牢记上述内容,我对 Flume NG 感到有些困惑。假设我正在跟踪一个日志文件并且每秒生成一次日志,当日志换行时,它将通过 Flume 传输到 hdfs。

a)这是否意味着水槽在我正在跟踪的日志文件中记录的每一行上创建一个新文件,或者它是否附加到现有的 hdfs 文件?

b)首先允许在hdfs中追加?

c) 如果 b 的答案是真的?即内容不断添加,我应该如何以及何时运行我的 mapreduce 应用程序?

上述问题可能听起来很愚蠢,但同样的答案将不胜感激。

PS:我还没有设置 Flume NG 或 hadoop,只是阅读文章以了解它如何为我的公司增加价值。

4

1 回答 1

5

Flume 通过 HDFS sink 写入 HDFS。当 Flume 启动并开始接收事件时,sink 会打开新文件并将事件写入其中。在某些时候,之前打开的文件应该被关闭,在此之前正在写入的当前块中的数据对其他 redaers 不可见。

文档中所述,Flume HDFS sink 有几种文件关闭策略:

  • 每 N 秒(由rollInterval选项指定)
  • 写入 N 个字节后(rollSize选项)
  • 写入 N 个接收事件后(rollCount选项)
  • 在 N 秒不活动后(idleTimeout选项)

所以,对于你的问题:

a) Flume 将事件写入当前打开的文件,直到它关闭(并打开新文件)。

b) HDFS 中允许追加,但 Flume 不使用它。文件关闭后,Flume 不会向其附加任何数据。

c) 要从 mapreduce 应用程序使用inUsePrefix选项隐藏当前打开的文件 - 名称以 开头的所有文件.对 MR 作业不可见。

于 2013-07-19T11:36:49.280 回答