Hadoop HDFS Hadoop Archives工具的使用

QAnyang 2014-12-29

使用场景:

 大量小文件会消耗掉名称节点的 大量内存,这时候可以用这个命令合并小文件,减小名称节点内存占用量 

1 列出hadoop根目录下的所有文件

 hadoop fs -ls  -R /

2 将 /user这个目录下的所有文件归档到/user/har/目录下,名字为user.har(p是parent的缩写)

hadoop archive -archiveName user.har -p /user /user/har/

 命令自动执行一个map,reduce流程,在/user/har/下生成一个har文件。

3 hadoop fs -ls /user/har/user.har  

  查看生成的har文件内部都有什么文件。

  1)part文件是所有文件拼接到一起组成的文件

  2)index文件时文件是存储文件的起始位置和偏移量和文件长度

 4 查看har文件中都有哪些文件组成的

  

hadoop fs -ls -R har:///user/har/user.har

 5 删除一个har文件 

hadoop fs -rm -R /user/har/user.har

6  Hadoop Archives的使用限制

1. 创建一个HAR需要跟源文件相同大小的空间,所以,在准备创建一个HAR之前,要保证有相同大小的磁盘空间,创建之后,可以删除原来的文件。目录Hadoop Archives只打包,不压缩。

2. HAR文件一旦创建不可修改,不能向其中增加或删除文件。在实际使用中,一般对于一旦生成就不再更改的文件做定期的archive,比如,每天把当天生成的日志文件打成一个包。

3. 之前提到HAR文件可以作为MapReduce的输入,但是多个小文件打成包输入给MapReduce,并不比单独小文件输入给MapReduce更有效率,关于解决众多小文件输入的效率问题,后面要讨论其他解决方案。

4. 如果namenode的内存不够用了,在考虑减少系统中的大量小文件之后,应该考虑HDFS Federation。 

相关推荐