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


-----------------------------------------
本文链接地址: http://www.cnzqs.com/?p=112

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值