大数据学习笔记2--hdfs工作原理及源码分析

windows下配置hadoop

  1. hadoop 安装包解压,路径不要有特殊字符

  2. lib和bin直接解压出来的不可用,需要自己重新编译

  3. 配置环境变量:HADOOP_HOME,path中添加:bin目录

namenode

  • 整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

响应客户端的请求,上传文件:

  1. client申请上传文件,namenode查看元数据信息,查看客户端申请的路径是否已存在

  2. namenode返回可用的datanode

  3. 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

  1. 通知namendoe切换edits,不再使用之前的edits文件
  2. secondary namenode从namenode下载edits和fsimage文件
  3. secondary namenode将他们加载到内存,进行合并,产生新的fsimage.chkpoint
  4. 将新的fsimage文件回传到namenode
  5. namenode用新的fsimage替换旧的fsimage

checkpoint

  • fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。

  • fs.checkpoint.size
    规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

节点间通信:

  • 远程方法调用rpc
  • 大数据量的传输

FileSystem获取过程

  1. FileSystem.get(new URI(HDFS_PATH), new Configuration());//获取文件对象
  2. CACHE.get(uri, conf)//从缓存Map中获取
  3. fs = createFileSystem(uri, conf);//创建新的fs
  4. clazz = getFileSystemClass(uri.getScheme(), conf);//获取fs类
  5. ReflectionUtils.newInstance(clazz, conf)//实例化fs
  6. fs.initialize(uri, conf);//初始化fs参数
  7. dfs = new DFSClient(uri, conf, statistics)//获取dfs客户端
  8. proxyInfo =
    NameNodeProxies.createProxyWithLossyRetryHandler(conf,nameNodeUri,
    ClientProtocol.class, numResponseToDrop)//通过RPC获取和NN通信的客户端代理对象
  9. this.namenode = proxyInfo.getProxy()//获得namenode代理对象

fs持有DistributedFileSystem dfs,dfs中持有DFSClinet dfsc对象,dfsc中持有namenode代理对象

你可能感兴趣的:(大数据)