hadoop中datanode节点不同的dfs.data.dir之间数据均衡问题
来源:互联网 发布:淘宝客服兼职怎么做 编辑:程序博客网 时间:2024/06/18 08:51
public FSDir(File dir) throws IOException { this.dir = dir; this.children = null; //文件夹不存在则创建文件夹 //不会覆盖或删除已经存在的文件夹,为手工移动block提供了便利性if (!dir.exists()) { if (!dir.mkdirs()) { thrownew IOException("Mkdirs failed to create " + dir.toString()); } } else { File[] files = dir.listFiles(); int numChildren = 0; //自检查文件夹个数(子FSDir的个数)和文件(block个数)for (int idx = 0; idx < files.length; idx++) { if (files[idx].isDirectory()) { numChildren++; } elseif (Block.isBlockFilename(files[idx])) { numBlocks++; } } //为其每个子文件夹创建一个FSDir对象 。if (numChildren > 0) { children = new FSDir[numChildren]; int curdir = 0; for (int idx = 0; idx < files.length; idx++) { if (files[idx].isDirectory()) { children[curdir] = new FSDir(files[idx]); curdir++; } } } } }
/** * //所作的事情:将在tmp中的block文件以及其meta文件mv(重命名)到current中 * 第一次调用的形式是:先调用 File file = addBlock(b, src, false, false) ,再调用addBlock(b, src, true, true) * boolean createOk : 是否需要在子FSDir中创建子子FSDir,先不创建的添加,若是不行(子目录存放的block也满了),再允许子目录创建子子目录 。 * boolean resetIdx : 当存储需要在子目录中时候,每次存储完都有一个lastChildIdx表明上次存在哪个文件夹下:设置为true表示下次会在随机选一个,false表示下次还接着上次的来存 */private File addBlock(Block b, File src, boolean createOk, boolean resetIdx) throws IOException { //本层目录未满,这直接将block添加在本目录if (numBlocks < maxBlocksPerDir) { File dest = new File(dir, b.getBlockName()); File metaData= getMetaFile( src, b ); File newmeta = getMetaFile(dest, b); if ( ! metaData.renameTo( newmeta ) || ! src.renameTo( dest ) ) { thrownew IOException( "could not move files for " + b + " from tmp to " + dest.getAbsolutePath() ); } if (DataNode.LOG.isDebugEnabled()) { DataNode.LOG.debug("addBlock: Moved " + metaData + " to " + newmeta); DataNode.LOG.debug("addBlock: Moved " + src + " to " + dest); } numBlocks += 1; return dest; } //需要存到子目录下 ,随即从新选择一个开始子目录 //通过这个resetIdx来平均各个子FSDir的存储不均衡 。if (lastChildIdx < 0 && resetIdx) { //reset so that all children will be checked lastChildIdx = random.nextInt(children.length); } //从上面随即的lastChildIdx开始找一个能添加if (lastChildIdx >= 0 && children != null) { //Check if any child-tree has room for a block.for (int i=0; i < children.length; i++) { int idx = (lastChildIdx + i)%children.length; //这一块的添加既是先试着用 子目录中不创建子子目录的方式 添加 。 File file = children[idx].addBlock(b, src, false, resetIdx); if (file != null) { lastChildIdx = idx; return file; } } lastChildIdx = -1; } if (!createOk) { returnnull; } //如果没有子文件夹才这么做,当有手工移动来的子文件时候造成的结果是这一层目录只有手工移动过来的那几个文件夹 ~~
//若是没有手工成分,DataNode会一次性建立maxBlocksPerDir个子文件夹 。
//maxBlocksPerDir由dfs.datanode.numblocks确定,默认是64 ,含义是每个FSDir中最多存储多少个block ,最多存储多少个子FSDir
if (children == null || children.length == 0) { children = new FSDir[maxBlocksPerDir]; for (int idx = 0; idx < maxBlocksPerDir; idx++) { children[idx] = new FSDir(new File(dir, DataStorage.BLOCK_SUBDIR_PREFIX+idx)); } } //now pick a child randomly for creating a new set of subdirs. lastChildIdx = random.nextInt(children.length); return children[ lastChildIdx ].addBlock(b, src, true, false); }
maxBlocksPerDir由dfs.datanode.numblocks确定,默认是64 ,含义是每个FSDir中最多存储多少个block ,最多存储多少个子FSDir
阅读全文
0 0
- 关于hadoop中datanode节点不同的dfs.data.dir之间数据均衡问题
- hadoop中datanode节点不同的dfs.data.dir之间数据均衡问题
- hadoop关于dfs.datanode.data.dir下过个目录不均衡问题
- Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid)
- Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid)
- org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid dfs.datanode.data.dir /chunk : java.io.Fil
- ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid
- 集群扩容DataNode报错:Invalid dfs.datanode.data.dir /data2/hadoop/hdfs/data : EPERM: Operation not permitt
- hadoop datanode启动失败(All directories in dfs.data.dir are invalid)
- Hadoop参数:dfs.name.dir 与 dfs.data.dir
- Hadoop参数:fs.defaultFS、 dfs.name.dir 、 dfs.data.dir
- Hadoop参数:dfs.name.dir 与 dfs.data.dir
- Hadoop--Datanode存储均衡问题
- dfs.data.dir 配置导致datanode无法启动
- Hadoop 数据节点DataNode异常
- hdfs dfsadmin -reconfig reload datanode dfs.datanode.data.dir without restart datanode
- hadoop 2.2.0的datanode中存储block的多个文件夹的负载均衡问题
- 关于hadoop编程中dfs.replication与datanode数量的问题
- 一个感染型木马病毒分析(一)
- 7.Spring Cloud:服务容错保护(Hystrix依赖隔离)【Dalston版】
- JDK源码走读之LinkedList
- Markdown语法手册
- Sql server基本语句(增删改查)
- hadoop中datanode节点不同的dfs.data.dir之间数据均衡问题
- 计算机组成原理--计算机硬件基础之总线系统
- python数据分析与挖掘实战 第七章 拓展思考
- propertyIsEnumerable的用法
- java模拟form表单上传图片
- 成为Java顶尖程序员 ,看这11本书就够了
- 关于c# 中调用webapi 的问题
- UIAutomator2.0详解(入门篇)
- ImageView 获取比较资源