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

  • 相关阅读:
    用 Python 带你看各国 GDP 变迁
    Fluent Interface(流式接口)
    probing privatePath如何作用于ASP.NET MVC View
    Word插入htm文件导致文本域动态增加的一个问题
    Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
    Ubuntu下Chrome运行Silverlight程序
    Windows Phone Bing lock screen doesn't change解决方法
    SPClaimsUtility.AuthenticateFormsUser的证书验证问题
    Web Service Client使用Microsoft WSE 2.0
    Visual Studio 2013安装Update 3启动crash的解决方法
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/9398771.html
Copyright © 2011-2022 走看看