0

我是 Hadoop 和 HDFS 的新手,所以当我从本地(Ubuntu 10.04)复制到本地主机上的单个节点上的 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,但这次它复制到与第一次不同的位置(/user/hduser/anagram 到 /user /hduser/字谜/字谜)。

~$ $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

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

4

1 回答 1

2

在我看来,这是副作用(检查 FileUtil.java,静态方法 FileUtil.checkDest(String srcName, FileSystem dstFS, Path dst, boolean overwrite) )试试这个:

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

用于更新目录。

于 2011-08-29T10:05:50.233 回答