尝试在HDFS中更新文件时HDFS路径发生变化

问题描述:

我是Hadoop和HDFS的新手,所以也许这是我从本地(Ubuntu 10.04)复制到localhost上的单个节点上的HDFS时出错的问题。初始复制工作正常,但是当我修改我的本地输入文件夹并尝试复制回HDFS时,HDFS路径会发生变化。尝试在HDFS中更新文件时HDFS路径发生变化

~$ $HADOOP_HOME/bin/hadoop dfs -copyFromLocal /tmp/anagram /user/hduser/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/anagram 
Found 1 items 
-rw-r--r-- 1 hduser supergroup 4067675 2011-08-29 05:44 /user/hduser/anagram/SINGLE.TXT 

添加其他文件(COMMON.TXT)到相同的本地目录后,我运行的本地目录HDFS相同的副本,但这次它拷贝到不同的位置比第一次(/用户/ hduser/anagram到/ user/hduser/anagram/anagram)。

~$ $HADOOP_HOME/bin/hadoop dfs -copyFromLocal /tmp/anagram /user/hduser/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/anagram 
Found 2 items 
-rw-r--r-- 1 hduser supergroup 4067675 2011-08-29 05:44 /user/hduser/anagram/SINGLE.TXT 
drwxr-xr-x - hduser supergroup   0 2011-08-29 05:48 /user/hduser/anagram/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/anagram/anagram 
Found 2 items 
-rw-r--r-- 1 hduser supergroup  805232 2011-08-29 05:48 /user/hduser/anagram/anagram/COMMON.TXT 
-rw-r--r-- 1 hduser supergroup 4067675 2011-08-29 05:48 /user/hduser/anagram/anagram/SINGLE.TXT 

有没有人遇到过这个?我发现,要解决这个问题,你需要删除的第一个目录,然后再拷贝过来:

~$ $HADOOP_HOME/bin/hadoop dfs -rmr /user/hduser/anagram/anagram 
Deleted hdfs://localhost:54310/user/hduser/anagram/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -rmr /user/hduser/anagram 
Deleted hdfs://localhost:54310/user/hduser/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -copyFromLocal /tmp/anagram /user/hduser/anagram 
~$ $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/anagram 
Found 2 items 
-rw-r--r-- 1 hduser supergroup  805232 2011-08-29 05:55 /user/hduser/anagram/COMMON.TXT 
-rw-r--r-- 1 hduser supergroup 4067675 2011-08-29 05:55 /user/hduser/anagram/SINGLE.TXT 

有谁知道如何做到这一点,而不必每次都删除目录?

在我看来,这是副作用(检查FileUtil.java,静态方法FileUtil.checkDest(字符串源名,文件系统dstFS,路径DST,布尔覆盖)) 试试这个:

hadoop dfs -copyFromLocal /tmp/anagram/*.TXT /user/hduser/anagram 

用于更新目录。

+0

工作就像一个魅力。收到“Target /user/hduser/anagram/SINGLE.TXT已存在”的消息,并且未创建新的嵌套目录 –