运维开发网

Hadoop – 不同大小的不可分割文件的适当块大小(200-500mb)

运维开发网 https://www.qedev.com 2020-05-09 16:39 出处:网络
如果我需要对数千个尺寸在200和500mb之间的gzip文件进行顺序扫描(不可拆分),这些文件的适当块大小是多少? 为了解决这个问题,我们来说,完成的处理速度非常快,因此重新启动映射器并不是昂贵的,即使是大块大小. 我的理解是: >块大小几乎没有上限,因为针对我的集群大小的适当数量的映射器有“大量文件”. >为了确保数据位置,我希望每个gzip文件在1个块中. 但是,gzip文件的大小不一样.如果
如果我需要对数千个尺寸在200和500mb之间的gzip文件进行顺序扫描(不可拆分),这些文件的适当块大小是多少?

为了解决这个问题,我们来说,完成的处理速度非常快,因此重新启动映射器并不是昂贵的,即使是大块大小.

我的理解是:

>块大小几乎没有上限,因为针对我的集群大小的适当数量的映射器有“大量文件”.

>为了确保数据位置,我希望每个gzip文件在1个块中.

但是,gzip文件的大小不一样.如果我选择大约500mb的块大小(例如所有输入文件的最大文件大小),如何存储数据?选择“非常大”的块大小(如2GB)会更好吗?在这两种情况下,硬盘容量是否过多浪费?

我想我真的在问这个文件是如何实际存储和分割的hdfs块 – 以及试图了解非分割文件的最佳实践.

更新:一个具体的例子

说我正在三个200 MB的文件上运行一个MR作业,如下图所示.

如果HDFS按照情况A存储文件,则保证3个映射器能够处理每个文件的“本地”文件.然而,如果文件按照情况B存储,则一个映射器将需要从另一个数据节点获取文件2的一部分.

鉴于有大量的空闲块,HDFS是否按文件A或案例B所示存储文件?

如果您有非可分割文件,那么最好使用较大的块大小 – 与文件本身一样大(或更大,它没有区别).

如果块大小小于整体文件大小,那么您遇到所有块都不在同一数据节点上并且丢失数据局部性的可能性.这对于可分割文件不是问题,因为将为每个块创建地图任务.

对于块大小的上限,我知道对于某些较旧版本的Hadoop,限制为2GB(高于该块的内容是无法获得的) – 请参阅https://issues.apache.org/jira/browse/HDFS-96

存储具有较大块大小的较小文件没有任何缺点 – 要强调此点考虑1MB和2 GB文件,每个文件的块大小为2 GB:

> 1 MB – 1块,名称节点中的单个条目,物理上存储在每个数据节点副本上的1 MB

> 2 GB – 1块,单个条目在Name节点中,2 GB物理存储在每个数据节点副本上

所以其他所需的物理存储,Name节点块表没有缺点(两个文件在块表中都有一个条目).

唯一可能的缺点是复制较小或较大的块所需的时间,但是如果数据节点从集群中丢失,则另一方面,则要复制的2000 x 1 MB块要比单个块2 GB块慢.

更新 – 一个有效的例子

看到这是造成一些混乱,还有一些工作的例子:

假设我们有一个具有300 MB HDFS块大小的系统,并且使事情更简单,我们只有一个数据节点只有一个psuedo集群.

如果要存储一个1100 MB的文件,那么HDFS会将该文件分解成最多300 MB的块,并将数据节点存储在特殊块索引文件中.如果要转到数据节点并查看在物理磁盘上存储索引的块文件的位置,您可能会看到如下:

/local/path/to/datanode/storage/0/blk_000000000000001  300 MB
/local/path/to/datanode/storage/0/blk_000000000000002  300 MB
/local/path/to/datanode/storage/0/blk_000000000000003  300 MB
/local/path/to/datanode/storage/0/blk_000000000000004  200 MB

请注意,该文件不能完全可分割为300 MB,因此该文件的最后一个块按块大小定为文件的模数.

现在,如果我们用小于块大小的文件重复相同的练习,比如说1 MB,然后查看它将如何存储在数据节点上:

/local/path/to/datanode/storage/0/blk_000000000000005  1 MB

再次注意,存储在数据节点上的实际文件是1 MB,而不是一个200 MB的文件,其中包含299 MB的零填充(我认为是混乱来自哪里).

现在,块大小确实在效率方面起了一定的作用.对于上述两个示例,名称节点需要维护文件名的映射,阻止名称和数据节点位置(以及总文件大小和块大小):

filename     index     datanode
-------------------------------------------
fileA.txt    blk_01    datanode1
fileA.txt    blk_02    datanode1
fileA.txt    blk_03    datanode1
fileA.txt    blk_04    datanode1
-------------------------------------------
fileB.txt    blk_05    datanode1

您可以看到,如果要对fileA.txt使用1 MB的块大小,则在上述映射中需要1100个条目,而不是4(这将在名称节点中需要更多内存).同时拉回所有的块将更昂贵,因为您将对datanode1而不是4进行1100 RPC调用.

0

精彩评论

暂无评论...
验证码 换一张
取 消