-
客户端通过 Distributed FileSystem 向 NameNode 请求下载文件,NameNode 通过查询元数据,找到文件块所在的 DataNode 地址。
-
挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。
-
DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
-
客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。
2.5 NameNode 和 Secondary NameNode
2.5.1 NN 和 2NN 工作机制
NameNode 中元数据单独存到磁盘不方便读写。单独存到内存时,断电会丢失。Hadoop 采用的是如下方式。
FsImage :
元数据序列化后在磁盘存储的地方。包含HDFS文件系统的所有目录跟文件inode序列化信息。
Memory:
元数据在内存中存储的地方。
Edit 文件:
Edit 记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。
一旦元数据有更新跟添加,元数据修改追加到Edits中然后修改内存中的元数据,这样一旦NameNode 节点断电,通过 FsImage 跟 Edits 的合并生成元数据。
Edits文件不要过大,系统会定期的由 Secondary Namenode 完成 FsImage 和 Edits 的合并。
-
Distance(/d1/r1/n0,/d1/r1/n0) = 0 同一节点上的进程
-
Distance(/d1/r1/n1,/d1/r1/n2) = 2 同一机架上不同节点
-
Distance(/d1/r2/n0,/d1/r3/n2) = 4 同一数据中心不同机架节点
-
Distance(/d1/r2/n1,/d2/r4/n1) = 6 不同数据中心
2.3.3 副本节点选择
-
第一个副本在Client所在节点上,如果在集群外则随机选个。
-
第二个副本跟第一个副本位于同机架不同节点
-
第三个部分位于不同机架,随机节点。
该方法中,通过view找到mRoots中的对应索引,然后同样走到ViewRootImpl中进行View删除工作,通过die方法,最终走到dispatchDetachedFromWindow()方法中,主要做了以下几件事:
-
回调onDetachedFromeWindow。
-
垃圾回收相关操作;
-
通过Session的remove()在WMS中删除Window;
-
通过Choreographer移除监听器
Activity、PhoneWindow、DecorView、ViewRootImpl 的关系?
看完上面的流程,我们再来理理这四个小伙伴之间的关系:
-
PhoneWindow 其实是 Window 的唯一子类,是 Activity 和 View 交互系统的中间层,用来管理View的,并且在Window创建(添加)的时候就新建了ViewRootImpl实例。
-
DecorView 是整个 View 层级的最顶层,ViewRootImpl是DecorView 的parent,但是他并不是一个真正的 View,只是继承了ViewParent接口,用来掌管View的各种事件,包括requestLayout、invalidate、dispatchInputEvent 等等。
(编辑:柳州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|