HAR技术之二Hadoop上怎么用 - huangyuefeng/study GitHub Wiki
虽说hive和hadoop上的har是同样的技术,用起来还是有些不同哦。 相对来说,Hadoop上使用较为简单。
- Overview
HAR是一种特殊格式的归档文件。一个HAR会映射到一个文件系统目录。 HAR里总是有一个*.har。
包含元数据(以_index和_masterindex的形式)和数据(part-*)文件。 _index文件包含归档文件的名称和部分文件中的位置。
- How to Create an Archive
Usage: hadoop archive -archiveName name -p <parent> [-r <replication factor>] <src>* <dest>
-archiveName用来指定你想创建的归档名称,parent用来指定需要归档文件的相对路径的父参数。需要注意的是归档会启动一个map/reduce。如下使用例子:
hadoop archive -archiveName zoo.har -p /foo/bar a/b/c e/f/g /outputdir
在以上例子中/foo/bar是a/b/c, e/f/g的父目录。如果你想直接对一个目录进行归档,可以直接使用如下命令:
hadoop archive -archiveName zoo.har -p /foo/bar /outputdir
- How to Look Up Files in Archives
HAR自身属于文件系统层,使用HAR开头的的URI,支持所有的fs shell命令,需要注意的是档案是不可变的,不能够被删除,重命名和创建。HAR的URI格式如下所示:
har://scheme-hostname:port/archivepath/fileinarchive
若是没有提供scheme-hostname,它会使用默认的文件系统。这种情况下URI是这种形式:
har:///archivepath/fileinarchive
既然支持fs shell,那么
hadoop dfs -ls har:///user/zoo/foo.har
har:///user/zoo/foo.har/hadoop/dir1
har:///user/zoo/foo.har/hadoop/dir2
- How to Unarchive an Archive
hdfs dfs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
- Hadoop Archives and MapReduce
在mapreduce中使用har是非常容易的,只需要指定不同的输入文件系统而不是默认的文件系统,比如hdfs或其他,如果你有一个har存储在hdfs上/user/zoo/foo.har,若是想使用这个档案作为mr的输入,只需要指定输入路径为 har:///user/zoo/foo.har。
记录笔者遇到的糟心问题,因为集群配置了namenode集群,所以用域名mm-idc来指向namenode集群。
可是,在har://scheme-hostname:port/archivepath/fileinarchive
里,把mm错误认为是scheme了。
报错,
ls: No FileSystem for scheme: mm
怎么办?很简单,显式填写scheme为hdfs即可。如
har://hdfs-mm-idc/archivepath/fileinarchive
2018年09月06日补充, 当然,也可以指定HAR的大小(使用-Dhar.block.size)。
相关编程接口,有HarFileSystem类 搜索blockSize试试。
那么Hive上的用法呢。HAR技术之三Hive上怎么用