温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
提示:代码块部分可以左右滑动查看噢
1
文档编写目的
Fayson在前面的文章《如何在Hadoop中处理小文件》、《如何在Hadoop中处理小文件-续》和《如何使用Impala合并小文件》等,在文章中也详细说明了怎么去处理Hadoop中的小文件。文章中也提到小文件过多会对NameNode造成压力,导致NameNode内存使用过高。本篇文章Fayson主要使用Hadoop Archive Files功能将集群中的小文件进行归档。
- 测试环境:
1.操作系统:Redhat7.4
2.CM和CDH版本为5.15.0
2
环境准备
在本地测试环境中准备大量的小文件,这里Fayson直接将/opt/cloudera/parcels/CDH/lib目录直接put到HDFS上(因为lib下有大量的jar包)。
1.在put小文件到HDFS前,集群中的Block数量为30418
2.将/opt/cloudera/parcels/CDH/lib目录put到HDFS的/tmp目录下
[root@cdh05 CDH]# hadoop fs -put /opt/cloudera/parcels/CDH/lib /tmp
[root@cdh05 CDH]# hadoop fs -ls /tmp/lib
3.此时查看集群的Block数量增长到60446
通过上述环境准备Fayson将集群的blocks数量增加了30028将近一倍。
3
Hadoop Archive使用
使用Hadoop自带的Archive对集群中的小文件进行归档处理,将小文件打包到更大的HAR文件中,如下为归档操作步骤:
1.在命令行执行如下命令将/tmp/lib目录下所有的目录进行归档
[root@cdh05 ~]# hadoop archive -archiveName libarchive.har -p /tmp/lib -r 3 * /tmp
参数说明:
-archiveName:指定归档文件名称
-p:指定要进行归档目录或文件的父目录
-r:指定归档文件的副本数
*:可以使用通配的方式归档一类文件或目录(如:test*表示以test开头的文件或目录)
/tmp:指定归档libarchive.har文件的输出目录
2.查看libarchive.har文件大小以及原始目录的文件大小
可以看到归档文件libarchive.har与原始/tmp/lib的大小一致,只是对小文件进行归档合并为一个大的har文件,并未对文件进行压缩处理。查看此时HDFS Blocks总数为60469,相较于之前增加了23个Block。
3.执行如下命令浏览libarchive.har文件内容
[root@cdh05 ~]# hadoop fs -ls har:/tmp/libarchive.har
与/tmp/lib下的目录一致,HAR文件的浏览方式需要在hdfs路径前添加har:
4.将原始的/tmp/lib目录删除,观察集群的Blocks总数
[root@cdh05 ~]# hadoop fs -rmr -skipTrash /tmp/lib
[root@cdh05 ~]# hadoop fs -ls /tmp
查看此时HDFS Blocks总数为30397,相较于之前减少了30072个Block。
可以看到通过使用Hadoop Archive Files方式可以将集群中的小文件打包成一个大的HAR文件以减少集群中小文件,来达到降低集群的Blocks数量减轻NameNode压力。
5.访问libarchive.har归档的文件及获取归档文件中的内容
[root@cdh05 ~]# hadoop fs -ls har:///tmp/libarchive.har/avro
[root@cdh05 ~]# hadoop fs -get har:///tmp/libarchive.har/avro/avro-1.7.6-cdh5.15.0.jar
通过在hdfs路径前加上har:的方式访问归档中的目录及文件。如果不加上har:则会显示如下内容
4
Hadoop Archive解档
既然归档了就需要有解档的操作,可以使用hadoop distcp命令完成,具体操作如下:
[root@cdh05 ~]# hadoop distcp har:/tmp/libarchive.har /tmp/lib
完成解档后,可以看到/tmp/lib目录与归档文件目录一致
5
总结
1.Hadoop的Archive只能将小文件合并为一个大的HAR文件,并未对归档文件大小进行压缩处理(即原始目录多大归档后的HAR文件依然维持原有大小不变)
2.使用hadoop命令访问归档文件时需要在HDFS路径前添加har:,添加har:后访问方式与普通的访问目录与文件方式无差别
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操