Hadoop存档

每个文件均按块方式存储,每个块的元数据存储在namenode的内存中,因此Hadoop存储小文件会非常低效。因为大量的小文件会耗尽namenode中的大部分内存。存储小文件所需的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比不会增多。例如,一个1MB的文件以大小为128MB的块存储,使用的是1MB的磁盘空间,而不是128MB。
Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少namenode内存使用的同事,允许对文件进行透明地访问。Hadoop存档文件可以用作MapReduce的输入。

使用Hadoop的存档工具

Hadoop存档是通过archive工具根据一组文件创建而来的。该存档工具运行一个MapReduce作业来并行处理所有的输入文件,因此你需要一个MapReduce集群来运行和使用它。

这里有一些文档,对它进行存档

[root@HDP4 ~]# hadoop fs -ls /user/hdfs/oozieTest/
Found 9 items
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/coor_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/coordinator_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_hive
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_shell
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_spark
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_spark1
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_sparkjar
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest/workflow_sqoop_increase
使用archive指令
[hdfs@HDP4 root]$ hadoop archive -archiveName oozieFile.har -p /user/hdfs/oozieTest /user/hdfs/
18/07/31 07:26:29 INFO client.RMProxy: Connecting to ResourceManager at HDP4/192.168.1.124:8032
18/07/31 07:26:30 INFO client.RMProxy: Connecting to ResourceManager at HDP4/192.168.1.124:8032
18/07/31 07:26:30 INFO client.RMProxy: Connecting to ResourceManager at HDP4/192.168.1.124:8032
18/07/31 07:26:32 INFO mapreduce.JobSubmitter: number of splits:1
18/07/31 07:26:32 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1532961232420_0001
18/07/31 07:26:34 INFO impl.YarnClientImpl: Submitted application application_1532961232420_0001
18/07/31 07:26:34 INFO mapreduce.Job: The url to track the job: http://HDP4:8088/proxy/application_1532961232420_0001/
18/07/31 07:26:34 INFO mapreduce.Job: Running job: job_1532961232420_0001
18/07/31 07:26:55 INFO mapreduce.Job: Job job_1532961232420_0001 running in uber mode : false
18/07/31 07:26:55 INFO mapreduce.Job: map 0% reduce 0%
18/07/31 07:27:13 INFO mapreduce.Job: map 100% reduce 0%
18/07/31 07:27:24 INFO mapreduce.Job: map 100% reduce 100%
18/07/31 07:27:25 INFO mapreduce.Job: Job job_1532961232420_0001 completed successfully
18/07/31 07:27:26 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=1817
FILE: Number of bytes written=301149
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=1303359
HDFS: Number of bytes written=1303723
HDFS: Number of read operations=87
HDFS: Number of large read operations=0
HDFS: Number of write operations=8
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Other local map tasks=1
Total time spent by all maps in occupied slots (ms)=14568
Total time spent by all reduces in occupied slots (ms)=9015
Total time spent by all map tasks (ms)=14568
Total time spent by all reduce tasks (ms)=9015
Total vcore-milliseconds taken by all map tasks=14568
Total vcore-milliseconds taken by all reduce tasks=9015
Total megabyte-milliseconds taken by all map tasks=14917632
Total megabyte-milliseconds taken by all reduce tasks=9231360
Map-Reduce Framework
Map input records=45
Map output records=45
Map output bytes=4335
Map output materialized bytes=1813
Input split bytes=97
Combine input records=0
Combine output records=0
Reduce input groups=45
Reduce shuffle bytes=1813
Reduce input records=45
Reduce output records=0
Spilled Records=90
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=203
CPU time spent (ms)=3650
Physical memory (bytes) snapshot=525934592
Virtual memory (bytes) snapshot=5463994368
Total committed heap usage (bytes)=422711296
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=3717
File Output Format Counters
Bytes Written=0

hadoop archive -archiveName oozieFile.har -p /user/hdfs/oozieTest /user/hdfs/
第一个选项名称是存档文件的名称,即oozieFile.har。HAR文件总是一个以.har为扩展名的文件,这是必须的。接下来的参数是需要存档的文件,即HDFS下的/user/hdfs/oozieTest,该工具可以接受多棵源文件树。最后一个参数是HAR文件的输出目录。

[hdfs@HDP4 root]$ hadoop fs -ls /user/hdfs/
Found 3 items
drwx------ - hdfs hdfs 0 2018-07-31 07:27 /user/hdfs/.staging
drwxr-xr-x - hdfs hdfs 0 2018-07-31 07:27 /user/hdfs/oozieFile.har
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 /user/hdfs/oozieTest [hdfs@HDP4 root]$ hadoop fs -ls /user/hdfs/oozieFile.har
Found 4 items
-rw-r--r-- 3 hdfs hdfs 0 2018-07-31 07:27 /user/hdfs/oozieFile.har/_SUCCESS
-rw-r--r-- 3 hdfs hdfs 4154 2018-07-31 07:27 /user/hdfs/oozieFile.har/_index
-rw-r--r-- 3 hdfs hdfs 24 2018-07-31 07:27 /user/hdfs/oozieFile.har/_masterindex
-rw-r--r-- 3 hdfs hdfs 1299545 2018-07-31 07:27 /user/hdfs/oozieFile.har/part-0

这个目录列表显示了HAR文件的组成部分:两个索引文件以及部分文件的集合。这些部分文件中包含已经连接在一起的大量原始文件的内容,并且我们通过索引可以找到包含在存档文件中的部分文件,它的起始点和长度。但所有这些细节对于使用har URI方案与HAR文件交互的应用都是隐式的,并且HAR文件系统是建立在基础文件系统上的。

[hdfs@HDP4 root]$ hadoop fs -ls har:///user/hdfs/oozieFile.har
Found 9 items
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/coor_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/coordinator_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_hive
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_shell
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_spark
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_spark1
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_sparkjar
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_sqoop
drwxr-xr-x - hdfs hdfs 0 2018-07-30 07:39 har:///user/hdfs/oozieFile.har/workflow_sqoop_increase

如果想在其他文件系统中引用HAR文件,则需要使用一个不同于正常情况的URI路径格式。以下两个指令作用相同,如下

hadoop fs -ls har:///user/hdfs/oozieFile.har
hadoop fs -ls har://hdfs-HDP1:8020/user/hdfs/oozieFile.har/coor_sqoop

注意第二个命令,仍以har方案标识一个HAR文件系统,但是由hdfs指定基础文件系统方案的权限,后面加上一个横杠和HDFS主机及端口。

如果想删除HAR文件,需要使用递归格式进行删除,因为对于基础文件系统来说,HAR文件是一个目录

[hdfs@HDP4 root]$ hadoop fs -rmr /user/hdfs/oozieFile.har
rmr: DEPRECATED: Please use 'rm -r' instead.
18/07/31 07:42:37 INFO fs.TrashPolicyDefault: Moved: 'hdfs://HDP1:8020/user/hdfs/oozieFile.har' to trash at: hdfs://HDP1:8020/user/hdfs/.Trash/Current/user/hdfs/oozieFile.har

不足

对于HAR文件,还有一些不足。新建一个存档文件会创建原始文件的一个副本,因此至少需要与要存档(尽管创建了存档文件后可以删除原始文件)的文件容量相同大小的磁盘空间。虽然存档文件中源文件能被压缩(HAR文件更接近于tar文件),但目前还不支持存档文件的蕊。
一旦创建,存档文件便不能再修改。要想从中增加或删除文件,必须重新创建存档文件。事实上,一般不会再对存档后的文件进行修改,因为它们是定期成批存档的,比如每日或每周。

HDFS存档的更多相关文章

  1. DataNode 详解及HDFS 2.X新特性

    1. 工作机制 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. DataNode 启动后向 Name ...

  2. 大数据之hadoop小文件存档

    hadoop小文件存档1.HDFS存档小文件弊端 每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效.因为大量的小文件会耗尽NameNode中的大部分内 ...

  3. 关于Hadoop调优

    Hadoop生产调优 一.HDFS-核心参数 1.NameNode 内存生产配置 1) NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块 ...

  4. haodoop新特性

    Hadoop2.x新特性 scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push sc ...

  5. Hadoop权威指南:HDFS-Hadoop存档

    Hadoop权威指南:HDFS-Hadoop存档 [TOC] 每个文件按块方式存储, 每个块的元数据存储在namenode的内存中 Hadoop存档文件或HAR文件是一个更高效的文件存档工具,它将文件 ...

  6. HDFS简述

    管理网络中跨多台计算机存储的文件系统称为分布式文件系统,Hadoop自带HDFS(Hadoop Distributed Filesystem)分布式文件系统. 一.HDFS设计 HDFS以流式数据访问 ...

  7. hdfs知识点《转》

    HDFS知识点总结   学习完Hadoop权威指南有一段时间了,现在再回顾和总结一下HDFS的知识点. 1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Dist ...

  8. HDFS集群优化篇

    HDFS集群优化篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统级别优化 1>.优化文件系统(推荐使用EXT4和XFS文件系统,相比较而言,更推荐后者,因为XF ...

  9. Hadoop记录-hdfs转载

    Hadoop 存档 每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效.因为大量的小文件会耗尽namenode中的大部分内存.但注意,存储小文件所需 ...

随机推荐

  1. Android之使用Android-query框架进行开发

    开发Android使用Android-query框架能够快速的,比传统开发android所要编写的代码要少得很多,容易阅读等优势. 下载文档及其例子和包的地址:http://code.google.c ...

  2. Android无线测试之—UiAutomator UiSelector API介绍之六

    对象搜索—类名与包名 一.类名属性定位对象 返回值 API 描述 UiSelector calssName(String className) 完整类名匹配 UiSelector calssNameM ...

  3. jmeter返回结果是乱码及Unicode转中文

    1.结果树中有乱码的处理方式 到bin目录下面修改jmeter的配置文件 使用jmeter进行压测时,如果响应数据的返回结果有乱码,则修改jmeter.properties文件中的该字段的值改为utf ...

  4. mysql小知识点汇总

    附录:(更新于2013-11-21) sql必知必会学习笔记:http://www.cnblogs.com/IPrograming/category/509859.html mysql 基本命令学习: ...

  5. Farm Tour(最小费用最大流模板)

    Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18150   Accepted: 7023 Descri ...

  6. RabbitMQ中Queue详细介绍

    新建队列 新建Queue时有很多参数,都代表什么含义,在这里解释一下: 前述:Rabbit版本为3.7.6 ErLang 版本为 21.0.1 Name 必填项,队列的名字,建议格式可以为多个字段,表 ...

  7. JS和C# 里的闭包及闭包在事件中的使用

    在Javascript世界里,无所不用闭包及自定义事件, 自定义事件其实也是事先定义好一种规则 ,当触发者被响应后执行的一段回调.下面看个例子 function dothing(callBack){ ...

  8. Pythonpika PhpAmqpLib rabbitmq服务中queues被清空的异常处理 无模式数据库对数据结构的定义和控制

    /** * Declares queue, creates if needed * * @param string $queue * @param bool $passive * @param boo ...

  9. Bootstrap支持的JavaScript插件

    1.导入JavaScript插件 Bootstrap除了包含丰富的Web组件之外,如前面介绍的下拉菜单.按钮组.导航.分页等.他还包括一些JavaScript的插件. Bootstrap的JavaSc ...

  10. linux下安装mysql问题总结(一)mysqld_safe mysqld from pid file /usr/local/mysql/data/mysql.pid ended

    linux下安装mysql数据库 linux版本:CentOS release 6.8 (Final) mysql版本:mysql-5.7.16-linux-glibc2.5-x86_64.tar.g ...