实际场景中,我们经常需要通过ftp协议把不同数据源的文件统一汇入到hdfs数据中心,经过实践,有以下的三种方法,分别列出其优缺点及适用场景。
1、 先把文件ftp到本地,然后用命令hdfsdfs –put [local_path] [hdfs_path]
优点:文件在本地可以进行本地化的一系列操作后,再放回hdfs中
缺点:文件传输经过两层,并且从源服务器到本地提取是单机串行,比较消耗时间。
适用于文件放入hfds前需要预处理的情景,如:.zip压缩文件不被hadoop支持的,所以我们可以先在本地转压缩方式然后再放入hdfs中。
2、 hdfs dfs –cp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
优点:简单,提取速度快
缺点:CLI执行不会显示进度
适用场景:适用于小文件的ftp拷贝。
3、 hadoop distcp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
优点:简单,能显示拷贝进度,并且是分布式提取的,数据比较快。
缺点: 如果拷贝的文件是不断有其他程序写入,会报错,因为该命令最后要对数据进行checksum导致两边不一致,当然,该命令是主要用于集群间拷贝的。
适用场景:大量文件或大文件的拷贝。