V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dhairoot
V2EX  ›  Hadoop

大量 zip 压缩包,每一个都很小, 10M 以内,如何利用 MapReduce 实现快速解压呢?

  •  1
     
  •   dhairoot · 2018-11-15 09:32:11 +08:00 · 5527 次点击
    这是一个创建于 2192 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大量 zip 压缩包,每一个都很小,10M 以内,如何利用 MapReduce 实现快速解压呢?

    22 条回复    2018-11-15 16:07:09 +08:00
    ym1ng
        1
    ym1ng  
       2018-11-15 09:42:39 +08:00
    自己写 InputFormat (别问我怎么写有没有资料啥的,逃~
    dhairoot
        2
    dhairoot  
    OP
       2018-11-15 09:46:28 +08:00
    @ym1ng 自己实现了解压工作,但是现在的问题是速度异常慢
    dhairoot
        3
    dhairoot  
    OP
       2018-11-15 09:47:56 +08:00
    @ym1ng 我是参考这个博主写的代码实现解压的,http://cutler.io/2012/07/hadoop-processing-zip-files-in-mapreduce/
    Vamposine
        4
    Vamposine  
       2018-11-15 09:52:00 +08:00 via iPhone   ❤️ 1
    你这个瓶颈是磁盘 io 吧
    dawncold
        5
    dawncold  
       2018-11-15 09:54:19 +08:00
    如果你只是想解压这些 zip 文件的话,多开几个进程或者线程,和 CPU 个数差不多,一个个解压就挺快吧?当然如果有很多资源可用,确实可以搞分布式解压,就行 mapreduce 一样?
    dhairoot
        6
    dhairoot  
    OP
       2018-11-15 09:58:13 +08:00
    @Vamposine 但是目前解压速度远远没到磁盘 io 的瓶颈
    Valyrian
        7
    Valyrian  
       2018-11-15 09:59:51 +08:00
    多开几个进程同时解
    为什么要扯到 mapreduce 上去
    Ediacaran
        8
    Ediacaran  
       2018-11-15 10:00:14 +08:00
    线程池足够了把
    dhairoot
        9
    dhairoot  
    OP
       2018-11-15 10:00:49 +08:00
    @dawncold 现在的情况是总共有 16T 文件,通过手动的把文件分开放在不同电脑上,开多线程去解压就已经非常耗时了,所以才想通过上传到 hdfs,利用 MapReduce 解压,。但是目前发现解压速度太慢了,完全不知道因为什么。
    dawncold
        10
    dawncold  
       2018-11-15 10:06:58 +08:00
    @dhairoot 这个不好说呢,分布式解压也得看你有多少资源可以被用起来,是有闲置的资源吗,还是解压速度已经够好了只是达不到心理预期?
    AnyISalIn
        11
    AnyISalIn  
       2018-11-15 10:10:36 +08:00
    MapReduce 肯定没有本地多线程解压快的
    hearfish
        12
    hearfish  
       2018-11-15 10:11:01 +08:00
    不同压缩格式的解压速度是不一样的,先看看你的压缩格式能支持多快的速度吧
    meisky6666
        13
    meisky6666  
       2018-11-15 11:30:17 +08:00
    应该用 c 语言来写
    surfire91
        14
    surfire91  
       2018-11-15 14:24:07 +08:00
    这个没必要 MapReduce 吧,你这个全是小任务,就多进程 /线程来好了,效率肯定比 MapReduce 高。
    cyhulk
        15
    cyhulk  
       2018-11-15 14:33:43 +08:00
    forkjoinpool
    est
        16
    est  
       2018-11-15 14:36:31 +08:00
    你是说 hdfs 上有大量 zip 文件,还是说你本地硬盘上有很多小 zip 文件想用 mapreduce 加速?


    如果是后者。。。
    dhairoot
        17
    dhairoot  
    OP
       2018-11-15 15:01:32 +08:00 via Android
    @est hdfs 上和本地上的文件是一样的
    dhairoot
        18
    dhairoot  
    OP
       2018-11-15 15:03:02 +08:00 via Android
    @dawncold 我现在测试在本地多线程解压,但是因为都是小文件,每秒 io 次数很多,但是读写速度只能达到 10mb/s
    mmtromsb456
        19
    mmtromsb456  
       2018-11-15 16:01:36 +08:00   ❤️ 1
    要考虑磁盘的 IOPS 吧..小文件多线程并发解压应该算个低队列深度 IO.你先确认下 IOPS 到达你的 SSD 瓶颈没有.而不是看读写速度
    20015jjw
        20
    20015jjw  
       2018-11-15 16:02:15 +08:00 via Android
    为啥要 mapreduce.~
    est
        21
    est  
       2018-11-15 16:07:09 +08:00
    @dhairoot 完全不一样。hdfs 的 io 成本很高。解压效率应该不是瓶颈。。纯粹是你小文件 open() 的瓶颈。
    atomstar
        22
    atomstar  
       2018-11-15 16:07:09 +08:00
    处理 zip 里面的数据可以用 mr,但是就解压 zip,为什么要和 mr 扯上关系呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 10:51 · PVG 18:51 · LAX 02:51 · JFK 05:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.