【发布时间】:2019-03-17 14:38:52
【问题描述】:
如果我的单个数据之一大于块大小,hadoop 将如何拆分数据? 例如。我存储的数据(单条记录)大小为 80 mb,块大小为 64 mb,那么 hadoop 如何管理这种情况?
【问题讨论】:
如果我的单个数据之一大于块大小,hadoop 将如何拆分数据? 例如。我存储的数据(单条记录)大小为 80 mb,块大小为 64 mb,那么 hadoop 如何管理这种情况?
【问题讨论】:
如果我们使用 64MB 的块大小,那么数据将仅加载到两个块中(64MB 和 16MB)。因此元数据的大小会减小。
编辑: Hadoop 框架将大文件分成块(64MB 或 128MB)并存储在从节点中。 HDFS 不知道块的内容。在将数据写入块时,可能会发生记录超过块限制,并且同一记录的一部分写入一个块,而另一部分写入另一个块。 因此,Hadoop 跟踪这种数据拆分的方式是通过称为输入拆分的数据的逻辑表示。当 Map Reduce 客户端计算输入拆分时,它实际上检查整个记录是否位于同一块中。如果记录在头上并且其中一部分被写入另一个块,则输入拆分会捕获下一个块的位置信息和完成记录所需的数据的字节偏移量。这通常发生在多行记录中,因为 Hadoop 足够智能以处理单行记录场景。 通常,输入拆分与块大小的大小相同,但要考虑输入拆分是否大于块大小。输入拆分表示将进入一个映射器的数据大小。考虑下面的例子 • 输入拆分 = 256MB • 块大小 = 128 MB 然后,mapper 将处理两个可以在不同机器上的块。这意味着要处理块,映射器必须在机器之间传输数据以进行处理。因此,为了避免不必要的数据移动(数据局部性),我们通常保持与块大小相同的输入拆分。
【讨论】: