1. 简述HDFS的Block ?
HDFS的Block是HDFS中数据存储的基本单元。以下是HDFS Block的一些关键特性:
-
大尺寸:HDFS的Block默认大小是128MB,这个尺寸比传统的文件系统要大得多,这有助于减少元数据的数量,提高存储效率。
-
文件分块:当一个文件被存储到HDFS时,如果文件的大小超过了Block的大小,文件会被分割成多个Block。每个Block会被独立存储和管理。
-
副本机制:为了提高数据的可靠性,HDFS会为每个Block创建多个副本(默认是3个)。这些副本被存储在不同的DataNode上,以防止单个节点故障导致数据丢失。
-
存储位置:每个Block在HDFS中的存储位置由NameNode管理。NameNode维护着文件系统的命名空间和Block的映射信息,知道每个Block存储在哪些DataNode上。
-
数据本地性:HDFS在设计时考虑了数据本地性,尽量让计算任务在存储数据的节点上执行,这样可以减少数据在网络中的传输,提高效率。
-
块的读写:当应用程序需要读取数据时,它会通过NameNode找到Block的位置,然后直接从DataNode读取数据。写入数据时,客户端首先将数据发送到一个DataNode,然后该DataNode会将数据分发到其他需要存储副本的DataNode。
-
块的恢复:如果某个DataNode故障,NameNode会检测到这一情况,并指示其他DataNode复制丢失的Block副本,以保持所需的副本数量。
-
块的合并和拆分:在某些情况下,如文件追加操作,HDFS可能会合并或拆分Block。例如,当向一个文件追加数据时,可能会创建一个新的Block,或者将数据追加到现有的Block中。
-
块的校验:DataNode会为存储的每个Block生成校验和(checksum),这有助于在读取数据时检测数据的完整性。
通过这些特性,HDFS的Block机制不仅提高了存储效率,还增强了数据的可靠性和容错能力。
2. HDFS的块默认大小,64M和128M是在哪个版本更换的?怎么修改默认块大小?
HDFS的块默认大小从64MB更换到128MB是在Hadoop的2.x版本中进行的。具体的修改默认块大小的方法如下:
- 停止正在运行的Hadoop集群。
- 打开Hadoop安装目录下的
conf
文件夹中的hdfs-site.xml
配置文件。 - 修改或添加以下配置项,设置
dfs.block.size
属性的值来改变块大小,例如,如果要设置块大小为256MB,可以添加或修改如下配置:<property> <name>dfs.block.size</name> <value>268435456</value> <!-- 256MB 对应的字节数 --> </property>