一、说明
1.做本次的实操必须是先搭建好HDFS和yarn并已经启动,测试可以使用的状态。
2.HDFS是一个海量存储的分布式存储系统,每一次存储都占128M,就算是很小的一个文件也会申请一个128M的块来存储。这样就很浪费资源。所以要将这些小的文件进行集中处理,来解决浪费哦资源的问题。
3.我们在处理这些文件的时候,虽然将他们打包放在一起,但是使用的时候还可以像之前一样解析使用。
4.遇到的问题和解决方法在本篇文章结尾处说明
二、步骤演示
1.因为本次是做实验,所以我就随意创建几个小文件进行。
2.首先在HDFS上建一个目录用来存储小文件。
hadoop fs -mkdir -p /archive/input
3.在本地新建一个存小文件的目录datas。我将小文件建在了hadoop2.7.2下的datas目录
mkdir datas
4.准备小文件,并在小文件里写点数据。
5.将小文件上传到HDFS的/archive/input目录(我现在就在datas目录下。所以用的 ./* ),上传完看那一下HDFS是否有文件了。
hadoop fs -put ./* /archive/input
也可以手动命令查看
hadoop fs -ls /archive/input
6.使用hadoop命令查看归档的命令及参数格式
Name 是打包好的文件名
是想要将那个目录下的文件进行归档。
7.归档
/archive/input 是将HDFS上的那个目录下的文件归档。
/archive/ouput 归档到那个目录下
hadoop archive -archiveName input.har -p /archive/input /archive/ouput
8.查看
hadoop fs -ls har:///archive/ouput/input.har
9.使用被归档的文件
(1)先建一个copy文件夹,将文件复制到copy来查看效果。
hadoop fs -mkdir -p /archive/copy
(2)复制文件到copy目录下
hadoop fs -cp har:///archive/ouput/input.har/* /archive/copy
(3)查看copy目录
三、可能出现的问题
1.No such file or directory
这个问题是没有知道对应的路径。检查路径。
2.走到map 0% reduce 0%之后卡住不动,这种情况基本就是报错了,程序已经死掉了,这里希望虚拟机的内存给大一点,否则resourcemanager无法分配内存执行job任务
3.Invalid Output: /archive/ouput/input.har
说明这个文件已经存在,如果上次没有成功,次执行需要删除掉。
4.如有其它问题私信博主。
写作不易,如果对您有所帮助,请给一个小小的赞,您的点赞是对我莫大的支持和鼓励,谢谢!!!