hadoop fs -put和hadoop fs -copyFromLocal之间的区别

sna*_*ppy 51 hadoop hdfs

-put-copyFromLocal记录为相同,而大多数示例使用详细变量-copyFromLocal.为什么?

同样的事情-get-copyToLocal

Oza*_*ray 61

  • copyFromLocal类似于put命令,但源仅限于本地文件引用.

所以,基本上你可以使用put,你用copyFromLocal做的所有事情,但反之亦然.

同样的,

  • copyToLocal类似于get命令,但目标仅限于本地文件引用.

因此,您可以使用get而不是copyToLocal,但不能反过来使用.

参考:Hadoop的文档.

更新:对于最新的华侨城2015年,请参阅下面的答案.


Tho*_*lut 38

让我们举一个例子:如果您的HDFS包含路径:/tmp/dir/abc.txt 如果您的本地磁盘也包含此路径,那么hdfs API将不知道您的意思,除非您指定类似file://或的方案hdfs://.也许它选择了你不想复制的路径.

因此-copyFromLocal,通过限制您为本地文件系统提供的参数,您可以防止意外复制错误的文件.

Put 适用于了解哪种方案可以放在前面的更高级用户.

新Hadoop用户总是有点混淆他们当前所在的文件系统以及他们的文件实际位置.

  • 所以第一个参数并不总是一个本地的fs路径.如果您愿意,可以从一个HDFS"放"到另一个HDFS.`-copyFromLocal`将确保它只从本地磁盘中选择并上传到HDFS. (8认同)

Syl*_*oux 19

尽管什么是文件声称,截至目前(10月2015),都-copyFromLocal-put是相同的.

从在线帮助:

[cloudera@quickstart ~]$ hdfs dfs -help copyFromLocal 
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
  Identical to the -put command.
Run Code Online (Sandbox Code Playgroud)

通过查看源代码可以确认这一点,您可以看到CopyFromLocal类扩展了Put类,但没有添加任何新行为:

  public static class CopyFromLocal extends Put {
    public static final String NAME = "copyFromLocal";
    public static final String USAGE = Put.USAGE;
    public static final String DESCRIPTION = "Identical to the -put command.";
  }

  public static class CopyToLocal extends Get {
    public static final String NAME = "copyToLocal";
    public static final String USAGE = Get.USAGE;
    public static final String DESCRIPTION = "Identical to the -get command.";
  }
Run Code Online (Sandbox Code Playgroud)

你可能会注意到,这与get/ 完全相同copyToLocal.