Hadoop HDFS Hadoop Archives工具的使用
使用场景:
大量小文件会消耗掉名称节点的 大量内存,这时候可以用这个命令合并小文件,减小名称节点内存占用量
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。