0

我已经准备好 hadoop 实现的所有部分——我有一个正在运行的集群,以及一个将活动数据推送到 HDFS 的客户端编写器。我有一个关于接下来会发生什么的问题。我了解我们针对已转储到 HDFS 中的数据运行作业,但我的问题是:

1)首先,我正在写入流并定期刷新 - 我正在通过 HDFS java 客户端中的线程写入文件,并且在我终止服务器之前我看不到文件出现在 HDFS 中。如果我写入足够的数据来填充一个块,它会自动出现在文件系统中吗?我如何才能拥有准备好由 M/R 作业处理的文件?

2) 我们什么时候运行 M/R 作业?就像我说的,我正在通过 HDFS java 客户端中的一个线程写入文件,并且该线程对文件进行了锁定以进行写入。我应该在什么时候发布该文件?这种互动如何运作?在什么时候针对该数据运行作业是“安全的”,以及在 HDFS 中的数据完成后会发生什么?

4

2 回答 2

1
  1. 写入数据以填充块,您将在系统中看到文件

  2. M/R 被提交给调度器,调度器负责根据数据运行它,我们不必担心

于 2012-05-20T14:59:29.890 回答
1

我会尽量避免数据插入hadoop和处理结果之间的“硬”同步。我的意思是,在许多情况下,必须使用异步进程是最实际的:
a) 一个进程将文件放入 HDFS。在许多情况下 - 按日期构建目录结构很有用。
b) 为除最新数据之外的所有数据运行作业。
您可以在最近的数据上运行作业,但应用程序不应转发最新的结果。在任何情况下,工作通常需要超过几分钟的时间

另一点 - append 不是 100% 的主流,而是为 HBase 构建的高级东西。如果您在不使用它的情况下构建您的应用程序 - 您将能够使用其他不支持附加的 DFS,如亚马逊 s3。我们在本地文件系统中收集数据,然后在文件足够大时将它们复制到 HDFS。

于 2012-05-21T05:58:16.917 回答