【问题标题】:Hadoop or Spark read tar.bzip2 readHadoop 或 Spark 读取 tar.bzip2 读取
【发布时间】:2017-01-18 17:30:08
【问题描述】:

如何在 spark 中并行读取 tar.bzip2 文件。 我创建了一个 java hadoop 自定义阅读器,它可以读取 tar.bzip2 文件,但是读取文件需要花费太多时间,因为只使用一个内核,并且在一段时间后应用程序失败,因为只有一个执行程序获取所有数据。

【问题讨论】:

  • 为什么需要自定义阅读器? BZIP2 已经是一种可拆分格式,因此应该已经并行读取块
  • 我有 tar.bzip2 文件。每个 tar.bzip2 文件都包含几个 json 文件。
  • 正是...而且该文件类型是可拆分的
  • 只是添加,我将多行 json 文件放入单个文件夹,然后将该文件夹压缩为 tar.bzip2。如果我这样做 sc.textFile("/tmp/xyz.tar.bz2") 我在 RDD[String] 中得到二进制字符并且无法解析 json 记录。
  • 当然,因为 JSON 被压缩在一个存档文件中。

标签: hadoop apache-spark tar bzip2


【解决方案1】:

所以我们知道 bzipped 文件是可拆分的,因此当将 bzipped 文件读入 RDD 时,数据将分布在各个分区中。然而,底层的 tar 文件也将分布在各个分区中,并且它是不可拆分的,因此如果您尝试在分区上执行操作,您只会看到大量的二进制数据。

为了解决这个问题,我只需将 bzip 压缩的数据读入具有单个分区的 RDD。然后我将这个 RDD 写到一个目录中,所以现在你只有一个包含所有 tar 文件数据的文件。然后我将这个 tar 文件从 hdfs 拉到我的本地文件系统并解压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多