• HDFS存档


    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文件),但目前还不支持存档文件的蕊。
    一旦创建,存档文件便不能再修改。要想从中增加或删除文件,必须重新创建存档文件。事实上,一般不会再对存档后的文件进行修改,因为它们是定期成批存档的,比如每日或每周。

  • 相关阅读:
    Android 最简单的基于FFmpeg的移动端例子:Android HelloWorld
    实现简易的android 直播技术
    Android Service和Thread的关系
    Android Fragment 你应该知道的一切
    SQLyog普通版与SQLyog企业版对比分析
    Sqoop异常解决ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter问题
    SQLyog软件里无法插入中文(即由默认的latin1改成UTF8编码格式)
    Sqoop-1.4.6工具import和export使用详解(官网)
    Sqoop Export原理和详细流程讲解
    Sqoop Import原理和详细流程讲解
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/9398771.html
Copyright © 2020-2023  润新知