一. namenode工作机制

1. 客户端上传文件时,namenode先检查有没有同名的文件,如果有,则直接返回错误信息。如果没有,则根据要上传文件的大小以及block的大小,算出需要分成几个block,指定每个block存在哪个datanode上,之后把这些元数据写到edits log中并返回给客户端。

2. 客户端拿到元数据后,驱动会把上传的文件分block,并把各个block上传到对应的datanode上,如果上传成功的话,客户端会收到上传成功信息,全部上传成功之后,客户端会把成功信息返回给namenode,namenode就把这次上传操作对应的元数据信息写到内存中。

3. edits log文件达到一定条件时,需要将内容整合到fsimage文件中去(fsimage是最终存储元数据的文件,很大),这就需要secondarynamenode上场了。

edits log整合到fsimage文件的条件:

① edits log文件大小达到最大值,默认64M,由hdfs-site.xml配置文件的fs.checkpoint.size配置项指定

② 两次checkpoint的时间达到最大时间间隔,默认3600秒,由 hdfs-site.xml配置文件的fs.checkpoint.period配置项指定

当满足以上2个条件的任一个时,namenode会立刻通知secondarynamenode进行checkpoint操作,同时停止往edits log文件写内容,而是写入一个新的edits log文件,比如说叫做edits.new。secondarynamenode会把namenode中的fsimage文件和edits log文件下载过来,然后进行合并操作,合并完之后再把新的fsimage文件上传到namenode中。namenode会把edits.new文件重命名为edits log文件,直到再次写满,再次让secondarynamenode帮助进行合并操作。

元数据在namenode节点主机存放路径:

/home/koushengrui/app/hadoop-2.7.4/data/dfs/name/current,其中/home/koushengrui/app/hadoop-2.7.4/data是在core-site.xml配置文件中hadoop.tmp.dir配置项指定的值。dfs代表hdfs,name代表namenode,与name同级的目录还有data目录、namesecondary目录,其中data目录存放datanode的数据,namesecondary目录存放secondarynamenode的数据。

元数据的格式:

/test/a.log, 3 ,{blk_1,blk_2}, [{blk_1:[h0,h1,h3]},{blk_2:[h0,h2,h4]}]

其中/test/a.log表示上传的文件的虚拟目录,3表示文件有3个副本,blk_1、blk_2分别表示block1、block2,{blk_1:[h0,h1,h3]}表示blk_1三个副本分别在h0、h1、h2主机上,{blk_2:[h0,h2,h4]}表示blk_2的三个副本分别放在h0、h2、h4主机上。

namenode的职责:

1.相应客户端请求

2.维护元数据信息

3.维护hdfs的目录树

二. datanode工作机制

datanode提供文件存储服务,换句话说上传的文件是以分block的方式存储在datanode节点上的。block的最大大小在hdfs-site.xml配置文件由dfs.block.size配置项指定,默认是128M,可以根据实际需求增大或者减小。

文件实际存储路径是/home/koushengrui/app/hadoop-2.7.4/data/dfs/data/current/BP-13819656-192.168.100.100-1502801926683/current/finalized/subdir0/subdir0,即datanode节点的主机的hadoop.tmp.dir目录,dfs/data子目录中(上面介绍namenode时也提到过)。在此目录中可以看到很多以blk_开头的文件,这些文件就是上传的、分块后的文件。其实利用这些block文件可以得到原来的文件,把这些block文件按顺序拼装好之后就与之前上传的文件完全相同。

WebService使用入门(包括发布服务,调用服务)的更多相关文章

  1. Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)

    1.接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2.利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.jav ...

  2. Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  3. Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)

    1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...

  4. Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  5. webservice快速入门-使用wsimport生成ws服务端(二)

    上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...

  6. Spring Cloud Eureka 注册,发布,调用服务

    Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,如Netflix Eureka.Consul和Zookeeper.在Spring ...

  7. 绑定方式开始服务&调用服务的方法

    1.编写activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  8. Android--绑定服务调用服务的方法

    Service依照其启动的方式,可分为两种: 1.Started Started的Service.通过在Application里用startService(Intent intent)方法来启动.这样 ...

  9. [android] 绑定方式开启服务&调用服务的方法

    需求:后台开启一个唱歌服务,这个服务里面有个方法切换歌曲 新建一个SingService继承系统Service 重写onCreate()和onDestory()方法 填一个自定义的方法changeSi ...

随机推荐

  1. C# 语言规范_版本5.0 (第12章 数组)

    1. 数组 数组是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问.数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型. 数组有一个“秩”,它确定和每个数组元素关 ...

  2. cocos坐标系及坐标转换

    cocos2dx的坐标系是以左下角为(0,0)点, 向右上为正 世界坐标系:相对于屏幕位置的坐标表示 节点坐标系:相对于父节点的坐标表示 可以相互转换: /** * 将世界坐标转换成节点坐标,忽略锚点 ...

  3. Java之JSP基础语法

    1.JSP页面元素简介及page指令     2.JSP注释,3种不同注释 <!--  我是HTML注释,在客户端可见 --> <%--我是JSP注释,在客户端不可见 --%> ...

  4. 推荐几个好的 Maven 常用仓库网址

    注意,以下内容转载自:推荐几个好的 Maven 常用仓库网址 Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个 ...

  5. HeartBeat源码安装

    只是写了安装流程,具体信息查看互联网; 环境: CentOS6.8 x86_64 min Heartbeat 3.0.6 http://hg.linux-ha.org/heartbeat-STABLE ...

  6. POJ - 1330 Nearest Common Ancestors(基础LCA)

    POJ - 1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %l ...

  7. 快捷高效的cmd命令

    经常在网上逛一些博客看一些技术文章,但是每每看过之后又忘记保存,或者东存一下,西存一下,到需要的时候回过头来,往往都找不到了.所以开通这个博客,把看到的好东西都记录下来,以便回头查看,也能与大家分享分 ...

  8. hdu1016

    #include <stdio.h>#include <string.h> int prime[38]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1 ...

  9. 第一百零四节,JavaScript时间与日期

    JavaScript时间与日期 学习要点: 1.Date类型 2.通用的方法 3.格式化方法 4.组件方法 ECMAScript提供了Date类型来处理时间和日期.Date类型内置一系列获取和设置日期 ...

  10. String类之indexOf--->查找某字对应的位置

    以下方法都是java内置类String类的内置方法(不是构造方法哦,就是普通的方法),不需要我们写,直接拿过来用即可. indexOf方法对应Api介绍 lastIndexOf方法对应Api介绍 -- ...