一. 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. Redis Cluster 实践

    一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...

  2. vue的测试(Vue.js devtool)

    1. 安装chrome插件:Vue.js devtools(https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejigli ...

  3. 4、Xcode8中的钥匙串保存数据取出时候为空的问题

    Xcode7以及之前的版本直接使用Keychain存储数据即可,但是从Xcode8开始,再用之前的方法会发现,读取不到存进去的数据了,或者说,存储不进去了,原因是苹果加强了隐私保护,这个东西需要打开开 ...

  4. sap 设备cnsapwin不支持页格式*****

    SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式 解决办法: 在smartforms里的表格属性虽然定义了要打印的页格式 ZUNIA5 ,但是打印时会提示错误:" CNSA ...

  5. Python基础(十)-模块

    模块初识 一般把不同功能代码放到不同py文件,一个py文件就是一个模块 三种模块库: 1.Python标准库 2.第三方库 3.自定义库 导入模块:import 库名 (Python解释器只认识执行文 ...

  6. Python笔记6(异常)-20160924

    1. NameError 当视图访问一个未定义的变量则会发生NameError.

  7. Linux Yum仓库介绍及服务端及客户端配置

    YUM服务器 适合在于内网使用,因为很多包需要国外的网站下载应用包,这样网络很不稳定 下载慢,所有为何不尝试搭建 自己内部的YUM服务器呢 YUM服务器搭建 一 创建yum仓库目录 #mkdir -p ...

  8. 为什么要html语义化?

    1.什么是HTML语义化? <基本上都是围绕着几个主要的标签,像标题(H1~H6).列表(li).强调(strong em)等等> 根据内容的结构化(内容语义化),选择合适的标签(代码语义 ...

  9. 绿色astah简体中文版6.8

    astah是一个UML建模的好工具,绿化后,现在开始将它汉化. 欢迎大家提出汉化翻译不当的地方,在本帖子留言. 需要汉化的内容较多,我会逐渐发布汉化更完全的版本. 说明:astah6.8需要使用jre ...

  10. java链接mysql添加中文和模糊查询

    如下内容为转载 http://sunshinechen2008.blog.163.com/blog/static/107585374201162442643967/     mysql如果不对乱码处理 ...