Archive命令
hadoop Archive是一个高效地将小文件放入HDFS块中的文件存档文件格式,它能够将多个小文件打包成一个后缀为.har文件,这样减少namenode内存使用的同时,仍然允许对文件进行透明的访问。
hadoop Archive目录包含元数据文件( _index 和 _masterindex)和数据文件(part-*),这个_index文件包含了所有文件的名称和他对应part文件的位置。
(1)怎么使用Archive
使用:
hadoop archive -archiveName name -p <parent> [-r <replication factor>] <src>* <dest>
-archiveName 你需要创建的archive的文件名, 例如:tmp.har. 名字应该用*.har后缀。是指定Archive文件的相对路径,例如:-p /user/dss/ /test1 /test2
这里 /user/dss/是/test1和/test2两个相对路径的父路径. 一个是要归档的资源路径,一个是最终归档路径的存放路径。注意:Archive是MapReduce创建了。所以要在map reduce集群环境下运行它。
-r 指示所需的复制因子;如果该可选参数未指定,将使用10的复制因子。
例如:将/user/fish/arch/test1目录下的文件归档到/user/tom/test33文件夹下:hadoop archive -archiveName test.har -p /user/fish arch/test1/ test2
例如:使用通配符,将/user/fish/2015 10,11,12月归档到/user/test33文件夹下:
hadoop archive -archiveName combine.har -p /user/fish2015 1[0-2] /user/test33
例如:不指定归档目录,直接归档parent目录:/user/fish/目录到/user/test33文件夹下:
hadoop archive -archiveName combine.har -p /user/fish /user/test33
例如:归档多个目录,归档/user/fish/目录下的111,222,333目录到/user/test33文件夹下:
hadoop archive -archiveName combine.har -p /user/fish/ 111 222 333 /user/test33
查看Archive文档
查看归档文档
hadoop fs -ls /test/test.har
hadoop dfs -ls /test/test.har
hadoop fs -ls har:test2/test.har/
解压 Archive文档
文件夹内部归档,解压之后会变回archive之前的路径。
例如
/user/dss/test/* 归档成test.har之后解压仍为 /user/dss/test/li 子目录仍存在
串行解压:
hdfs dfs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
并行解压(Mapreduce),使用DistCp:
hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
报错
ERROR tools.DistCp: Exception encountered
java.io.IOException: Invalid path for the Har Filesystem.
表示解压路径不是一个新路径(必须是新路径,否则会报路径无效)
discp 命令
DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。 这篇文档会为常用DistCp操作提供指南并阐述它的工作模型。
参考:http://hadoop.apache.org/docs/r1.0.4/cn/distcp.html