HDFS 客户端位于 HDFS 集群之外。当 HDFS 客户端将文件写入 hadoop 时,HDFS 客户端将文件拆分为块,然后将块写入数据节点。
这里的问题是 HDFS 客户端如何知道 Blocksize ?块大小在 Name 节点中配置,而 HDFS 客户端不知道块大小,那么它将如何将文件拆分为块?
最佳答案
HDFS 的设计方式是,特定文件的块大小是元数据的一部分。
让我们看看这是什么意思?
客户端可以告诉 NameNode 它将以特定的块大小将数据放入 HDFS。
客户端有自己的 hdfs-site.xml 可以包含这个值,并且可以在每个请求的基础上使用 -Ddfs.blocksize 参数指定它。
如果客户端配置未定义此参数,则默认为 org.apache.hadoop.hdfs.DFSConfigKeys.DFS_BLOCK_SIZE_DEFAULT 值,即 128MB。
如果 NameNode 指定的块大小小于 dfs.namenode.fs-limits.min-block-size(默认为 1MB),则它可能会为客户端抛出错误。
这没有什么神奇之处,NameNode 对数据一无所知,让客户端决定最佳拆分,以及定义文件块的复制因子。
关于hadoop - HDFS Client 在写入时如何知道块大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40224602/