LINUX下如何格式化namenode,Hadoop-2.4.1学习之NameNode -format源码分析

第二部分代码如下,主要根据配置文件获取要格式化的目录、存储edits日志的目录等,以及在未指定clusterId的情况生成新的clusterId用于标识命名空间。

/*获取参数dfs.namenode.name.dir设置的目录,该值用于存储fsimage

*默认值为file://${Hadoop.tmp.dir}/dfs/name,

*其中hadoop.tmp.dir定义在core-default.xml中,值为/tmp/hadoop-${user.name}

*/

Collection nameDirsToFormat = FSNamesystem.getNamespaceDirs(conf);

/*获取在primary和secondary namenode之间共享的edits目录

*相应的参数为dfs.namenode.shared.edits.dir

*/

List sharedDirs = FSNamesystem.getSharedEditsDirs(conf);

List dirsToPrompt = new ArrayList();

dirsToPrompt.addAll(nameDirsToFormat);

dirsToPrompt.addAll(sharedDirs);

/*获取保存edits的目录,对应的参数为dfs.namenode.edits.dir

*若上面的参数没有配置,则使用与fsimage一致的目录

*/

List editDirsToFormat = FSNamesystem.getNamespaceEditsDirs(conf);

// if clusterID is not provided - see if you can find the current one

String clusterId = StartupOption.FORMAT.getClusterId();

if(clusterId == null || clusterId.equals("")) {

//Generate a new cluster id

clusterId = NNStorage.newClusterID();

}

System.out.println("Formatting using clusterid: " + clusterId);

最后一部分代码执行了创建fsimage和edits文件的工作,由于这两个文件的创建可以做为单独的源码分析进行,在此就不进行详细地分析,会有专门的文章学习这部分代码。

FSImage fsImage = new FSImage(conf, nameDirsToFormat, editDirsToFormat);

try {

FSNamesystem fsn = new FSNamesystem(conf, fsImage);

fsImage.getEditLog().initJournalsForWrite();

if (!fsImage.confirmFormat(force, isInteractive)) {

return true; // aborted

}

fsImage.format(fsn, clusterId);

现在已经分析完了执行hdfs namenode –format命令时都执行了哪些操作,其实就是根据配置文件中的特定参数如dfs.namenode.name.dir等,将fsimage和edits文件写入这些目录,而fsimage和edits文件的创建及格式等分析见 :http://www.linuxidc.com/Linux/2014-09/107139.htm。

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值