从本地加载大文件到hdfs的最佳方式是什么?



我有一个包含多个文件夹的目录,每个目录有N个文件。单个文件大小为15gb。我不知道将文件从本地复制/移动到HDFS的最佳方法是什么

有很多方法可以做到这一点(使用传统方法),例如

  1. hdfs dfs -put /path/to/localdir/ hdfs://path/to/hdfsdir
  2. hdfs dfs -copyFromLocal /path/to/localdir/ hdfs://path/to/hdfsdir
  3. hdfs dfs -moveFromLocal /path/to/localdir/ hdfs://path/to/hdfsdir
  4. hadoop distcp file:///path/to/localdir/ hdfs://namenode:port/path/to/hdfsdir

选项1 &你的情况也一样。拷贝时间不会有任何差异。

选项3可能需要更多的时间,因为它将数据复制到HDFS文件系统(与-put相同),然后从本地文件系统中删除文件。

选项4是一个棘手的问题。它是为大规模集群间/集群内复制而设计的。但是您也可以通过提供带有"file://"前缀的本地文件URL来对本地文件使用相同的命令。这不是最优的解决方案,因为该工具被设计为并行工作(使用MapReduce),并且由于文件在本地,它无法利用其强度。(您可以尝试在集群节点上创建一个挂载,这可能会提高distcp的性能)

最新更新