《权威指南》笔记十 管理Hadoop
作者:JesseZhang (CNZQS|JesseZhang)
博客地址:http://www.cnzqs.com
?
要点:
1、HDFS
1.1永久性数据结构
1.2 安全模式
1.3 日志审计
1.4 工具
2、监控
2.1 日志
2.2 度量
2.3 Java管理扩展(JMX)
3、维护
3.1 日常管理过程
3.2 委任和解除节点
3.3 升级
============================================
1、 HDFS
1、? 永久性数据结构
对管理员来说,需要深入了解namenode、辅助namenode和datanode等HDFS组件如何在磁盘组织永久性数据。
?
Namenode的目录结构:Namenode格式化后,将产生如下的目录结构:
${dfs.name.dir}/current/VERSION???????????? –java属性文件,包括HDFS版本信息等
/edits
/fsimage
/fstime
文件系统映像和编辑日志:
1、? fsimage文件是文件系统元数据的一个永久性检查点。包含文件系统中的所有目录和文件inode序列化信息。
2、? 解决edits文件无限增长的问题,主要解决方案是:运行辅助namenode,为主namenode内存中的文件系统元数据创建检查点。
?
辅助namenode的目录结构:
${dfs.name.dir}/current/VERSION???????????? –java属性文件,包括HDFS版本信息等
/edits
/fsimage
/fstime
/previous.checkpoint/VERSION
/edits
/fsimage
/fstime
1、? 辅助namenode的previous.checkpoint目录、辅助namenode的current目录和主namenode的current目录的布局相同。好处在于:在主namenode发生故障时,可以从辅助namenode回复数据。
?
datanode的目录结构:
datanode的存储目录是启动时自动创建的,不需要额外格式化。
datanode的关键文件和目录如下:
${dfs.name.dir}/current/VERSION
/blk_<id_1>
/blk_<id_1>.meta
/blk_<id_2>
/blk_<id_2>.meta
/…….
/blk_<id_64>
/blk_<id_64>.meta
/subdir0/
/subdir1/
/……
/subdir63/
1、VERSION中的namespaceID是首次访问namenode的时候,从namenode获取的。
2、各个datanode的storageID都不相同(但对于存储目录来说是相同的)
Current中两种文件类型:HDFS块文件(原始文件)和块的元数据文件(头部和该块各区段的一系列的校验和)。
2、? 目录存储64个(dfs.datanode.numblocks设置)后就创建一个子目录
3、? 同一个datanode上的每个磁盘上的块不会重复,不同datanode之间的块才可能重复。
?
安全模式:
?
启动过程中的准确阶段,安全模式
1、? 安全模式下,只有访问文件系统元数据的文件系统操作是会成功的。
2、? 系统中数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。系统正常操作期间,namenode会在内存中保留所有块位置的映射信息。安全模式下,各个datanode会向namenode检查块列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。
3、? 安全模式下,namenode并不向datanode发出任何块复制和块删除的指令。
4、? 如果满足“最小复本条件”,namenode会在30秒之后退出安全模式。
5、? 启动刚格式化的HDFS集群时,不会进入安全模式(没有任何块)
?
查看namenode是否处于安全模式:hadoop dfsadmin –safemode get
执行某条命令之前,先退出安全模式:hadoop dfsadmin –safemode wait
进入安全模式:hadoop dfsadmin –safemode enter
离开安全模式:hadoop dfsadmin –safemode leave
?
日志审计:
?
1、对日志审计是log4j在INFO级别实现的。默认的设置为WARN,未启动该项特性。
2、? 为了不与namenode日志混在一起,最好配置log4j,将审计日志写到单独的文件中。
?
工具:
1、? dfsadmin工具
作用:查找HDFS状态信息,又可在HDFS上执行管理操作。
只有当用户具有超级用户权限,才可以使用这个工具修改HDFS的状态。
2、? fsck工具
作用:检查HDFS中文件的健康状况。
执行fsck可以执行如下操作:
移动: -move?? 转移到HDFS的/lost+found目录
删除: -delete
3、? datanode块扫描器
作用:定期检测本节点上的所有块,从而在客户端读到坏块之前及时地检测和修复坏块。
默认每隔三周(504小时)执行一次,dfs.datanode.scan.period.hours设置
损坏的块被报给namenode,并被及时修复。
http://datanode:50075/blockScannerReport
http://datanode:50075/blockScannerReport?Listblocks
4、? 均衡器
Balancer是一个Hadoop守护进程,它将块从忙碌的datanode移到相对空闲的datanode,从而重新分配块。同时坚持复本放置策略,将复本分散到不同机架,以降低数据损坏率。
均衡的条件:每隔datanode的使用率和集群的使用率非常接近
启动:start-balancer.sh
-threshold 指定阀值;默认10%
均衡器后台运行,且带宽是有限的(默认1M/s )在hdfs-site.xml的dfs.balance.bandwidthPerSec指定(单位字节)
?
2、 监控
?
1、? 主守护进程最需要被监控。
2、? Datanode和tasktracker经常出现故障,在大型集群中故障率比较高
3、? 除了监控,可以定期运行一些测试作业,检查集群的运行情况
4、? 常用的监控工具是:Chukwa
?
日志:
1、? 可以通过守护进程的网页,在守护进程的网页的 /logLevel 目录下来改变日志级别
2、? 日志名称最好从源代码中查找
3、? 获取堆栈轨迹:网页界面的/stacks目录
?
?
度量:
?
1、? HDFS和MapReduce守护进程收集的事件和度量相关的信息,这些信息统称为“度量”
2、? 度量从属于特定的上下文(context)。目前Hadoop使用“dfs”、“mapred”、“rpc”、“jvm”四个上下文。
3、? 度量和计数器的区别:
a)???????? 主要区别是使用范围不同。度量由守护进程收集。计数器由mapreduce任务收集后再生成针对整个作业进行汇总。
b)???????? 工作方式也不同,包括数据采集和聚集过程。计数器是MapReduce的特性;度量是收集机制和接收更新的组件独立。
4、? FileContext:将度量写到一个文件
5、? GangliaContext:Ganglia针对超大规模集群的开源的分布式监控系统。
6、? NullContextWithUpdateThread
7、? CompositeContext
个人理解:度量主要是用来收集集群运行情况,进行监控
?
???????? Java管理扩展(JMX)
1、? 标准的Java API,可监控和管理应用。
2、? Hadoop包括多个托管bean(MBean),可以将Hadoop度量发布给支持JMX的应用。目前支持dfs和rpc,不支持mapred和jvm
3、? JDK自带的JConsole工具来浏览JVM中的MBean,可以浏览Hadoop的度量
?
比较常用普遍的方案是:
同时使用Ganglia和Nagios这样的警告系统来监控Hadoop系统。Ganglia擅长高效收集大量度量,并以图形化界面呈现;Nagios和类似系统擅长在某项度量的关键阀值被突破之后及时报警。
?
3、 维护
?
日常管理过程
1、? 元数据备份
2、? 数据备份
3、? Fsck工具
4、? 文件系统均衡器
?
委任和解除节点
1、? 正常情况下,节点同时运行datanode和tasktracker,二者一般同时委任或解除。
?
委任新节点:
1、? 配置hdfs-site.xml 指向namenode
2、? 配置mapred-site.xml文件,指向jobtracker
3、? 启动datanode和jobtracker守护进程
允许连接的机器的配置:dfs.hosts属性()
解除旧节点:
?
用户将拟退出的若干datanode告知namenode,方可在这些datanode停机之前将块复制到其他datanode。
?
升级:
需要细致的规划,特别是HDFS的升级,防止数据丢失。
规划过程最好包括在一个小型测试集群上的测试过程,以评估是否能够承担数据丢失的损失。
如果文件系统布局不改变,升级集群就比较简单:
1、? 在集群上安装新的HDFS和MapReduce
2、? 关闭旧的守护进程,升级配置文件
3、? 启动新的守护进程,令客户端使用新的库
整个过程完全可逆。
?
升级成功后,需要执行几个清除步骤:
1、? 从集群中移除旧的安装和配置文件
2、? 在代码和配置文件中修补被弃用的警告信息。
?
HDFS的数据和元数据升级:
1、? 仅当系统健康时,才可升级,升级之前要用fsck工具全面检查。
2、? 升级前,最好清空临时文件。