1.hadoop架构模型
hdfs集群 访问地址http://ip:50070/
- namenode:集群当中的主要节点,主要用于管理集群当中的各种数据; 管理元数据,存在内存中;管理客户端对文件读写请求,决定文件写在哪里,副本存储什么位置;
- 元数据信息保存在 edits,FSImage
- secondaryNameNode:对hadoop当中的原属句信息辅助管理 元数据的,定期合并edits,FSImage,合并条件:默认时间1小时,大小64M
- secondaryNameNode通知Name奇幻editLog
- 获得FSImage和editlog(通过http方式)
- FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage
- 心的fsimage发送给namenode
- namenode用新的fsimage替换就的fsiname
- 更新fstimae,hadoop进入安全模式
- datanade:集群的从节点,主要存贮数据,负责文件内容的读写,文件内容不经过namenode;文件以block块存在磁盘,大小推荐128M,可以在hdfs-site.xml指定。如果一个文件是200M,需要两个block存储,占用磁盘空间大小为200M,不是256M
<property>
<name>dfs.block.size</name>
<value>131072</value>//块大小 以KB为单位
</property>
元数据信息保存在 edits,FSImage,在hdfs-site.xml中配置存储路径
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
</property>
edits: 客户端对hdfs的写入和更新,先记录在edits文件中,edits更新后客户端才能看到最新信息;
fsimage:是namenode中的元数据完整镜像(又称检查点),内容多,加载内存生成拓扑树,耗内存和cpu;
yarn集群 http://ip:8088/cluster
resourcemanager:接受用户的计算请求任务,并负责集群的资源分配 (主节点)
nodemanager:负责执行主节点AppMaster分配任务 (从节点)
AppMaster:resourceManager为每个计算任务启动一个AppMaster,AppMaster主要负责资源的申请,任务的分配
JobHistoryServer:查看集群指定的任务 http://ip:19888/jobhistory
注意:因为hadoop给出的安装包没有提供带c程序的访问接口,在使用本地库的时候会出问题,所以要先编译才能使用
hdfs写入过程
- clienct其上传文件请求,namenode返回文件是否可以上传
- client请求第一个block传送到哪些datanade-
- namenode返回可上传namenode地址
- client请求3台中一台a,上传数据(以packet数据包在pipeline上依次传输),然后在a传输到b,b传输到c
- 传输完成后返回cack确认机制,继续上传后面的block知道全部上传完毕关闭文件流
hdfs读取过程
- client发起rpc请求
- namenode判断权限后返回文件的全部或部分包含block和副本的datanode地址列表,(距离client进的排在前面)
- client根据地址列表读取文件,本质上建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;(read是并行读取)
- 读取完后进行checksum验证,如果读取失败,就读取副本
- 读取文件完成后合并成一个完整的文件