hadoop rm 程序猿删集群跑路 忘记怎么操作

Apache Hadoop是一款支持数据密集型分布式应用程序并以Apache 2.0许可协议发布的开源软件框架,程序猿在对它的日常运维有涉及到集群数据的删除 hadoop rm(hdfs dfs -rm) 操作。

hadoop 小象

1、直接删除

hdfs dfs -rm /path/to/file/you/want/to/remove/permanently

删除的目录会放入/user/hdfs/.Trash中。如果加上-skipTrash 参数则不放入回收站。如下:

hdfs dfs -rm -skipTrash /path/to/file/you/want/to/remove/permanently

2、清空回收站

hdfs dfs -expunge
# 输出 This should give you output similar to this. Basically in a minute the trash will be emptied.

执行完命令后,回收站的数据不会立即被清理,而是先打了一个checkpoint。显示的是一分钟后清除。

hadoop distcp 分布式拷贝命令基本介绍

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. …

hadoop部分简介

我们在使用大数据hadoop集群的时候,除了利用它做数据的处理和计算外,还是要对hadoop集群做日常的维护,同样有集群的运维就会涉及到升级、数据迁移、不同集群拷贝数据等问题。

DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。

1、命令参数选项

标识描述备注
-p[rbugp]Preserve  r: replication number  b: block size  u: user  g: group  p: permission修改次数不会被保留。并且当指定 -update 时,更新的状态会 被同步,除非文件大小不同(比如文件被重新创建)。
-i忽略失败就像在 附录中提到的,这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
-log <logdir>记录日志到 <logdir>DistCp为每个文件的每次尝试拷贝操作都记录日志,并把日志作为map的输出。 如果一个map失败了,当重新执行时这个日志不会被保留。
-m <num_maps>同时拷贝的最大数目指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
-overwrite覆盖目标如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 就像下面提到的,它会改变生成目标路径的语义,所以 用户要小心使用这个选项。
-update如果源和目标的大小不一样则进行覆盖像之前提到的,这不是”同步”操作。 执行覆盖的唯一标准是源文件和目标文件大小是否相同;如果不同,则源文件替换目标文件。 像 下面提到的,它也改变生成目标路径的语义, 用户使用要小心。
-f <urilist_uri>使用<urilist_uri> 作为源文件列表这等价于把所有文件名列在命令行中。 urilist_uri 列表应该是完整合法的URI。
distcp参数选项

2、基本使用方法

# 入门操作
bash$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo

注意DistCp使用绝对路径进行操作。上边这条命令会把nn1集群的/foo/bar目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务, 然后每个TaskTracker分别执行从nn1到nn2的拷贝操作。

# 多数据源
bash$ hadoop distcp hdfs://nn1:8020/foo/a \ 
                    hdfs://nn1:8020/foo/b \ 
                    hdfs://nn2:8020/bar/foo
  • 每个TaskTracker必须都能够与源端和目的端文件系统进行访问和交互。 对于HDFS来说,源和目的端要运行相同版本的协议或者使用向下兼容的协议。
  • 当从多个源拷贝时,如果两个源冲突,DistCp会停止拷贝并提示出错信息, 如果在目的位置发生冲突,会根据选项设置解决。 默认情况会跳过已经存在的目标文件(比如不用源文件做替换操作)。每次操作结束时 都会报告跳过的文件数目,但是如果某些拷贝操作失败了,但在之后的尝试成功了, 那么报告的信息可能不够精确.
  • 拷贝完成后,建议生成源端和目的端文件的列表,并交叉检查,来确认拷贝真正成功。 因为DistCp使用Map/Reduce和文件系统API进行操作,所以这三者或它们之间有任何问题 都会影响拷贝操作。一些Distcp命令的成功执行可以通过再次执行带-update参数的该命令来完成, 但用户在如此操作之前应该对该命令的语法很熟悉。
  • 值得注意的是,当另一个客户端同时在向源文件写入时,拷贝很有可能会失败。 尝试覆盖HDFS上正在被写入的文件的操作也会失败。 如果一个源文件在拷贝之前被移动或删除了,拷贝失败同时输出异常 FileNotFoundException。