V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qqq8724
V2EX  ›  问与答

新手求问,用 spark 怎么读取 hdfs 上 zip 文件和 tar.gz 文件

  •  
  •   qqq8724 · 2018-12-14 09:53:21 +08:00 · 2358 次点击
    这是一个创建于 2171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要求不解压,直接读取,而且需要按压缩包内文件目录分层分区,求大神解疑

    8 条回复    2018-12-14 20:55:00 +08:00
    luny
        1
    luny  
       2018-12-14 10:12:35 +08:00
    不懂 spark 和 hdfs,但是觉得这个需求和 2 者没有关系,应该是自行实现的。
    比如找到 tar.gz 文件,用 tar tf 可以遍历内容。
    douglas1997
        3
    douglas1997  
       2018-12-14 10:43:46 +08:00 via iPhone
    用类似 mxnet 的 rec 吧
    qqq8724
        4
    qqq8724  
    OP
       2018-12-14 11:16:48 +08:00
    @capric @douglas1997 @luny 感谢你们的回答 这个需求是确实要用到 spark 和 hdfs 的 目前看来#2 的回答很接近,正在分析 :)
    fxxkgw
        5
    fxxkgw  
       2018-12-14 11:46:04 +08:00
    我碰到一个问题,hdfs 挂载到本机目录,python 起多进程,读 hdfs 下一个简单的文件,有概率导致挂载的 hdfs 进程占用 CPU 100%, hdfs hang 住。
    kex0916
        6
    kex0916  
       2018-12-14 13:49:24 +08:00
    要按照压缩包文件目录分层分区要在 driver 侧就能拿到目录结构然后划分 partitions,然后每个 partition 读取该目录下的数据,但是压缩文件默认一般都是不 splitable 的,每个 partition 读取的时候也得完全解开后读取该分区的指定目录,这样各个分区都会有重复的工作。我建议是:
    driver 侧将 tar.gz 先解压到临时目录,多个压缩文件可以按文件路径下发 task 来分布式解压,得到解压后的临时目录后,自己重写 FileInputFormat 来划分 split 然后采用 newAPIhadoopRDD 或者自己实现 RDD,按照临时目录下的目录来划分分区,执行完后把临时目录删除。
    至于你说的不解压直接读,只要读还是得解压吧,可能只是在内存中完成解压而没有写到磁盘上。
    qqq8724
        7
    qqq8724  
    OP
       2018-12-14 18:05:39 +08:00
    @kex0916 哈哈,又是你,我上一次问的问题你就回答过,很感谢,你这个方法很有道理,我会试试的
    kex0916
        8
    kex0916  
       2018-12-14 20:55:00 +08:00
    @qqq8724 😀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2385 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.