2014-02-19 86 views
5

有没有办法获取HDFS中的目录锁定?这里就是我想要做的事:在HDFS中锁定一个目录

我有一个名为目录../最新/ ...

我每天都需要新的数据添加到这个目录,但在此之前我在这里复制的新数据,我想要获取锁定,这样在我将新数据复制到其中时,没有人正在使用它。

有没有办法在HDFS中做到这一点?

回答

3

不,没有办法通过HDFS来做到这一点。

一般来说,当我遇到这个问题时,我尝试将数据复制到随机临时位置,然后在复制完成后移动文件。这很好,因为mv非常即时,而复制需要更长的时间。这样,如果你检查,看看是否有人正在写,然后MV,时间段和“锁定”保持一段较短的时间

  1. 产生一个随机数
  2. 数据放入一个新的文件夹在HDFS:看到// TMP/$ randomnumber
  3. 检查的目的是确定(hadoop fs -ls也许)
  4. hadoop fs -mv数据到latest目录。

有一个渺茫的机会,在3和4之间,你可能会有人砸东西。如果这真的让你感到紧张,也许你可以在ZooKeeper中实现一个简单的锁。 Curator可以帮助你。

+0

对!在'临时'位置创建数据并移动它并不是防弹的,因为某些用户可能正在运行(长时间)MR工作。不知道ZooKeeper中的一个简单的锁如何帮助。不能保证用户在对我的数据运行MR作业之前将首先获得锁定,对吗?我错过了什么吗?不知何故,我认为锁必须位于Namenode级别。请说明ZooKeeper方法。谢谢。 – DilTeam

+0

是的,你是对的。 ZooKeeper方法假设您相信每个人都使用ZK获取锁定。没有什么会阻止用户忽略它。在我看来,你将不得不寻找一种非技术或设计方法来解决你的问题。 –