hadoop学习笔记(一)

本文介绍了MapReduce作业控制机制,包括jobtracker和tasktracker的角色,以及如何通过数据本地化优化map任务。同时,深入探讨了HDFS的设计理念,如流式数据访问模式、namenode的元数据管理方式及数据块的大小选择等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapReduce

作业控制

  • 两类节点控制作业的执行:一个jobtracker和一系列tasktracker。

  • jobtracker调度tasktracker上运行的任务来协调整个作业。tasktracker在运行任务的同时将运行进度报告发送给jobtracker。

  • 作业的输入数据划分为分片split),每个分片构建一个map任务,一般一个分片就是一个HDFS的块大小,这是最佳分片。

map任务

  • “数据本地化优化”:在存储有输入数据的节点上运行map任务,不消耗宝贵的带宽资源。(这也是为什么一个分片一个块的原因,如果一个分片多个块的话,会有带宽消耗)。

  • map任务将其输出写入本地磁盘,而非HDFS,因为map的输出只是中间结果,不需要备份。

reduce任务

  • reduce任务不具备“数据本地化”的优势。它的输出需要存储到HDFS中实现可靠存储,第一个副本存入本地节点,其他存入其他机架节点。
  • reduce任务的数量不由输入数据大小决定,而是独立指定的。
  • 对于多个reduce任务,每个map任务会对输出进行分区(partition),每个reduce任务对应一个分区。每个分区有许多键,但是同一个键对应的记录都会在同一个分区中。分区由用户定义的partition函数控制,默认是哈希函数。
  • map和reduce间的数据流称为shuffle(混洗)。

combiner

  • combiner是一种对map输出的优化方案,可以将combiner的输出为reduce的输入,减少map和reduce任务间的数据传输,节省带宽。

HDFS

设计

  • 流式数据访问:一次写入、多次读取时最高效的访问模式

  • HDFS不支持低时间延迟的数据访问,可以使用HBase。

  • namenode将文件系统的元数据存储在内存中。

  • HDFS只能有一个writer,写入操作将数据添加在文件末尾。不支持多写入。

概念

数据块
  • 一个块默认128MB。HDFS中小于一个块大小的文件不会占据整个块的空间。

  • HDFS的块比磁盘块大,是为了最小化寻址开销。因而,传输一个文件的时间取决于磁盘传输速率。但是这个块也不应该设置的过大,过大的话,块少,则map任务少,若是少于集群中的节点数量,则作业运行速度慢。

  • 列出文件系统中各个文件由哪些块构成:
    % hadoop fsck / -files -blocks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值