我已经准备好hadoop实现的所有部分-我有一个正在运行的集群,以及一个将活动数据推送到HDFS的客户端编写器。我有一个关于接下来会发生什么的问题。我知道我们对已转储到HDFS中的数据运行作业,但我的问题是:
1)首先,我正在向流中写入并定期刷新-我通过HDFS java客户端中的一个线程写入文件,直到我杀死我的服务器时才会看到文件出现在HDFS中。如果我写入足够的数据来填充一个数据块,它会自动出现在文件系统中吗?如何才能使文件准备好由M/R作业处理?
2)我们什么时候运行M/R作业?正如我所说的,我是通过HDFS java客户端中的一个线程来写文件的,而这个线程在文件上有一个写锁。我应该在什么时候释放该文件?这种交互是如何工作的?在什么情况下,对这些数据运行作业是“安全的”,当作业完成后,HDFS中的数据会发生什么情况?
发布于 2012-05-21 13:58:17
我会尽量避免将数据插入hadoop和处理结果之间的“硬”同步。我的意思是,在许多情况下,必须异步处理是最实际的:
a)一个进程将文件放入HDFS。在许多情况下,按日期的-building目录结构非常有用。
b)对除最新数据以外的所有数据运行作业。
您可以对最新的数据运行作业,但应用程序不应转发到最新的结果。在任何情况下,工作通常需要几分钟以上的时间
另外一点- append不是100%主流的东西,而是为HBase构建的高级东西。如果你建立你的应用程序没有使用它-你将能够与其他的DFS,如亚马逊s3,这不支持追加。我们在本地文件系统中收集数据,然后当文件足够大时将其复制到HDFS。
发布于 2012-05-20 22:59:30
https://stackoverflow.com/questions/10674502
复制相似问题