shell命令使用Hadoop归档文件

简介:

 每个文件HDFS采用块方式进行存储,在系统运行时,文件块的元数据信息会被存储在NameNode的内存中,因此,对HDFS来说,大规模存储小文件显然是低效的,很多小文件会耗尽NameNode的大部分内存。

  Hadoop归档文件和HAR文件可以将文件高效地放入HDFS块中的文件存档设备,在减少NameNode内存使用的同时,仍然允许对文件进行透明访问。具体来说,Hadoop归档文件可以作为MapReduce的输入。这里需要注意的是,小文件并不会占用太多的磁盘空间,比如设定一个128MB的文件块来存储1MB的文件,实际上存储这个文件只需要1MB磁盘空间,而不是128MB。

  Hadoop归档文件是通过archive命令工具根据文件集合创建的。因为这个工具需要运行一个MapReduce来并行处理输入文件,所以需要一个运行MapReduce的集群。而HDFS中有些文件是需要进行归档的,例如:

  hadoop fs  -lsr  /user/ubuntu/In/

  -rw-r--r-- 3 ubuntu\ubuntu supergroup 13 2012-03-18 20:15 /user/ubuntu/In/hello.c.txt

  -rw-r--r-- 3 ubuntu\ubuntu supergroup 13 2012-03-17 15:13 /user/ubuntu/In/hello.txt

 

 

 

  运行archive命令如下:

  hadoop archive -archiveName files.har /user/ubuntu/In/  /user/ubuntu/

  在命令行中,第一个参数是归档文件的名称,这里是file.jar文件;

        第二个参数是要归档的文件源,这里我们只归档一个源文件夹,即HDFS下/user/ubuntu/In/中的文件,但事实上,archive命令可以接收多个文件源;

        最后一个参数,即本例中的/user/ubuntu/是HAR文件的输出目录。可以看到这个命令的执行流程为一个MapReduce任务。

 

 

  下面我们来看这个归档文件是怎么创建的:

复制代码
  hadoop fs  -ls /user/ubuntu/In/   /user/ubuntu/

  Found 2 items

  -rw-r--r-- 3  ubuntu\ubuntu supergroup 13 2012-03-18 20:15 /user/ubuntu/In/hello.c.txt

  -rw-r--r-- 1  ubuntu\ubuntu supergroup 13 2012-03-17 15:13 /user/ubuntu/In/hello.txt

  Found 3 items

  drwxr-xr-x  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:15 /user/ubuntu/In

  drwxr-xr-x  -  ubuntu\ubuntu supergroup 0 2012-03-18 18:53 /user/ubuntu/ubuntu

  drwxr-xr-x  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har
复制代码

  这个目录列表展示了一个HAR文件的组成:两个索引文件和部分文件(part file)的集合。这里的部分文件包含已经连接在一起的大量源文件的内容,同时索引文件可以检索部分文件中的归档文件,包括它的长度、起始位置等。但是,这些细节在使用HAR URI模式访问HAR文件时大多数都是隐藏的。

 

 

 

HAR文件系统是建立在底层文件系统之上的(此处是HDFS),以下命令是以递归的方式列出了归档文件的文件:

复制代码
  hadoop fs -lsr  har://user/ubuntu/files.har

  drw-r--r--  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har/user

  drw-r--r--  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har/user/ubuntu

  drw-r--r--  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har/user/ubuntu/In

  -rw-r--r--  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har/user/ubuntu/In/hello.c.txt

  -rw-r--r--  -  ubuntu\ubuntu supergroup 0 2012-03-18 20:47 /user/ubuntu/files.har/user/ubuntu/In/hello.txt
复制代码

  如果HAR文件所在的文件系统是默认的文件系统,那么这里的内容就非常直观和易懂,但是,如果你想要在其他文件系统中使用HAR文件,就需要使用不同格式的URI路径。下面两个命令具有相同的作用:

  hadoop fs -lsr har:/// user/ubuntufiles.har/my/files/dir

  hadoop fs -lsr har://hdfs-localhost:8020/  user/ubuntu/files.har/my/files/dir

  第二个命令,它仍然使用HAR模式描述一个HAR文件系统,但是使用HDFS作为底层的文件系统模式,HAR模式之后紧跟一个HDFS系统的主机和端口号。HAR文件系统会将HAR URI转换为地产底层的文件系统fangwenURI。在本例中即为hdfs://localhost:8020/user/ubuntu/archive/files.har,文件的剩余部分路径即为文件归档部分的路径/my/files/dir。

   想要删除HAR文件,需要使用删除的归档格式,这是因为底层的文件系统HAR文件是一个目录,删除命令为hadoop fs -rmr /userubuntu/files.har。

  对于HAR文件我们还需要了解它的一些不足之处。当创建一个归档文件时,还会创建原始文件的一个副本,这样就需要额外的磁盘空间(尽管归档完成后悔删除原始文件)。而且当前没有针对闺房文件的压缩办法,只能对写入归档文件的原始文件进行压缩。归档文件一旦创建就不能改变,要增加或者删除文件,就需要重新创建。事实上,这对于那些写后不能更改的文件不构成问题,因为可以按日或者按周进行定期成批归档。

  如前所述,HAR文件可以作为MapRedeuce的一个输入文件,然而,没有一个基于归档的InputFormat可以将多个文件打包到一个单一的MapReduce中去。所以,即使是HAR文件,处理小的文件时效率仍然不高。

 


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5141259.html,如需转载请自行联系原作者

相关文章
|
30天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
3天前
|
安全 Shell Linux
探索Linux命令chsh:更改用户的默认shell
`chsh`是Linux命令,用于更改用户的默认登录shell。它涉及用户环境配置和系统安全,允许用户选择更适合自己的shell以提升效率。命令有交互式选项和参数如`-s`来指定新shell。在使用时要注意新shell的可执行性、权限问题及选择合适的shell。例如,要更改为bash,用户可运行`chsh`后按提示操作,而root用户能用`sudo chsh -s /bin/zsh john`为用户`john`设定zsh。在更改前,确认shell路径、权限,并了解不同shell的特点。
|
15天前
|
存储 分布式计算 NoSQL
|
15天前
|
数据采集 SQL 分布式计算
|
4天前
|
Shell
Shell [[]] 命令:条件判断的升级版
`[[ ]]` 是 Bash 中增强型的条件判断命令,提供比 `[ ]` 更多的灵活性,如无需引号包裹变量、直接字符串比较及正则支持。例如: ```markdown - 不加引号比较:`[[ -z $str1 ]]` - 逻辑运算:`[[ -z $str1 ]] || [[ -z $str2 ]]` - 正则匹配:`[[ $phone =~ ^1[0-9]{10}$ ]]` ``` 它不支持 `-a` 和 `-o`,但能用 `&&` 和 `||` 进行逻辑操作。用于复杂字符串验证和文件处理时非常有用。
13 0
|
4天前
|
Shell Windows
Shell test [] 命令:条件判断的艺术
`test` 命令在Shell脚本中用于条件检测,涉及数值、字符串和文件比较。例如,`test $a -eq $b` 检查两个数是否相等;`-e` 检查文件是否存在;`-w` 检查文件是否可写。数值比较不支持 `>=` 和 `<=`,需用 `-ge` 和 `-le`。字符串比较时注意空值,使用双引号。逻辑运算包括 `-a`(与)、`-o`(或)和 `!`(非)。文件类型和权限检测也是`test`的重要用途。
8 0
|
16天前
|
Shell Linux
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
|
16天前
|
机器学习/深度学习 Shell Linux
linux shell脚本判断文件或文件夹是否存在循环操作
linux shell脚本判断文件或文件夹是否存在循环操作
|
25天前
|
存储 分布式计算 Hadoop
Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式
该文介绍了Hadoop中两种小文件管理策略。首先,通过Hadoop Archive (HAR)将小文件归档成大文件以减少存储和管理开销。操作包括使用`hadoop archive`命令进行归档和解档。其次,文章讨论了小文件优化的Uber模式,这种模式在同一JVM中运行所有MapReduce任务以提高效率和局部性,但可能引发单点故障和资源限制问题。启用Uber模式需在`mapred-site.xml`配置文件中设置相关参数。文中还提供了使用WordCount例子验证Uber模式配置的步骤。