This question表示lz4压缩格式是可拆分的,适合在hdfs中使用。好吧,我已将1.5 Gb数据压缩为300 Mb lz4文件。如果我尝试通过spark读取此文件 - 它可以创建并行读取文件的最大工作数量是多少?可拆分件数是否取决于lz4压缩级别?
答案 0 :(得分:0)
压缩不会影响可拆分件的数量
如果输入文件被压缩,则从HDFS读入的字节减少,这意味着读取数据的时间减少。这段时间的保护有利于执行作业。
答案 1 :(得分:-1)
可拆分的压缩编解码器绝对很重要,并且在Hadoop处理中很重要。我不同意先前的答案。当您说可拆分时,它实际上意味着您可以拥有一个映射程序,该程序可以读取逻辑拆分并处理数据,而无需担心使用某种压缩算法将拆分的其他部分存储在datanode群集中的其他位置。
例如,考虑一下您的Windows zip文件。如果我有10 GB的文件,并计划将最大拆分大小压缩为100MB,则我可能会创建10个100MB的文件(总压缩为1 GB)。您可以编写一个程序来处理文件的一部分而无需将整个文件解压缩到其原始状态吗?这是hadoop上下文中可拆分和不可拆分压缩编解码器之间的区别。例如,.gz是不可拆分的,而bzip2是可能的。即使在Hadoop中有一个.gz文件,您也必须首先在整个数据节点上解压缩整个文件,然后针对单个文件运行程序。这效率不高,并且不使用Hadoop并行功能。
很多人在将压缩文件拆分为Windows或linux的多个部分与使用压缩编解码器在hadoop中拆分文件之间感到困惑。
让我们回到讨论为何使用分离问题进行压缩的问题。 Hadoop本质上依赖于映射器和缩减器,并且每个映射器都可以在文件的逻辑拆分上工作(而不是物理块)。如果我存储的文件没有可拆分性,那么映射器将必须首先解压缩整个文件,然后对该记录执行任何操作。
因此请注意,输入拆分与Hadoop中的并行处理直接相关。