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

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

最佳答案

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

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

https://stackoverflow.com/questions/55208250/

相关文章:

java - java.io.IOException:方案:maprfs没有文件系统。将maprfs

docker - 在Boot2Docker中使用MySQL时JDBC连接缓慢

docker - 如何将Docker的容器与管道连接

php - PHP shell_exec无法执行Hadoop命令

docker - Docker容器访问群集IP

json - 如何使用Python解析Spark 1.6中格式错误的JSON字符串,其中包含空格,多

docker - Docker中的开发环境

hadoop - 从Teradata查询到pyspark

hadoop - NameNode 的用户名必须与 DataNode 的用户名相同吗?

hadoop - 使用sqoop排除表