hadoop - HDFS如何存储大于 block 大小的单个数据?

标签 hadoop hdfs

如果我的单个数据之一大于块大小,hadoop将如何拆分数据?
例如。我存储的数据(谈论单个记录)的大小为80 mb,块大小为64 mb,那么hadoop如何管理这种情况?

最佳答案

如果我们使用64MB的块大小,则数据将仅加载到两个块(64MB和16MB)中,因此元数据的大小会减小。

编辑:
Hadoop框架将大文件分为块(64MB或128 MB)并存储在从属节点中。 HDFS无法识别该块的内容。在将数据写入块时,记录可能会超出块限制,并且同一条记录的一部分写入一个块,而另一记录写入另一块。
因此,Hadoop跟踪数据拆分的方式是通过数据的逻辑表示(称为输入拆分)进行的。当Map Reduce客户端计算输入拆分时,它实际上检查整个记录是否位于同一块中。如果将头顶的记录及其一部分写入了另一个块,则输入拆分将捕获下一个块的位置信息以及完成记录所需的数据的字节偏移量。这通常发生在多行记录中,因为Hadoop具有足够的智能来处理单行记录场景。
通常,将输入拆分配置为与块大小相同,但是请考虑输入拆分是否大于块大小。输入拆分表示将在一个映射器中输入的数据大小。考虑下面的例子
•输入拆分= 256MB
•块大小= 128 MB
然后,映射器将处理两个可以在不同机器上的块。这意味着要处理该块,映射器将不得不在要处理的机器之间传输数据。因此,为了避免不必要的数据移动(数据局部性),我们通常将相同的Input split保持为块大小。

关于hadoop - HDFS如何存储大于 block 大小的单个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208250/

相关文章:

hadoop - 在 HDFS 中移动文件的最佳实践或工具

shell - shell代码中参数的用法是什么?

scala - Apache Spark 处理倾斜数据

hadoop - prestodb配置单元SQL查询错误

azure - Oozie在MS Azure Blob存储中共享库

python - 从 REST API 获取数据并将其存储在 HDFS/HBase 中

amazon-web-services - s3n ://处的主机名 URI 无效

Hadoop——伪分布式运行

hadoop - HDFS 中的压缩文件提取

java - 如何在 Ubuntu 中编译和执行这个 JAVA 应用程序?