今天一同事问重启了hadoop集群后要不要format,我当时想也没想就说,不可以,不然数据都丢失了。后来仔细一想,不对,namenode format貌似不会影响datanode上面的数据,那么namenode format的作用是什么呢,通过代码来看一看吧。
namenode format的类为 org.apache.hadoop.hdfs.server.namenode.NameNode,看看format部分的源码:
private static boolean format(Configuration conf, boolean isConfirmationNeeded, boolean isInteractive) throws IOException { //这里获取配置文件中dfs.name.dir属性中配置的文件,主要为fsimage Collection<File> dirsToFormat = FSNamesystem.getNamespaceDirs(conf); //这里获取配置文件中dfs.name.edits.dir属性中配置的文件,主要为edits文件 Collection<File> editDirsToFormat = FSNamesystem.getNamespaceEditsDirs(conf); 。。。 。。。 FSNamesystem nsys = new FSNamesystem(new FSImage(dirsToFormat, editDirsToFormat), conf); //这里执行format nsys.dir.fsImage.format(); return false; }
后面调用了FsImage的format:
public void format() throws IOException { //新的layoutVersion this.layoutVersion = FSConstants.LAYOUT_VERSION; //新的namespaceid this.namespaceID = newNamespaceID(); this.cTime = 0L; this.checkpointTime = FSNamesystem.now(); for (Iterator<StorageDirectory> it = dirIterator(); it.hasNext();) { StorageDirectory sd = it.next(); //这里正在执行format,删除文件夹,重建文件夹,设置新文件内容 format(sd); } }
再来看看format(StorageDirectory )方法做了什么:
void format(StorageDirectory sd) throws IOException { //删除current文件夹及其下的所有文件,接着在创建一个新的current文件夹 sd.clearDirectory(); // create currrent dir sd.lock(); try { //将image,edits,namespaceid,layoutVersion等下入current文件夹下 saveCurrent(sd); } finally { sd.unlock(); } LOG.info("Storage directory " + sd.getRoot() + " has been successfully formatted."); }
这里看到format只是对namenode的fsimage,edits等进行删除和重建,并不对datanode有的任何操作,因此不用担心会丢失数据。重新启动集群,datanode向namenode发送了block的信息,namenode就会又得到整个集群的元数据了,并保存在内存中。
下次研究下整个集群的启动过程。。
相关推荐
这个错误可能是由于Hadoop无法连接到NameNode导致的。解决办法是,检查Hadoop的配置文件,确保NameNode的设置正确。 Hadoop常见的异常有多种,解决方法也各不相同。但是,通过检查Hadoop的配置文件,释放更多的磁盘...
6.hadoop namenode format 7./hadoop/etc/slaves这个文件里必须把所有的slaves的主机名写进去。 8.mast的/etc/hosts slave1的/etc/hosts slave2 的/etc/hosts (localhost: 127.0.0.1可以去掉,只写主机名对应的IP...
在启动服务之前,我们需要格式化 Namenode,使用命令 ${HADOOP_HOME}/bin/hdfs namenode -format -clusterid [clusterID]。然后,在某个 Namenode 上执行 ${HADOOP_HOME}/sbin/,启动服务。 高可用性 在这个部署...
Without "hadoop namenode -format" 目录结构: /data/hadoop 为工作目录,实际为一个链接(link) /data/hadoop-0.19.1 为实际0.19.1的安装目录 /data/hadoop-0.20.1 为实际0.20.1的安装目录 /data/hadoop-0.19.1的...
- 解决方案:当执行 `hadoop namenode -format` 时,确保 DataNode 和 NameNode 的元数据被正确格式化。若之前有残留的临时文件,需要先清除,然后重新执行格式化命令 `hadoop namenode -format`。 #### 三、成功...
hdfs namenode -format ``` 7. **启动Hadoop服务**: 在master节点上启动Hadoop的所有服务: ``` start-dfs.sh start-yarn.sh ``` 8. **检查Hadoop状态**: 通过Web界面或命令行检查Hadoop集群的状态: -...
问题描述:在hadoop系统中,如果我们对namenode进行格式化(使用bin/hadoop namenode -format命令),然后重启集群,可能会出现Incompatible namespaceIDS错误。 解决方法: 1. 删除datanode的数据文件:删除...
这一步骤包括格式化HDFS的文件系统,通常是通过执行"Hadoop namenode -format"命令来完成的。一旦文件系统被成功格式化,用户就可以启动Hadoop集群,通过使用"start-all.sh"脚本(在Linux/Unix系统中)或"Hadoop.cmd...
5. 初始化HDFS:执行hadoop namenode -format命令,初始化NameNode。 6. 启动Hadoop:依次启动DataNode、NameNode、YARN和MapReduce服务。 7. 测试运行:使用hadoop fs -ls命令检查HDFS是否正常工作,通过运行...
格式化文件系统(仅第一次执行即可,不要重复执行):hdfs/hadoop namenode -format 启动hdfs: sbin/start-dfs.sh 验证是否启动成功: jps DataNode SecondaryNameNode NameNode 浏览器访问方式: ...
- 如果 `hadoop` 命令找不到,确保你在 Hadoop 的 bin 目录外运行命令,如:`../bin/hadoop namenode -format`。 - 创建软链接(快捷方式):`ln -s 源文件 目标目录`,确保使用绝对路径。 9. **启动 Hadoop 服务...
在执行hadoop namenode -format命令时,出现未知的主机名。 问题原因: 出现这种问题的原因是Hadoop在格式化HDFS的时候,通过hostname命令获取到的主机名与/etc/hosts文件中进行映射的时候,没有找到。 解决...
在Hadoop1.0时代,Hadoop的两大核心组件HDFSNameNode和JobTracker都存在着单点问题,这其中以NameNode的单点问题尤为严重。因为NameNode保存了整个HDFS的元数据信息,一旦NameNode挂掉,整个HDFS就无法访问,同时...
完成配置后,初始化HDFS命名空间,格式化NameNode,通过`hadoop namenode -format`命令实现。接着,启动Hadoop的各个服务,包括DataNode、NameNode、ResourceManager、NodeManager等。可以使用`start-dfs.sh`和`...
在命令行中执行`hadoop namenode -format`,对HDFS进行初始化。 9. **启动Hadoop**: 运行`start-dfs.cmd`启动HDFS,然后运行`start-yarn.cmd`启动YARN。通过`jps`命令检查Hadoop进程是否正常运行。 10. **测试...
./hadoop namenode -format [options] ``` - **选项说明**: - `-nonInteractive`:非交互模式,如果文件系统已被格式化,则不提示而直接退出。 - `-force`:强制模式,即使文件系统已经被格式化也会再次格式化...
- 初始化NameNode:`hadoop namenode -format`。 - 启动DataNode:`hadoop datanode`。 - 启动NameNode:`hadoop namenode`。 - 启动ResourceManager:`yarn resourcemanager`。 - 启动NodeManager:`yarn ...
bin/hadoop namenode -format ``` 成功后,即可启动Hadoop。bin目录下有许多启动脚本,如start-dfs.sh和start-mapred.sh,根据需求启动相应的服务。 最后,了解HDFS的基本操作。例如,创建目录: ``` bin/hadoop ...
5. **格式化NameNode**: 打开命令行,进入Hadoop的bin目录,运行`hadoop namenode -format`命令,初始化NameNode。 6. **启动Hadoop服务**: 先启动DataNode,然后启动NameNode,接着启动YARN和MapReduce的服务。...
4. **格式化NameNode**:使用`hadoop namenode -format`命令对NameNode进行格式化。 5. **启动Hadoop**:依次启动DataNode、ResourceManager、NodeManager和NameNode。 6. **测试运行**:通过上传文件到HDFS并执行...