hdfs的优缺点

优点

  • hdfs本身支持超大文件,一般存储的是TB和PB级别的数据
  • 检测和快速应对硬件故障
  • 流式数据访问
  • 简化的一致性模型
  • 高容错性,可以构建在廉价的机器上,轻松的通过扩展机器数据,近乎线性的提高机器存储能力

缺点

  • 高延迟数据访问,但是高吞吐
  • 不适合大量小文件的存储
  • 不支持多用户写入文件、修改文件,hdfs只能一次写入,不支持行级别的增删改(2.0以后支持末尾追加数据)
  • 不支持超强的事务

MapReduce

大数据运算问题的基本解决思路:分而治之,然后汇总

  1. MapReduce概述
    MapReduce是一种海量数据的分布式计算框架,由Google提出,最开始主要用于搜索领域,解决海量数据的计算问题,Apache对谷歌的《MapReduce》论文做了开源实现,整合到Hadoop里,就是现在的Hadoop的MapReduce。
    整个MapReduce分为两个阶段,一个阶段叫做map阶段,一个阶段叫做reduce计算。
    真正运算的时候,只需要写mapper中的map函数和reducer中的reduce函数即可
  2. MapReduce原理
    切分,逻辑切,split,数据切片,默认情况下,切split的规则和切block规则一样;
    一个切片会由一个maptask来单独处理,默认情况下,一个maptask(mapper任务)拿到自己的切片以后,会按行读取文件,每读一次行,就触发一次mapper里面map函数,来处理这一行,对于map函数来说,它的输入是一个键值对,我们称之为k1v1,k1是当前行在整个文件中的偏移量,而v1就是当前行的内容,k1v1经过map函数处理之后要生成k2v2,会经过中间数据分配的机制,叫做shuffle(洗牌)过程,然后分配数据,来决定哪些k2v2由哪个reduceTask处理,(默认的shuffle规则就是所有k2相同的一定去往同一个机器),经过排序、分组等过程之后,会把k2相同的键值对,合成一条数据,所有的value合成一个数组,产生的这个键值对叫做k3v3,k3v3会依次进入reducer程序,每个k3v3触发一个reduce方法,处理之后输出,输出的也是一个键值对,叫做k4v4。