Hadoop权威指南学习记录(一)

小知识:

  1. 调用hadoop命令的第一个参数是类名, Hadoop会启动一个JVM来运行这个类。使用hadoop命令比java命令更为方便,前者将Hadoop的库文件(及其依赖关系)路径加入到类路径参数中,同时也能获得hadoop的配置文件。需要定义一个HADOOP_CLASSPATH环境变量用于参加应用程序类的路径,然后由Hadoop脚本执行。
  2. map任务将其输出写入本地硬盘,而不是HDFS。
  3. namenode保存命名空间镜像文件和编辑日志文件在磁盘中。同时也记录着每个文件各个块所在的数据节点信息。但它并不会永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。

设计问题

  1. 对文件的最佳分片大小为什么与块大小相同?
    块大小是指默认配置的HDFS中一个数据块的大小。Hadoop将MapReduce的输入数据划分为等长的小数据块,称为“分片”。Hadoop为每个分片构建一个map任务,由该任务来运行用户自定义的map函数从而处理分片中的每条记录。
    之所以设置分片大小不大于块大小,是为了使“数据本地化优化”,使hadoop能够在储存有输入数据的节点上运行,而无需占用宝贵的集群带宽资源,如果分片大小大于块的大小,分片就很有可能存在不同的节点上,就会有节点间的传输。同时,如果分片大小过小,管理分片的时间和构建map任务的时间将决定作业的整个执行时间。

    PS:但有时候即使分片大小与块大小相同,储存有某个HDFS数据块的三个节点都在运行其他map任务,此时作业调度需要在三个备份中的某个寻求同个机架中空闲的机器来运行该任务。仅仅在非常偶然的情况下,会使用其他机架中的机器来运行该map任务,这将导致机架间的网络传输。三种情况分别是本地数据,本地机架,跨机架map任务。

  2. 为什么HDFS中块要设计地如此之大?
    文件系统块一般为几千字节,磁盘块一般为512字节,而HDFS中块一般为64M或者128M。之所以大这么多,是为了最小化寻址开销。如果块足够大,从磁盘传输数据的时间就会明显大于定位这个块开始位置所需要的时间。传输一个由多个块组成的文件的时间将取决于磁盘传输速率。
    但也不能设置的过大,过大的话任务数就会过少(少于集群节点的数目),作业的运行速度也会较慢。故障发生后恢复的速度也会过慢,处理一个任务所需要的时间也会难以预估,难以判断任务是否失败。

概念

  1. namenode和datanode
    hdfs集群中两类节点以管理者-工作者模式运行,即一个namenode,多个datanode。namenode管理文件系统的命名空间,维护文件系统树和整个树内所有的文件和目录。这些信息以两个文件形式永久储存:命名空间镜像文件和编辑日志文件。虽然namenode保存每个文件的各个块所在的数据节点信息,但并不永久保存块的位置信息,这些信息会在系统启动时由数据节点重建。

容错机制

  1. namenode非常重要,对namenode的容错提供了了两种机制。
    一是备份那些组成文件系统元数据持久状态的文件。一般的配置是将持久状态写入本地磁盘的同时,也写入一个远程挂载的网络文件系统(NFS)。
    二是运行一个辅助namenode。其重要作用是定期通过编辑日志合并命名空间映像,防止编辑日志过大,并保存合并后的命名空间镜像的副本,并在namenode发生故障后启用。但辅助namenode总是滞后于主节点,所以一般把NFS上的namenode元数据复制到辅助namonode,并作为主namenode运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值