前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0508-如何使用Hadoop的Archive处理小文件

0508-如何使用Hadoop的Archive处理小文件

作者头像
Fayson
发布2019-11-28 23:36:14
2.4K0
发布2019-11-28 23:36:14
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

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目录下

代码语言:javascript
复制
[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目录下所有的目录进行归档

代码语言:javascript
复制
[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文件内容

代码语言:javascript
复制
[root@cdh05 ~]# hadoop fs -ls har:/tmp/libarchive.har

与/tmp/lib下的目录一致,HAR文件的浏览方式需要在hdfs路径前添加har:

4.将原始的/tmp/lib目录删除,观察集群的Blocks总数

代码语言:javascript
复制
[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归档的文件及获取归档文件中的内容

代码语言:javascript
复制
[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命令完成,具体操作如下:

代码语言:javascript
复制
[root@cdh05 ~]# hadoop distcp har:/tmp/libarchive.har /tmp/lib

完成解档后,可以看到/tmp/lib目录与归档文件目录一致

5

总结

1.Hadoop的Archive只能将小文件合并为一个大的HAR文件,并未对归档文件大小进行压缩处理(即原始目录多大归档后的HAR文件依然维持原有大小不变)

2.使用hadoop命令访问归档文件时需要在HDFS路径前添加har:,添加har:后访问方式与普通的访问目录与文件方式无差别

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档