hadoop format过程
private static boolean format(Configuration conf,
boolean isConfirmationNeeded
) throws IOException {
boolean allowFormat = conf.getBoolean("dfs.namenode.support.allowformat", // 获取format配置文件,
true);
if (!allowFormat) {
throw new IOException("The option dfs.namenode.support.allowformat is "
+ "set to false for this filesystem, so it "
+ "cannot be formatted. You will need to set "
+ "dfs.namenode.support.allowformat parameter "
+ "to true in order to format this filesystem");
} }
为了防止生产集群误操作hadoop被format,可加入一下配置,
<property>
<name>dfs.namenode.support.allowformat</name>
<value>flase</value>
<description>Does HDFS namenode allow itself to be formatted?
You should consider setting this to false for any production
cluster, to avoid any possibility of formatting a running DFS.
</description>
</property>
Collection<File> dirsToFormat = FSNamesystem.getNamespaceDirs(conf); //获取namenode元数据目录, FSNamesystem.java 395行
Collection<File> editDirsToFormat =
FSNamesystem.getNamespaceEditsDirs(conf); // 获取editlog目录, FSNamesystem.java 406行
public static Collection<File> getNamespaceDirs(Configuration conf) {
Collection<String> dirNames = conf.getStringCollection("dfs.name.dir");
if (dirNames.isEmpty())
dirNames.add("/tmp/hadoop/dfs/name"); //如果不配置目录,将使用默认目录:/tmp/hadoop/dfs/name
Collection<File> dirs = new ArrayList<File>(dirNames.size());
for(String name : dirNames) {
dirs.add(new File(name)); //新建目录的意思
}
return dirs; //最后将目录返回
}
Collection 网上看好像是接口的意思,记得以前学的时候implements是接口的意思,这个问题,有待深入,哈哈
for(Iterator<File> it = dirsToFormat.iterator(); it.hasNext();) { //这里是个for 循环,说明元数据目录可配置多个,直到所有目录
File curDir = it.next();
if (!curDir.exists())
continue;
if (isConfirmationNeeded) {
System.err.print("Re-format filesystem in " + curDir +" ? (Y or N) "); //如果已经被format过,将提示是否re-format
if (!(System.in.read() == 'Y')) {
System.err.println("Format aborted in "+ curDir);
return true;
}
while(System.in.read() != '\n'); // discard the enter-key 直接回车不输入的话,应该是不格式化,
FSNamesystem nsys = new FSNamesystem(new FSImage(dirsToFormat,
editDirsToFormat), conf); //先实例化FSNamesystem,传入namenode和editlog两个目录
nsys.dir.fsImage.format(); //执行format
return false;
}
//开始看format的过程:
FSNamesystem(FSImage fsImage, Configuration conf) throws IOException {
this.fsLock = new ReentrantReadWriteLock();
setConfigurationParameters(conf); // setConfigurationParameters FSNamesystem.java 466行
this.dir = new FSDirectory(fsImage, this, conf);
}
private void setConfigurationParameters(Configuration conf)
throws IOException {
fsNamesystemObject = this; if (conf.getBoolean("hadoop.disable.shell",false)){
conf.setStrings(UnixUserGroupInformation.UGI_PROPERTY_NAME, new String[]{"hadoop", "hadoop"});
Shell.setDisabled(true);
} try {
fsOwner = UnixUserGroupInformation.login(conf);
} catch (LoginException e) {
throw new IOException(StringUtils.stringifyException(e));
} LOG.info("fsOwner=" + fsOwner);
// 用户和目录权限
this.hasRwLock = conf.getBoolean("dfs.rwlock", false);
this.supergroup = conf.get("dfs.permissions.supergroup", "supergroup");
this.isPermissionEnabled = conf.getBoolean("dfs.permissions", true);
this.persistBlocks = conf.getBoolean("dfs.persist.blocks", false);
LOG.info("supergroup=" + supergroup);
LOG.info("isPermissionEnabled=" + isPermissionEnabled);
short filePermission = (short)conf.getInt("dfs.upgrade.permission", 0777);
this.defaultPermission = PermissionStatus.createImmutable(
fsOwner.getUserName(), supergroup, new FsPermission(filePermission)); this.maxCorruptFilesReturned = conf.getInt("dfs.corruptfilesreturned.max",
DEFAULT_MAX_CORRUPT_FILES_RETURNED);
this.defaultReplication = conf.getInt("dfs.replication", 3);
this.maxReplication = conf.getInt("dfs.replication.max", 512);
this.minReplication = conf.getInt("dfs.replication.min", 1);
if (minReplication <= 0) // 获取备份数,最大512个,最小1个,小于1 报异常
throw new IOException(
"Unexpected configuration parameters: dfs.replication.min = "
+ minReplication
+ " must be greater than 0");
if (maxReplication >= (int)Short.MAX_VALUE)
throw new IOException(
"Unexpected configuration parameters: dfs.replication.max = "
+ maxReplication + " must be less than " + (Short.MAX_VALUE));
if (maxReplication < minReplication)
throw new IOException(
"Unexpected configuration parameters: dfs.replication.min = "
+ minReplication
+ " must be less than dfs.replication.max = "
+ maxReplication);
this.maxReplicationStreams = conf.getInt("dfs.max-repl-streams", 2);
long heartbeatInterval = conf.getLong("dfs.heartbeat.interval", 3) * 1000; // 心跳时间
this.heartbeatRecheckInterval = conf.getInt(
"heartbeat.recheck.interval", 5 * 60 * 1000); // 5 minutes // 5分钟check
this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval +
10 * heartbeatInterval; // 10分钟丢弃
this.replicationRecheckInterval =
conf.getInt("dfs.replication.interval", 3) * 1000L;
this.defaultBlockSize = conf.getLong("dfs.block.size", DEFAULT_BLOCK_SIZE);
this.maxFsObjects = conf.getLong("dfs.max.objects", 0);
this.blockInvalidateLimit = Math.max(this.blockInvalidateLimit,
20*(int)(heartbeatInterval/1000));
this.accessTimePrecision = conf.getLong("dfs.access.time.precision", 0);
this.supportAppends = conf.getBoolean("dfs.support.append", false); // set soft and hard lease period
long hardLeaseLimit = conf.getLong(FSConstants.DFS_HARD_LEASE_KEY,
FSConstants.LEASE_HARDLIMIT_PERIOD);
long softLeaseLimit = conf.getLong(FSConstants.DFS_SOFT_LEASE_KEY,
FSConstants.LEASE_SOFTLIMIT_PERIOD);
this.leaseManager.setLeasePeriod(
Math.min(hardLeaseLimit, softLeaseLimit), hardLeaseLimit);
}
默认快大小是64M
<property>
<name>dfs.block.size</name>
<value>67108864</value>
<description>The default block size for new files.</description>
</property>
FSDirectory(FSImage fsImage, FSNamesystem ns, Configuration conf) {
rootDir = new INodeDirectoryWithQuota(INodeDirectory.ROOT_NAME,
ns.createFsOwnerPermissions(new FsPermission((short)0755)),
Integer.MAX_VALUE, -1);
this.fsImage = fsImage;
namesystem = ns;
initialize(conf);
}
hadoop format过程的更多相关文章
- hadoop安装过程中出现的错误
此次来记录一下我在安装Hadoop安装过程中出现的错误,安装过程参照慕课网林子雨教程进行安装,在尝试过程中出现的错误如下: 1.在安装Ubuntu时,新建虚拟电脑时,并没有在版本的输入框中有Ubunt ...
- hadoop 安装过程记录
1)首先配置好了四个linux虚拟机 root pwd:z****l*3 关闭了防火墙 开通了 sshd服务 开通了 ftp服务 配置了 jdk 1.8 配置好了互信 (之前配置的过程忘了!--检查了 ...
- hadoop format 重新格式化
前文:如果格式化完之后,使用jps命令发现进程都已经启动,但是使用web页面打不开hadoop的网页,可能原因就是防火墙没关或者是哪个配置过程配错了. 1.关闭防火墙 一般最好是关闭防火墙比较关闭. ...
- Hadoop安装过程
1.安装JDK apt-get install openjdk-7-jdk 2.配置环境变量 vim /etc/profile 编辑: export JAVA_HOME=/usr/lib/jvm/ja ...
- hadoop: Shuffle过程详解 (转载)
原文地址:http://langyu.iteye.com/blog/992916 另一篇博文:http://www.cnblogs.com/gwgyk/p/3997849.html Shuffle过程 ...
- Hadoop 安装过程中出现的问题
1.hadoop-daemon.sh start namenode 启动失败 查看hadoop/logs 下面的日志 出现 2017-04-11 15:35:13,860 WARN org.apach ...
- Ubuntu Hadoop使用过程中的一些技巧1
权限不足:打开有管理员权限的文件夹:sudo nautilus 输入密码即可进入最高权限的文件管理界面可以快速对文件进行修改删除操作 修改权限:chmod命令 chmod -R 777 文件 ...
- Hadoop - MapReduce 过程
Hadoop - MapReduce 一.MapReduce设计理念 map--->映射 reduce--->归纳 mapreduce必须构建在hdfs之上的一种大数据离线计算框架 在线: ...
- windows + hadoop + eclipse 过程记录
昨天在本机上搭建了伪分布式的hadoop,今天决定在eclipse中搭建hadoop的环境,毕竟磨刀不误砍柴工 安装的hadoop是2.7.5版本,要想使用eclipse写MapReduce需要一个 ...
随机推荐
- SED修改指定行
一个文件:cat aa #如果第三行是5的话将改为8,很明显第三行是5所以 结果改变 [root@remote ~]# sed -e '3s/5/8/' aa [root@remote ~]# #如果 ...
- 基于visual Studio2013解决C语言竞赛题之1004平均值
题目 解决代码及点评 /************************************************************************/ /* 4. 编一个程序, ...
- C++ vs.net设置UTF8字符
1.将main.cpp改成utf-8编码,方法是点击main.cpp,然后选择菜单文件->高级保存选项.[所有源码都要转换成uft-8] 2.在你的main函数里,设置如下代码,完美解决qt5的 ...
- 四大流行的java连接池之BoneCP篇
BoneCP 是一个开源的快速的 JDBC 连接池.BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下C3P0 要六百 ...
- Activity的绘制流程简单分析(基于android 4.0源码进行分析)
要明白这个流程,我们还得从第一部开始,大家都知道 在activity里面 setcontentview 调用结束以后 就可以看到程序加载好我们的布局文件了,从而让我们在手机上看到这个画面. 那么我们来 ...
- android中 System.exit(0)的理解
public class HelloGoodbye{ try{ System.out.println(“Hello World”); System.exit(0); } finally { Syste ...
- Java进阶01 String类
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...
- javascript每日一练(三)——DOM一
一.Dom基础 childNodes(有兼容问题),children nodeType getAttribute() firstChild,lastChild,previousSilbing,next ...
- Ubuntu 安装启动Tomcat
首先下载ubuntu 的tar包 官网: http://tomcat.apache.org/download-80.cgi 安装启动 1 .下载对应的tar 2 .解压任意文件夹下,更改名字tomca ...
- PHP高级编程SPL
这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...