《Hadoop权威指南》读书笔记

第1章 初识Hadoop

  • "大数据胜于好算法",因此需要有好的方法去存储和分析数据.
  • 一个简单的减少读取时间的办法是同时从多个硬盘上读数据,为此需要解决一些问题:
  1. 硬件故障问题,常见做法是复制,即系统保存数据的副本,例如冗余硬盘阵列(RAID)Hadoop的文件系统(HDFS).
  2. 需要以某种方式结合大部分数据来共同完成分析,解决方式是MapReduce,将硬盘读写问题抽象为对数据集的计算.
  • MapReduce是一个批量查询处理器,能够在合理的时间范围内处理针对整个数据集的动态查询.因此它并不适合交互式分析.但随着发展Hadoop已经超越了批处理本身.

第2章 关于MapReduce

  • 为了加快大数据作业的处理速度,需要使用并行处理程序.如果只是单纯地用不同线程来处理不同数据,那么运行时间仍取决于处理最长文件所需要的时间.因此需要将不同数据按固定大小分割为几个块,每个块独立处理,最后再将每个块处理后得到的数据进行比较.
  • MapReduce分为两个处理阶段:Map和Reduce,每个阶段都以键值对作为输入和输出.
  1. map的键是某一行起始位置相对于文件起始位置的偏移量.值则是按需要从原数据中提取出的部分数据.
  2. map函数的输出经由MapReduce框架处理后最后发送到reduce函数,reduce函数按需要对数据进行查询后输出结果.
  • MapReduce作业(job)是客户端需要执行的一个工作单元.Hadoop将作业分成若干个任务(task)来执行,这些任务运行在集群的节点上,并通过YARN进行调度.如果一个任务失败,将在另一个不同的节点上自动重新调度运行.
  • Hadoop将MapReduce的输入数据划分成等长的小数据块,称为分片(input split).每个分片构建一个map任务,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录.一个合理的分片大小趋向于HDFS的一个块的大小,默认是128MB.
  • map任务有本地数据,本地机架和跨机架任务三种,因此最佳分片的大小应该与块大小相同.map任务将其输出写入本地硬盘,因为map的输出结果只是作为中间值.
  • 单个reduce任务的输入通常来自于所有mapper的输出.reduce任务的数量是独立指定的.map和reduce之间的数据流称为混选(shuffle),因为每个reduce任务的输入都来自于许多map任务.也有可能出现无reduce任务的情况,此时map任务直接将结果写入HDFS.
  • map和reduce任务之间的数据传输受集群的可用带宽限制.因此可以针对map的输出指定一个combiner,combiner的输出作为reduce的输入,可以减少数据的传输量.

猜你喜欢

转载自www.cnblogs.com/limitlessun/p/9401164.html
今日推荐