- 未完成任务
- NameNode、DataNode源码解析
- 动态节点上下线操作
- 配置文件$HADOOP_HOME/etc/hadoop/...
- 常用端口
- core-site.xml(hdfs使用)
- NameNode路径 8020
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
- hdfs集群上的数据保存的路径
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/apps/tmp</value>
</property>
- NameNode路径 8020
- hdfs-site.xml(hdfs使用)
- dfs http ui地址50070
- namenode守护进程管理的元数据文件fsimage存储的位置(非必配)
- 确定DFS数据结点应该将其块存储在本地文件系统的何处(非必配)
- 块的副本数
- 块的大小
- secondarynamenode守护进程的http地址:主机名和端口号
- 文件的检测目录
- 日志edits的检测目录
- mapred-site.xml(MapReduce使用)
- 配置作业历史服务器的http地址19888
- 指定mapreduce使用yarn资源管理器
- 配置作业历史服务器的地址
- yarn-site.xml(yarn使用)
- 指定yarn的shuffle技术
- 指定resourcemanager的主机名
- 可选
- 配置resourcemanager的webui的监控页面8088
- 指定shuffle对应的类
- 配置resourcemanager的内部通讯地址
- 配置resourcemanager的scheduler的内部通讯地址
- 配置resourcemanager的资源调度的内部通讯地址
- 配置resourcemanager的管理员的内部通讯地址
- 常用端口
- HDFS
- HDFS常用命令
hadoop fs,使用范围更大
hdfs dfs,范围相对较小,两者之间没有太大区别- 创建目录
- -mkdir
- 上传指令
- -put
- -moveFromLocal
- -copyFromLocal
- 查看指令
- -ls
- -cat
- -tail
- 下载指令
- -copyToLocal
- -get
- 删除指令
- -rm
- -rmdir
- 查看磁盘利用率和文件大小
- -df
- -du
- 向hdfs中的文件里追加内容
- -appendToFile
- 修改权限
- -chgrp
- -chmod
- -chown
- 修改文件的副本数
- -setrep
- 查看文件的状态
- -stat
- 创建目录
- HDFS组成
- NameNode
1、在内存中维护分布式文件系统中的目录树结构
2、保存在分布式文件系统中,每一个文件的块的信息(位置、副本)
3、实施副本策略(保证在某个DataNode宕机或重启后,副本的新增和减少)
4、处理客户端的交互(上传文件,删除文件,获取文件,拷贝,移动等)
- DataNode
1、真正存储数据的节点(数据是以块的形式存在)
2、和客户端进行交互,处理客户端的读写请求
3、向NameNode发送心跳包,汇报自己的状态(自己还活着,自己存储的数据信息),3秒发送一个
- SecondaryNameNode
帮助NameNode合并fsimage和edits文件
- Client接口
HDFS提供的各种语言操作HDFS的接口
1、与NameNode进行交互,获取文件的存储位置(读/写两种操作中)
2、与DataNode进行交互,写入数据,或者读取数据
3、上传时分块进行存储,读取时分片进行读取
- 镜像文件fsimage
命名空间镜像文件,namenode会在内存中维护文件系统的元数据(如修改时间,访问时间,访问权限,副本数据,块大小,文件块列表信息等),同时会将这些数据持久化到本地磁盘,形成一个完整的永久检查点,也就是这个fsimage文件
查看fsimage文件:hdfs oiv -i fsimage_xxxx -o ~/fs.xml -p XML(-p可省略,默认xml)
oiv:offline fsimage viewer
-p:processor,支持binary、XML(默认),stats(分析和打印每种操作的数量)
- 日志文件edit
编辑日志文件,hdfs文件系统在发生打开、关闭、创建、删除、重命名等操作时产生的信息保存在内存和持久化到磁盘上,生成edit编辑日志文件。比如上传文件后,会生成事务txid,文件inodeid,数据块副本数,数据块id,数据块大小,访问时间,修改时间等;
查看edit文件:hdfs oev -i edits_inprogress_xxx -o ~/ed3.xml -p XML
oev:offline edits viewer
- NameNode
- HDFS工作机制#重点
- NameNode启动过程
1、NameNode在启动时,会先加载name目录下最近的fsimage文件,将里面的保存的元数据加载到内存中,这样内存里就有了之前检查点里存储的所有元数据。但是此时还少了最近一次检查点到关闭系统时的部分数据,也就是edit日志文件里操作的那些数据;
2、加载剩下的edit日志文件,将最近一次检查点到目前为止的所有日志文件加载到内存里,重演一次客户端的操作,这样,内存中的元数据就是最新的了;
3、进行检查点设置(满足条件会进行),NameNode会终止之前正在使用的edit文件,创建一个空的edit日志文件。然后将所有的未合并过的edit日志文件和fsimage文件进行合并,产生一个新的fsimage;
4、在安全模式下,等待DataNode节点的心跳反馈,当收到99.9%的块的至少一个副本后,退出安全模式,并转为正常状态。
- 安全模式介绍
定义:安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。- NameNode启动
NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的镜像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。在这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。
- DataNode启动
系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可高效运行文件系统
- 安全模式退出判断
如果满足“最小副本条件”,NameNode会在30s之后退出安全模式。所谓最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
注意:这里为什么不是100%呢,主要考虑到不能因为极个别的服务器影响到整个集群的启动
- NameNode启动
- DataNode与NameNode通信(心跳机制)
1、master启动 时会开启一个IPC服务,等待slave连接;
2、slave启动后,会主动连接IPC服务,每个3s连接一次(这个时间可通过设置heartbeat调整)。这个定时连接的行为称为心跳机制。slave通过心跳给master汇报自己信息,master通过心跳下达命令;
3、NameNode通过心跳得知DataNode状态。ResourceManager通过心跳得知NodeManager状态;
4、当master长时间没有收到slave信息时,就认为slave挂掉了;- 长时间的定义:默认10分钟30秒,计算公式:2*recheck+10*heartbeat
recheck:属性dfs.namenode.heartbeat.recheck-interval,默认值为5分钟,单位毫秒
heartbeat:属性dfs.namenode.interval,默认值3秒,单位秒
两者都在hdfs-site.xml进行修改和配置
- 长时间的定义:默认10分钟30秒,计算公式:2*recheck+10*heartbeat
- SecondaryNameNode的工作机制(检查点机制)
SecondaryNameNode是HDFS集群中的重要组成部分,它可以辅助NameNode进行fsimage和editlog的合并工作,减小editlog文件大小,以便缩短下次NameNode的重启时间,能尽快退出安全模式。- 工作过程
1、snn请求nn停止使用正在编辑的editlog文件,NameNode会创建新的editlog文件,同时更新seen_txid文件。
2、snn通过http协议获取NameNode上的fsimage和editlog文件。
3、snn将fsimage读进内存当中,并逐步分析editlog文件里的数据进行合并操作,然后写入新文件fsimage_x.ckpt文件中。
4、snn将新文件fsimage_x.ckpt通过http协议发送回NameNode。
5、NameNode再进行更名操作。
- 工作过程
- 网络拓扑
- 机架感知
- 节点动态上线
- 节点动态下线
- HDFS管理命令
- NameNode启动过程
- 数据流#重点
- 读流程
- 写流程
- 读流程
- HDFS常用命令