HAR Format Data Model
The Hadoop Archive data format has the following layout:
foo.har/_masterindex //stores hashes and offsets foo.har/_index //stores file statuses foo.har/part-[1..n] //stores actual file data
The file data is stored in multi-part files, which are indexed in order to retain the original separation of data. Moreover, the part files can be accessed in parallel by MapReduce programs. The index files also record the original directory tree structures and file status.
HAR File System
Most archival systems, such as tar, are tools for archiving and de-archiving. Generally, they do not fit into the actual file system layer and hence are not transparent to the application writer in that the user must de-archive (expand) the archive before use.
The Hadoop Archive is integrated with the Hadoop file system interface. The
HarFileSystem
implements theFileSystem
interface and provides access via thehar://
scheme. This exposes the archived files and directory tree structures transparently to users. Files in a HAR can be accessed directly without expanding it.For example, if we have the following command to copy a HDFS file to a local directory:
hdfs dfs –get hdfs://namenode/foo/file-1 localdir
Suppose a Hadoop Archive
bar.har
is created from the foo directory. With the HAR, the command to copy the original file becomes:hdfs dfs –get har://namenode/bar.har/foo/file-1 localdir
Users only need to change the URI paths. Alternatively, users may choose to create a symbolic link (from
hdfs://namenode/foo
tohar://namenode/bar.har/foo
in the example above), and then even the URIs do not need to be changed. In either case,HarFileSystem
will be invoked automatically to provide access to the files in the HAR. Because of this transparent layer, HAR is compatible with the Hadoop APIs, MapReduce, the FS shell command-line interface, and higher-level applications such as Pig, Zebra, Streaming, Pipes, and DistCp.Hadoop Archiving Tool
Hadoop Archives can be created using the Hadoop archiving tool. The archiving tool uses MapReduce to efficiently create Hadoop Archives in parallel. The tool can be invoked using the command:
hadoop archive -archiveName name -p <parent> <src>* <dest>
A list of files is generated by traversing the source directories recursively, and then the list is split into map task inputs. Each map task creates a part file (about 2 GB, configurable) from a subset of the source files and outputs the metadata. Finally, a reduce task collects metadata and generates the index files.
The Hadoop archiving tool is discussed in further detail in the next section.