首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

《权威指南》札记十 管理Hadoop

2012-07-20 
《权威指南》笔记十 管理Hadoop作者:JesseZhang (CNZQS|JesseZhang)博客地址:http://www.cnzqs.com?要点:1、H

《权威指南》笔记十 管理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、? 升级前,最好清空临时文件。


-----------------------------------------转载请注明来源:CNZQS|JesseZhang的个人博客-《《权威指南》笔记十 管理Hadoop》本文链接地址:http://www.cnzqs.com/?p=112

热点排行