命令 |
说明 |
fsck |
检查文件的完整性 |
start-balancer.sh |
重新平衡HDFS |
hdfs dfs -copyFromLocal |
从本地磁盘复制文件到HDFS |
- hadoop 配置
有两种配置文件:
一种是-default.xml(只读,默认的配置)
一种是-site.xml(替换default中的配置)
core-site.xml 配置公共属性
hdfs-site.xml 配置HDFS
yarn-site.xml 配置YARN
mapred-site.xml 配置MapReduce
配置文件应用的顺序:
- 在JobConf中指定的
- 客户端机器上的**-site.xml配置
- slave节点上的**-site.xml配置
- **-default.xml中的配置
如果某个属性不想被覆盖,可以将其设置成final
<property>
<name>{PROPERTY_NAME}</name>
<value>{PROPERTY_VALUE}</value>
<final>true</final>
</property>
- YARN: 分布式资源管理
- 每个block块都会被复制到多台机器,默认复制3份
- NameNode:存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小
- 一个Block在NameNode中对应一条记录(一般一个block占用150字节),如果是大量的小文件,会消耗大量内存。
同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处
理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件。
- NameNode 数据会定时保存到本地磁盘,但block的位置信息不会;block的位置信息是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)
- Secondary NameNode:定时与NameNode进行同步(定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志,类似于CheckPoint机制),但NameNode失效后仍需要手工将其设置成主机
- DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息
- DataNode之间会进行通信,复制数据块,保证数据的冗余性
- 文件写完后(客户端关闭),NameNode提交文件(这时文件才可见,如果提交前,NameNode垮掉,那文件也就丢失了。fsync:只保证数据的信息写到NameNode上,但并不保证数据已经被写到DataNode中)
- HDFS 读文件:
- 客户端向NameNode发送读取请求
- NameNode返回文件的所有block和这些block所在的DataNodes(包括复制节点)
- 客户端直接从DataNode中读取数据,如果该DataNode读取失败(DataNode失效或校验码不对),则从复制节点中读取
(如果读取的数据就在本机,则直接读取,否则通过网络读取)
- DataNode可以失效
DataNode会定时发送心跳到NameNode。如果在一段时间内NameNode没有收到DataNode的心跳消息,则认为其失效。此时NameNode就会将该节点的数据(从该节点的复制节点中获取)复制到另外的DataNode中
- 数据可以毁坏
无论是写入时还是硬盘本身的问题,只要数据有问题(读取时通过校验码来检测),都可以通过其他的复制节点读取,同时还会再复制一份到健康的节点中
- NameNode不可靠
- JobTracker: 负责资源管理,跟踪资源消耗和可用性,作业生命周期管理(调度作业任务,跟踪进度,为任务提供容错)
- TaskTracker: 加载或关闭任务,定时报告任务状态
- YARN 架构:
YARN 就是将JobTracker的职责进行拆分,将资源管理和任务调度监控拆分成独立的进程:一个全局的资源管理和一个每个作业的管理(ApplicationMaster)。
ResourceManager和NodeManager提供了计算资源的分配和管理,而ApplicationMaster则完成应用程序的运行。
- ResourceManager: 全局资源管理和任务调度
- NodeManager: 单个节点的资源管理和监控
- ApplicationMaster: 单个作业的资源管理和任务监控
- Container: 资源申请的单位和任务运行的容器