windows下配置hadoop
- hadoop 安装包解压,路径不要有特殊字符
- lib和bin直接解压出来的不可用,需要自己重新编译
- 配置环境变量:HADOOP_HOME,path中添加:bin目录
namenode
- 整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
响应客户端的请求,上传文件:
- client申请上传文件,namenode查看元数据信息,查看客户端申请的路径是否已存在
- namenode返回可用的datanode
- client直接访问第一个datanode,上传第一个block,datanode向namenode报告block信息,第一个block建立一个pipeline,向其他datanode拷贝block副本,链式向下传递副本,达到配置的副本数。
namenode写元数据
- 内存中:meta.data
- 磁盘:fsimage、edits log
- 先修改edits
- 同步到meta.data
fsimage结构:
- 文件名,副本数,blockid,block存储的机器
- NameNode(FileName, replicas, block-ids,id2host…)
- /test/a.log, 3 ,{blk_1,blk_2},
[{blk_1:[h0,h1,h3]},{blk_2:[h0,h2,h4]}]
secondary namenode 同步修改fsimage
- 通知namendoe切换edits,不再使用之前的edits文件
- secondary namenode从namenode下载edits和fsimage文件
- secondary namenode将他们加载到内存,进行合并,产生新的fsimage.chkpoint
- 将新的fsimage文件回传到namenode
- namenode用新的fsimage替换旧的fsimage
checkpoint
- fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。
- fs.checkpoint.size
规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。
节点间通信:
- 远程方法调用rpc
- 大数据量的传输
FileSystem获取过程
- FileSystem.get(new URI(HDFS_PATH), new Configuration());//获取文件对象
- CACHE.get(uri, conf)//从缓存Map中获取
- fs = createFileSystem(uri, conf);//创建新的fs
- clazz = getFileSystemClass(uri.getScheme(), conf);//获取fs类
- ReflectionUtils.newInstance(clazz, conf)//实例化fs
- fs.initialize(uri, conf);//初始化fs参数
- dfs = new DFSClient(uri, conf, statistics)//获取dfs客户端
- proxyInfo =
NameNodeProxies.createProxyWithLossyRetryHandler(conf,nameNodeUri,
ClientProtocol.class, numResponseToDrop)//通过RPC获取和NN通信的客户端代理对象
- this.namenode = proxyInfo.getProxy()//获得namenode代理对象
fs持有DistributedFileSystem dfs,dfs中持有DFSClinet dfsc对象,dfsc中持有namenode代理对象
时间: 2024-10-11 01:51:40