文档章节

HDFS中的addBlock函数

强子哥哥
 强子哥哥
发布于 2014/12/19 16:14
字数 478
阅读 232
收藏 7
点赞 0
评论 0

 

public LocatedBlock addBlock(String src, String clientMachine) throws IOException {

        int retries = 5;//设定重试次数为5

        Object results[] = namesystem.getAdditionalBlock(new UTF8(src), new UTF8(clientMachine));

//获取新的一个Block和DataNode节点信息

        while (results != null && results[0] == null && retries > 0) {

            try {//发生错误,且不超过错误次数,就重新获取

                Thread.sleep(100);

            } catch (InterruptedException ie) {

            }

            results = namesystem.getAdditionalBlock(new UTF8(src), new UTF8(clientMachine));

            retries--;

        }

//无论如何,都结束了!

        if (results == null) {//没找到?返回错误

            throw new IOException("Cannot obtain additional block for file " + src);

        } else if (results[0] == null) {

            return null;//没有Block?返回null

        } else {

            Block b = (Block) results[0];

            DatanodeInfo targets[] = (DatanodeInfo[]) results[1];

            return new LocatedBlock(b, targets);//这个简单,返回Block和DatanodeInfo

        }

    }

=====================

C1:OKAY  c2:OKAY   c3:OKAY

=====================

 

下面开始讲解

 public synchronized Object[] getAdditionalBlock(UTF8 src, UTF8 clientMachine) {

---

public synchronized Object[] getAdditionalBlock(UTF8 src, UTF8 clientMachine) {

        Object results[] = null;

        if (dir.getFile(src) == null && pendingCreates.get(src) != null) {

//文件系统dir中没有此文件且此文件正在创建过程中

            results = new Object[2];//创建返回的变量数组

            //

            // If we fail this, bad things happen!

            //这里的checkFileProgress很关键,

            //后面会分析checkFileProgress的作用

            if (checkFileProgress(src)) {

                // Get the array of replication targets //这个仍然很简单,之前分析过了

                DatanodeInfo targets[] = chooseTargets(this.desiredReplicationnull, clientMachine);

                if (targets.length < this.minReplication) {

                    return null;

                }

                // Create next block返回不多说!

                results[0] = allocateBlock(src);

                results[1] = targets;

            }

        }

        return results;

    }

===

接下来是函数

 

synchronized boolean checkFileProgress(UTF8 src) {

 

这个函数还是蛮重要的!

 

/**

     * Check that the indicated file's blocks are present and

     * replicated.  If not, return false.

     */

    synchronized boolean checkFileProgress(UTF8 src) {

        Vector v = (VectorpendingCreates.get(src);//获取文件名src对应的每个块

        for (Iterator it = v.iterator(); it.hasNext(); ) {

            Block b = (Block) it.next();//对于当前块来说

            TreeSet containingNodes = (TreeSetblocksMap.get(b);//获取这个块对应的datanode节点信息

            if (containingNodes == null || containingNodes.size() < this.minReplication) {

                return false;//如果此Block对应的datanode个数不足最小备份数,则禁止返回Block

            }

        }

        return true;//顺利返回true.

}

从这个函数,我们得知,如果在写入的过程中有datanode挂机,但是受影响的block的总个数达到安全阀值,我们还是容许继续写入的!

 

 

© 著作权归作者所有

共有 人打赏支持
强子哥哥

强子哥哥

粉丝 855
博文 551
码字总数 647665
作品 8
南京
架构师
windows下使用cygwin安装hadoop出现的问题,求解,谢谢!

$ ./hadoop jar ./dfs_operator.jar DFSOperator 13/11/07 00:58:40 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop .ipc.RemoteException: java.io.IOException: File /d......

小恩v ⋅ 2013/11/07 ⋅ 2

hadoop向hdfs拷贝文件,出错,文件为空,错误如下

[whp@namenode hadoop-0.20.2]$ bin/hadoop dfs -put ../input in 15/05/26 15:35:39 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOExc......

nana0223 ⋅ 2015/05/26 ⋅ 5

hadoop异常“could only be replicated to 0 nodes, instead of 1” 解决

异常分析 1、“could only be replicated to 0 nodes, instead of 1”异常 (1)异常描述 上面配置都正确无误,并且,已经完成了如下运行步骤: [root@localhost hadoop-0.20.0]# bin/hadoop...

夏春涛 ⋅ 2017/09/26 ⋅ 0

Hdfs磁盘存储策略和预留空间配置

一、Hdfs磁盘存储策略 1、 指定本地目录存储策略 data目录为Hot策略对应DISK; data1目录为Cold策略对应ARCHIVE; 重启hdfs 2、指定hdfs目录的存储策略 查看hdfs存储策略 创建2个hdfs目录 指...

哓竹 ⋅ 2016/11/12 ⋅ 0

hbase0.95 hadoop1.1.2 集成 无法启动

我只找到了错误日志。 ERROR org.apache.hadoop.hdfs.DFSClient: Failed to close file /hbase/hbase.version org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /hbase/hb......

西二旗板报 ⋅ 2013/05/21 ⋅ 0

hadoop hbase无法启动 2

今天又碰到的问题: Not able to place enough replicas 2015-02-08 18:35:43,978 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:web cause:java.......

gbsnaker ⋅ 2015/02/08 ⋅ 0

HDFS的reportWrittenBlock函数解析

可先看下网友的解析:http://fire-balrog.iteye.com/blog/812281 以下为我的解析: 当一个Block经由所有的DataNode写完后,就需要告诉namenode可以执行reportWrittenBlock函数了。 下面就来解...

强子哥哥 ⋅ 2014/12/19 ⋅ 0

HDFS Federation

在Hadoop 2.0之前,也有若干技术试图解决单点故障的问题: Secondary NameNode。 它不是HA,它只是阶段性的合并edits和fsimage,以缩短集群启动的时间。 当NameNode失效的时候,Secondary NN并...

散关清渭 ⋅ 2015/07/23 ⋅ 0

Hadoop配置常见Log错误指导

Master节点Log篇 1. WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/mywind/name should be specified as a URI in configuration files. Please update hdfs configuration. ......

loki_lan ⋅ 2014/11/24 ⋅ 0

Hadoop 源代码分析(二三)FSDirectory

下面我们来分析FSDirectory。其实分析FSDirectory 最好的地方,应该是介绍完INode以后,FSDirectory 在INode的基础 上,保存了HDFS 的文件目录状态。系统加载FSImage 时,FSImage 会在FSDir...

超人学院 ⋅ 2015/05/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 20分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 28分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 38分钟前 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 50分钟前 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部