WebService使用入门(包括发布服务,调用服务)
一. 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使用入门(包括发布服务,调用服务)的更多相关文章
- Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1.接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2.利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.jav ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...
- Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- webservice快速入门-使用wsimport生成ws服务端(二)
上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...
- Spring Cloud Eureka 注册,发布,调用服务
Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,如Netflix Eureka.Consul和Zookeeper.在Spring ...
- 绑定方式开始服务&调用服务的方法
1.编写activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- Android--绑定服务调用服务的方法
Service依照其启动的方式,可分为两种: 1.Started Started的Service.通过在Application里用startService(Intent intent)方法来启动.这样 ...
- [android] 绑定方式开启服务&调用服务的方法
需求:后台开启一个唱歌服务,这个服务里面有个方法切换歌曲 新建一个SingService继承系统Service 重写onCreate()和onDestory()方法 填一个自定义的方法changeSi ...
随机推荐
- sendUserActionEvent() mView== null after clicking on button
this is not a problem related to your code, but related to S4 android version. Same question has bee ...
- VM10下Ubuntu无法安装vim的问题
今天在VM10下重装了Ubuntu14.10,安装vim时发现如下问题 谷歌了一下,终于找到一种方法解决. 终端下: sudo vi /etc/apt/source.list 该命令将用vi打开一个文 ...
- TOMcat9 免安装版的配置
在这里默认大家都安装了jdk并且配置了java的环境,网上教程很多. 在tomcat官网(http://tomcat.apache.org/download-90.cgi)上下载和自己系统匹配的安装包 ...
- request相关研究
一.什么是httpservletrequest 用来处理一个对Servlet的HTTP格式的请求信息. 二.httpservletrequest的作用是什么 优点: 公共接口类HttpServletR ...
- C#操作WORD换行
appWord.ActiveDocument.Bookmarks[bookMark].Select(); Word.Selection wordSelection = appWord.ActiveDo ...
- 非root用户搭建hadoop伪分布式
0.安装软件列表 jdk-7u25-linux-x64.tar.gz hadoop-2.5.0.tar.gz hadoop-native-64-2.5.0.tar 1.准备Linux环境(root ...
- 拦截QWebView弹出窗口
环境 系统:win7 64位旗舰版 软件:VS2013.QT5.5.1-32位 概述 当网页打开一个新的窗口时,我们有时候需要根据URL地址来判断弹出窗口是否合理,如果合理则弹出新窗口,否则不弹出.本 ...
- 重读The C programming Lanuage 笔记二:运算符优先级
运算符的优先级和结合性有明确的规定,但是,除少数例外情况外,表达式的求值次序没有定义,甚至某些有副作用的子表达式也没有定义. 也就是说运算符的定义保证了其操作数按某一特定的顺序求值,否则具体实现可以自 ...
- Linux 下Tomcat启动Cannot find ./catalina.sh
[root@localhost bin]# ./shutdown.sh shCannot find ./catalina.shThis file is needed to run this progr ...
- Java--最大子序列和实现
package com.dongbin.test; /** * 最大子序列和 --分治法 * * @author dongbin * */ public class MaxSubListSum { / ...