尝试在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
用于更新目录。
工作就像一个魅力。收到“Target /user/hduser/anagram/SINGLE.TXT已存在”的消息,并且未创建新的嵌套目录 –