Hadoop,distcp你真的会用吗?附避坑指南
distcp作用是从hdfs复制一个或多个数据文件或数据目录到一个指定目录下。会启动Map任务去复制,不会启动Reduce任务。
语法:
$ hadoop distcp 配置参数(-pt -overwrite等) hdfs:......源表1/dt=xxxx/ *hdfs:......源表2/dt=xxxx/* hdfs:......目的表/dt=xxxx $ hive -e "select * from 目的表 where dt = 'xxxx'"
-
以上命令是把源表1和源表2的dt=xxxx下的所有数据文件和子目录复制到目的表的dt=xxxx路径下。
-
即使目的分区路径不存在也不会报错,distcp会自动创建目的分区路径和添加分区信息(目的表需要先存在)。
-
distcp有很多配置,比如复制时的最大网络带宽、最大map任务个数、是覆盖还是追加、是否保留源文件时间等等。
-
'-pt'的作用是保留源文件的修改时间(不然复制到目的路径下的文件的修时间就是复制完成时的时间)
-
'-overwrite'的作用是覆盖同名文件(不是覆盖路径),如果目的路径下不存在该源文件则是复制过来!(目的路径下的其他文件依然存在且无变化!)
-
'-update'的作用是修改,如果目的路径已存在与源路径下的某个文件名和大小均相同的文件,则不再复制该文件(不管文件内容和文件修改时间是否变化)。只会复制目的路径下不存在文件、同名且文件大小不一致的文件。目的路径下的其他文件依然存在且无变化!
实例:请务必仔细体会:
具体实例请关注我的微信公众号【程序员实用技能】
#学习路径#