This question告诉我们,lz4压缩格式是可拆分的,适合在hdfs中使用。好的,我已经将1.5 Gb的数据压缩成300Mb的lz4文件。如果我尝试通过spark读取这个文件-它可以创建多少个工作进程数来并行读取文件?可拆分的片段是否计入取决于lz4压缩级别?
发布于 2018-03-15 15:53:54
压缩不会影响可拆分块的数量
如果输入文件是压缩的,那么从HDFS读取的字节数就会减少,这意味着读取数据的时间会减少。这种时间节约有利于作业执行的性能。
发布于 2018-10-24 20:13:03
可拆分的压缩编解码器在Hadoop处理中肯定很重要。我不同意前面的回答。当您说可拆分时,本质上是指您可以拥有一个映射器程序,该程序可以读取逻辑拆分并处理数据,而无需担心拆分的其他部分使用某种压缩算法存储在datanode集群中的其他位置。
例如,考虑你的windows zip文件。如果我有10 GB的文件,并且计划压缩每个文件的最大拆分大小为100MB,那么我可能会创建10个100MB的文件(总共压缩到1 GB)。你能写一个程序来处理文件的一部分,而不将整个文件解压回其原始状态吗?这就是hadoop上下文中可拆分和不可拆分压缩编解码器之间的区别。例如,.gz是不可拆分的,而bzip2是可能的。即使你在Hadoop中有一个.gz文件,你也必须首先在你的数据节点上解压缩整个文件,然后在单个file.This上运行程序,这是低效的,并且没有使用Hadoop并行性的能力。
许多人对在windows或linux中将压缩文件分割成多个部分与在hadoop中使用压缩编解码器分割文件感到困惑。
让我们回过头来讨论为什么使用拆分压缩很重要。Hadoop本质上依赖于映射器和缩减程序,每个映射器都可以在文件(而不是物理块)的逻辑拆分上工作。如果我存储的文件没有可分割性,那么在对该记录执行任何操作之前,映射器必须首先解压缩整个文件。
因此请注意,输入拆分与Hadoop中的并行处理直接相关。
https://stackoverflow.com/questions/49291963
复制相似问题