10 大数据之Hadoop(第五部 Hadoop工作原理)
配置文件优先级顺序
- 开发代码中指定的值
- 开发代码的同级目录或指定目录中的配置文件
- Hadoop自定义配置文件
- Hadoopjar包中的默认配置
HDFS数据写入流程
- 客户端获取一个HDFS client客户端对象,然后对读入的文件进行切分(如200M大小文件切分为多个128M的块,200M切分开就是128M+72M两个),然后创建一个分布式文件系统(distributed file system),然后向NameNode请求上传文件,NameNode首先检查文件是否存在,一系列检查通过后返回给客户端允许上传,随后客户端请求上传第一个block(0-128M),NameNode会返回一个或多个DataNode的地址,也就是允许上传到那个节点(主要判断检查距离最近延迟最低的和负载最小的就优先上传),随后开始写数据,写数据之前需要先建立通道,各个节点相应返回应答成功,开始以数据流的方式发送数据,第一个节点收到完整数据后会先存储在内存中,然后一边开始落盘,一遍发送给下一个节点,同时下一个节点接收到之后也会一遍写入数据到磁盘,一遍传输到下一个节点,当最后一个节点写入完成,会依次向前返回写入成功,当最开始的第一个节点收到写入成功后,会删除内存中的数据,同时返回给客户端写入成功,客户端收到后会再次发送给NameNode,通知写入成功.
网络拓扑 节点距离计算
HDFS节点距离计算:两个节点到达最近的共同祖先的距离总和
例如,每个机房有多个机架,每个机架又有多台服务器,如下图,我们假设机架j1上的服务器F1是NameNode,那么同一机架的服务器F2到F1距离就是2(直接发出请求到交换机A1,再到F1,总路线是2).
如果是j2机架上的服务器F1也是DataNode,现在来连接主节点,那么他需要先经过交换机A2到达交换机A1,在到达F1,那么也就是3.
如果现在还有其他机房的,从其他机房到达这个机房过程可能就要经过好几次,这种的节点距离也就算作最远
总结:节点距离计算是自己发出请求到交换机,被转发的越多,则表示越远.
机架感知 副本存储节点选择
副本存储节点选择
当副本数为3的时候,数据存储会先选在client所在节点上,如果client节点不在集群中某个机架内,那么则会随即选择一个节点,随后第二个副本会和第一个副本在同一个机架内不同的节点上,第三个副本会在不同的机架随机的节点上存储.
如图,client1(红色)写入数据时(集群之外的节点),会被随即选择机架,随即选择两个节点存储两个副本,同时再次随即选择一个机架上的某个节点存储第三个副本
client2(橙色)在选择时会优先选择同一机架(同一局域网内)的随即两个节点存储两个副本,同时选择机架之外的随机一个存储第三个副本数据.
这样的选择性降低了延迟同时保证了数据的可靠性.
HDFS读数据流程
- 首先连接NameNode,请求读取数据,传递给其相对应的路径名.
- NameNode返回文件的元数据信息,如在数据在那些节点,分为了几个块.
- 客户端请求DataNode上存储的数据块,然后DataNode返回数据.
- 将数据块进行合并,保存.