根据 Hadoop - The Definitive Guide
FileInputFormats定义的逻辑记录通常不适合HDFS块.例如,TextInputFormat的逻辑记录是行,它们将经常跨越HDFS边界.这与你的程序的功能没有关系 - 例如,线路不会丢失或损坏 - 但值得了解,因为它确实意味着数据本地地图(即,与他们在同一主机上运行的地图)输入数据)将执行一些远程读取.这导致的轻微开销通常不显着.
假设记录行分为两个块(b1和b2).处理第一个块(b1)的映射器将注意到最后一行没有EOL分隔符,并从下一个数据块中取出剩余的行(b2).
映射器如何处理第二个块(b2)如何确定第一个记录是不完整的并且应该从块(b2)中的第二个记录开始处理?
我们都知道,与传统文件系统中的块大小相比,HDFS中的块大小相当大(64M或128M).这样做是为了减少与传输时间相比的寻道时间百分比(因此,传输速率的改进比磁盘寻道时间的改进大得多,因此设计文件系统时的目标始终是减少与要转移的数据量相比的寻求次数).但是这带来了内部碎片的另一个缺点(这就是为什么传统的文件系统块大小不是那么高并且只有几KB的量级 - 通常是4K或8K).
我正在阅读这本书 - Hadoop,权威指南,并发现这写在某个地方,一个小于HDFS块大小的文件不占用整个块,并没有占到整个块的空间,但无法理解如何?有人可以对此有所了解.
HDFS如何存储数据?
我想以压缩方式存储大文件.
例如:我有1.5 GB的文件,默认复制因子为3.
它需要(1.5)*3 = 4.5 GB的空间.
我相信目前没有隐式压缩数据.
是否有一种压缩文件并将其存储在HDFS中以节省磁盘空间的技术?